Restarting a Duplicate Process From a VERY Failed State
As part of an 11g Upgrade, it was found that a database environment could be built from one of the upgraded databases through a duplicate. As this process had never been performed before in this fashion, a test was in order. The test was an excellent chance to discover that the OSUser that performs the duplicate process was the proud owner of a .kshrc file with hard coded Oracle variables set which was an excellent choice if you want to really screw up a new duplicate database… 🙂
Scenario:
1. Duplicate has started with correct variables set.
2. Subsequent shell scripts then “upset” the environment mid-process leaving a failed duplicate with ASM files for the controlfiles created, but the DBID and dbname still set to the target database, not the auxillary.
3. Post the failure, the auxillary, (duplicate) database can only be mounted, not opened.
After setting environment to building auxillary database environment, after duplicate failure and you see in the spfile, name of db is no longer the auxilary database. |
1. Shutdown the auxilary database: |
[oracledbs]$ sqlplus ‘/as sysdba’ |
SQL> shutdown; |
ORA-01109: database not open |
Database dismounted. |
ORACLE instance shut down.@ |
In a second screen set to +ASM instance for auxillary, remove controlfiles for target db that have been set to that name through the asmcmd command console: |
[oracle@dbs]$ asmcmd |
ASMCMD> ls |
DATA_H/ |
DATA_RAM_H/ |
ASMCMD> cd DATA_H |
ASMCMD> ls |
DB_H/ |
ASMCMD> cd DB_H |
ASMCMD> ls |
CONTROLFILE/ |
ASMCMD> cd CONTROLFILE |
ASMCMD> ls |
control1.ctl <–these are control files for auxillary, stuck with dbname of target, can’t be renamed, can’t mount db! |
control2.ctl |
control3.ctl |
current.389.766743537 |
current.445.766743537 |
current.500.766743537 |
ASMCMD> rm control* |
You may delete multiple files and/or directories. |
Are you sure? (y/n) y |
ASMCMD> quit |
Back on your original screen now, restart the auxillary with pfile set to corect dbname and start with this pfile- |
SQL> startup nomount pfile=’/u01/app/oracle/product/11.2.0/dbhome_2/dbs/initdb_h.ora’ |
ORACLE instance started. |
Total System Global Area 7.6964E+10 bytes |
Fixed Size 2215704 bytes |
Variable Size 3.0065E+10 bytes |
Database Buffers 4.6708E+10 bytes |
Redo Buffers 189513728 bytes |
SQL> create spfile from pfile; |
File created. |
SQL> shutdown; |
ORACLE instance shut down. |
SQL> startup nomount; |
ORACLE instance started. |
Total System Global Area 7.6964E+10 bytes |
Fixed Size 2215704 bytes |
Variable Size 3.0065E+10 bytes |
Database Buffers 4.6708E+10 bytes |
Redo Buffers 189513728 bytes |
Now you can restart the duplicate process and the database will again be recognized correctly. |