[原]在Linux中通過本地復制的方式創建多一個Oracle數據庫
在 Oracle 的世界里,一個實例只能打開一個數據庫,如果我想在本機中同時運行兩個數據庫,那就要開啟兩個實例了,而不同的實例的標識就是SID。
關閉現有數據庫,設定好一個新的 SID 后,通過復制參數文件為 spfile<New SID>.ora 作為新實例的參數文件,將控制文件、數據文件和重做日志復制一份到相應的目錄,此時新的數據庫就有一個雛形了;將數據庫啟動 nomout 階段修改spfile中的新數據庫的 controlfile 的位置就可以將數據庫啟動到 mount 階段,在 mount 階段將數據文件和重做日志的文件修改到新路徑后就可以打開數據庫了。
整個過程都很順利,但是此時再試圖打開原來的數據庫就會報錯了:
ORA-01102: cannot mount database in EXCLUSIVE mode
而 alert 文件中出現如下信息:
Sat Oct 9 11:14:18 2010 ALTER DATABASE MOUNT Sat Oct 9 11:14:18 2010 sculkget: failed to lock /u01/app/oracle/dbs/lkORA8I exclusive sculkget: lock held by PID: 11621 Sat Oct 9 11:14:18 2010 ORA-09968: Message 9968 not found; No message file for product=RDBMS, facility=ORA Linux-x86_64 Error: 11: Resource temporarily unavailable Additional information: 11621 Sat Oct 9 11:14:18 2010 ORA-1102 signalled during: ALTER DATABASE MOUNT...
舊的數據庫的 SID 和 DB_NAME 均是 ORA8I,failed to lock /u01/app/oracle/dbs/lkORA8I exclusive 應該就是問題所在了,在參數文件中的db_name好改,但是db_name還存在于控制文件和數據文件中,這些文件怎么改呢? 這個就要借助nid程序了。
首先將新數據庫啟動到 mount 階段,假設新的數據庫的實例是oratmp,數據庫名也是oratmp。
[oracle@l004020 ~]$ export $ORACLE_SID=oratmp
[oracle@l004020 ~]$ nid target=sys/sys_password dbname=oratmp
DBNEWID: Release 10.2.0.2.0 - Production on Sat Oct 9 11:37:47 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to database ORA8I (DBID=152116074)
Connected to server version 10.2.0
Control Files in database:
/u02/oradata/oratmp/control01.ctl
/u02/oradata/oratmp/control02.ctl
/u02/oradata/oratmp/control03.ctl
Change database ID and database name ORA8I to ORATMP? (Y/[N]) => y
Proceeding with operation
Changing database ID from 152116074 to 3320092043
Changing database name from ORA8I to ORATMP
Control File /u02/oradata/oratmp/control01.ctl - modified
Control File /u02/oradata/oratmp/control02.ctl - modified
Control File /u02/oradata/oratmp/control03.ctl - modified
Datafile /u02/oradata/oratmp/system01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/oratmp/undotbs01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/oratmp/sysaux01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/oratmp/users01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/ora8i/temp01.dbf - dbid changed, wrote new name
Control File /u02/oradata/oratmp/control01.ctl - dbid changed, wrote new name
Control File /u02/oradata/oratmp/control02.ctl - dbid changed, wrote new name
Control File /u02/oradata/oratmp/control03.ctl - dbid changed, wrote new name
Instance shut down
Database name changed to ORATMP.
Modify parameter file and generate a new password file before restarting.
Database ID for database ORATMP changed to 3320092043.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database name and ID.
DBNEWID - Completed succesfully.
[oracle@l004020 ~]$ sqlplus / as sysdba
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup mount ;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 2069648 bytes
Variable Size 104860528 bytes
Database Buffers 50331648 bytes
Redo Buffers 10510336 bytes
ORA-01103: database name 'ORATMP' in control file is not 'ORA8I'
SQL> alter system set db_name='oratmp' scope=spfile;
System altered.
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup mount ;
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 2069648 bytes
Variable Size 104860528 bytes
Database Buffers 50331648 bytes
Redo Buffers 10510336 bytes
Database mounted.
SQL> alter database open ;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs ;
Database altered.
#再看看hc<db_name>文件。
[oracle@l004020 dbs]$ ls -lth hc*
-rw-rw---- 1 oracle dba 1.6K 10-09 11:49 hc_oratmp.dat
-rw-rw---- 1 oracle dba 1.6K 10-09 11:34 hc_ora8i.dat
簡單來說就是如下幾步:
1。startup mount ;
2。nid target=sys/sys_password dbname=oratmp
3。alter system set db_name=<new dbname> ;
4。shutdown
5。startup mount ;
6。alter database open resetlogs。
浙公網安備 33010602011771號