Its showing the same error.

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Its showing the same error.

Mohsin Ali
Recovery Manager: Release 11.2.0.4.0 - Production on Thu May 21 15:40:00 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database (not started)

RMAN> startup nomount pfile=/oradata/app/oracle/11.2.0/dbs/initSTRESS.ora.tmp
2> restore controlfile from '/stage/new_clone/backup_controlfile.ctl';
3> alter database mount;
4> exit
Oracle instance started
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of startup command at 05/21/2015 15:40:11
RMAN-06403: could not obtain a fully authorized session
ORA-00604: error occurred at recursive SQL level 1
ORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","unknown object","KGLH0^f47ce521","kglHeapInitialize:temp")

Recovery Manager complete.
~
~
Reply | Threaded
Open this post in threaded view
|

Re: Its showing the same error.

ErmanArslansOracleBlog
Administrator
hmm it opens the database in nomount mode using the pfile:
/oradata/app/oracle/11.2.0/dbs/initSTRESS.ora.tmp

what is the contents of this pfile: can you copy/paste the contents of it..
/oradata/app/oracle/11.2.0/dbs/initSTRESS.ora.tmp
Reply | Threaded
Open this post in threaded view
|

Re: Its showing the same error.

ErmanArslansOracleBlog
Administrator
One thing you can do is as follows, note that this is not a supported action and may be a last resort..

It seems it is hardcoded in ApplyRmanDatabase.class file, when you decompile this file; you ll see the gen_InitTmp_ora method, it creates the temporary init.ora file that adclone uses during the first startup:


    public void gen_InitTmp_ora()
    {
        m_sDbOh = m_context.getReplValIgnoreCase("s_db_oh");
        m_sSid = m_context.getReplValIgnoreCase("s_dbSid");
        m_sGlblDbName = m_context.getReplValIgnoreCase("s_dbGlnam");
        dbVersion = m_context.getReplValIgnoreCase("s_database");
        try
        {
            String s = (new StringBuilder()).append(m_sDbOh).append(File.separator).append("dbs").append(File.separator).append("init").append(m_sSid).append(".ora.tmp").toString();
            File file = new File(s);
            LogFile.getLogFile().info((new StringBuilder()).append("Attempting to create init").append(m_sSid).append(".ora.tmp file\n").toString());
            file.delete();
            try
            {
                m_InitTmpFile = new PrintWriter(new FileWriter(s, true));
            }
            catch(Exception exception1)
            {
                String as1[] = {
                    "method", "gen_InitTmp.ora"
                };
                String s2 = MessageHandler.getMessage("RC-13032", as1, 0, false);
                LogFile.getLogFile().info(s2);
                LogFile.getLogFile().info(exception1.getMessage());
                throw exception1;
            }
            LogFile.getLogFile().info((new StringBuilder()).append("File init").append(m_sSid).append(".ora.tmp successfully created\n").toString());
            m_InitTmpFile.println((new StringBuilder()).append("db_name=").append(sOldGlDbName).toString());
            m_InitTmpFile.println((new StringBuilder()).append("db_unique_name=").append(m_sGlblDbName).toString());
            m_InitTmpFile.println("db_files = 4096");
            m_InitTmpFile.println((new StringBuilder()).append("db_create_file_dest=").append(sRmanTargetLoc).toString());
            m_InitTmpFile.println((new StringBuilder()).append("db_recovery_file_dest=").append(sRmanTargetLoc).toString());
            m_InitTmpFile.println("db_recovery_file_dest_size=300g");
            m_InitTmpFile.println((new StringBuilder()).append("control_files=").append(sRmanTargetLoc).append(File.separator).append(m_sGlblDbName.toUpperCase()).append(File.separator).append("controlfile_").append(m_sGlblDbName).append(".ctl").toString());
            m_InitTmpFile.println("sga_target=1g");
            m_InitTmpFile.println("processes=200");
            m_InitTmpFile.println("sga_max_size=2g");
            m_InitTmpFile.println("open_cursors=1000");
            if(dbVersion != null && dbVersion.startsWith("db111"))
                m_InitTmpFile.println("compatible=11.1.0");
            else
            if(dbVersion != null && dbVersion.startsWith("db112"))
                m_InitTmpFile.println("compatible=11.2.0");
            m_InitTmpFile.flush();
        }
        catch(Exception exception)
        {
            String as[] = {
                "method", "gen_RMANRAC_restore"
            };
            String s1 = MessageHandler.getMessage("RC-50208", as, 0, false);
            LogFile.getLogFile().info(s1);
            LogFile.getLogFile().info(exception.getMessage());
        }
    }



So
If you decompile this java and add;  m_InitTmpFile.println("shared_pool_size=1000m"); inside of this file and recompile it from the source, it should work.
So it will be something like the following;

public void gen_InitTmp_ora()
    {
        m_sDbOh = m_context.getReplValIgnoreCase("s_db_oh");
        m_sSid = m_context.getReplValIgnoreCase("s_dbSid");
        m_sGlblDbName = m_context.getReplValIgnoreCase("s_dbGlnam");
        dbVersion = m_context.getReplValIgnoreCase("s_database");
        try
        {
            String s = (new StringBuilder()).append(m_sDbOh).append(File.separator).append("dbs").append(File.separator).append("init").append(m_sSid).append(".ora.tmp").toString();
            File file = new File(s);
            LogFile.getLogFile().info((new StringBuilder()).append("Attempting to create init").append(m_sSid).append(".ora.tmp file\n").toString());
            file.delete();
            try
            {
                m_InitTmpFile = new PrintWriter(new FileWriter(s, true));
            }
            catch(Exception exception1)
            {
                String as1[] = {
                    "method", "gen_InitTmp.ora"
                };
                String s2 = MessageHandler.getMessage("RC-13032", as1, 0, false);
                LogFile.getLogFile().info(s2);
                LogFile.getLogFile().info(exception1.getMessage());
                throw exception1;
            }
            LogFile.getLogFile().info((new StringBuilder()).append("File init").append(m_sSid).append(".ora.tmp successfully created\n").toString());
            m_InitTmpFile.println((new StringBuilder()).append("db_name=").append(sOldGlDbName).toString());
            m_InitTmpFile.println((new StringBuilder()).append("db_unique_name=").append(m_sGlblDbName).toString());
            m_InitTmpFile.println("db_files = 4096");
            m_InitTmpFile.println((new StringBuilder()).append("db_create_file_dest=").append(sRmanTargetLoc).toString());
            m_InitTmpFile.println((new StringBuilder()).append("db_recovery_file_dest=").append(sRmanTargetLoc).toString());
            m_InitTmpFile.println("db_recovery_file_dest_size=300g");
            m_InitTmpFile.println((new StringBuilder()).append("control_files=").append(sRmanTargetLoc).append(File.separator).append(m_sGlblDbName.toUpperCase()).append(File.separator).append("controlfile_").append(m_sGlblDbName).append(".ctl").toString());
            m_InitTmpFile.println("sga_target=3g"); /* Here I increase sga_target a little bit */
            m_InitTmpFile.println("processes=200");  
            m_InitTmpFile.println("sga_max_size=3g"); /* Here I increase sga_max_size a little bit */
            m_InitTmpFile.println("shared_pool_size=1000m");     /* Here I add the shared_pool_size */
            m_InitTmpFile.println("open_cursors=1000");
            if(dbVersion != null && dbVersion.startsWith("db111"))
                m_InitTmpFile.println("compatible=11.1.0");
            else
            if(dbVersion != null && dbVersion.startsWith("db112"))
                m_InitTmpFile.println("compatible=11.2.0");
            m_InitTmpFile.flush();
        }
        catch(Exception exception)
        {
            String as[] = {
                "method", "gen_RMANRAC_restore"
            };
            String s1 = MessageHandler.getMessage("RC-50208", as, 0, false);
            LogFile.getLogFile().info(s1);
            LogFile.getLogFile().info(exception.getMessage());
        }
    }

After changing the lines; the action plan is;

cd $ORACLE_HOME/appsutil/java/oracle/apps/ad/clone
mv ApplyRmanDatabase.class ApplyRmanDatabase.class.original  (we take a backup here)
javac -cp $ORACLE_OME/appsutil/java/  ApplyRmanDatabase.java
Retry.
Reply | Threaded
Open this post in threaded view
|

Re: Its showing the same error.

Singh
Hello Erman,
I have the same problem. However I an not able to compile the java code back to class file. It's throwing me a bunch of undefined symbol errors. How did you get it to compile? Your help will be very much appreciated.
Thanks.
Singh
Reply | Threaded
Open this post in threaded view
|

Re: Its showing the same error.

ErmanArslansOracleBlog
Administrator
How do you decompile it?