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. ~ ~ |
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 |
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. |
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 |
Administrator
|
How do you decompile it?
|
Free forum by Nabble | Edit this page |