當我們手動copy了整個資料庫,并通過重建控制檔案給資料庫指定了新的dbname,但是卻不能給資料庫配置設定新的dbid.對于以上問題我們可以通過nid指令來對資料庫配置設定一個全新的dbid。同時需要注意rman也是通過dbid來區分資料庫。
一 指令解釋
[oracle@source ~]$ nid help=yes
DBNEWID: Release 11.2.0.2.0 - Production on Thu Dec 5 00:09:50 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Keyword Description (Default)
----------------------------------------------------
TARGET Username/Password (NONE) 指定連接配接資料庫的使用者名和密碼
DBNAME New database name (NONE) DBNAME=new_db_name 改變資料庫的名字
LOGFILE Output Log (NONE) LOGFILE=logfile指定輸出消息到指定的日志檔案,預設nid覆寫之前的日子檔案
REVERT Revert failed change NO 指定yes表明更改dbid失敗時能夠恢複之前的狀态
SETNAME Set a new database name only NO 指定yes表明僅僅更改資料庫db_name
APPEND Append to output log NO 指定yes辨別輸出追加到已經存在的日志檔案
HELP Displays these messages NO 指定yes顯示幫助資訊
注意:可以同時更改資料庫的dbid和db_name,也可以僅改變資料庫的db_name、抑或僅更改資料庫的dbid。文法分别如下:
改變dbid和db_name : nid target=sys/dhhzdhhz dbname=crm_test (也可以target=/)
僅改變db_name: nid target=sys/dhhzdhhz dbname=crm_test setname=yes (也可以target=/)
僅更改dbid: nid target=sys/dhhzdhhz (也可以target=/)
二 使用nid的注意事項
1 確定有能夠對資料庫進行完全恢複的備份。
2 確定執行更改dbid操作時資料庫處于mounted狀态且mounted之前資料庫是經過shutdown immediate關閉的。
3 使用nid更改資料庫的dbid後,資料庫需要alter database open resetlogs啟動,啟動之後須對資料庫進行一次全備份,因為之前的備份和歸檔已經不能再使用了。
4 使用nid更改資料庫dbname後,需更改初始化參數檔案中的DB_NAME參數并重建密碼檔案。
5 使用nid不能更改全局資料庫名。
6 確定所有資料檔案處于online狀态且不需要恢複。
7 盡量確定oracle沒有離線的資料檔案和隻讀表空間,如果有使其正常化。
三 舉兩個例子
eg1:僅更改資料庫dbid
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2226072 bytes
Variable Size 922749032 bytes
Database Buffers 318767104 bytes
Redo Buffers 8921088 bytes
Database mounted.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@source ~]$ nid target=sys
DBNEWID: Release 11.2.0.2.0 - Production on Wed Dec 4 23:39:11 2013
Password:
Connected to database CRM (DBID=3599153036)
Connected to server version 11.2.0
Control Files in database:
/oracle/CRM/control03.ctl
Change database ID of database CRM? (Y/[N]) => y
Proceeding with operation
Changing database ID from 3599153036 to 3641774948
Control File /oracle/CRM/control03.ctl - modified
Datafile /oracle/CRM/system01.db - dbid changed
Datafile /oracle/CRM/sysaux01.db - dbid changed
Datafile /oracle/CRM/zx.db - dbid changed
Datafile /oracle/CRM/users01.db - dbid changed
Datafile /oracle/CRM/pos.db - dbid changed
Datafile /oracle/CRM/erp.db - dbid changed
Datafile /oracle/CRM/user01.db - dbid changed
Datafile /oracle/CRM/undotbs03.db - dbid changed
Datafile /oracle/CRM/crm.db - dbid changed
Datafile /oracle/CRM/jxc.db - dbid changed
Datafile /oracle/CRM/temp01.db - dbid changed
Control File /oracle/CRM/control03.ctl - dbid changed
Instance shut down
Database ID for database CRM changed to 3641774948.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database ID.
DBNEWID - Completed succesfully.
[oracle@source ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Wed Dec 4 23:47:21 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount;
SQL> alter database open resetlogs;
Database altered.
SQL> select dbid,name from v$database;
DBID NAME
---------- ---------
3641774948 CRM
eg2 :僅更改資料庫db_name
oracle@source ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:11:03 2013
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
Variable Size 905971816 bytes
Database Buffers 335544320 bytes
oracle@source ~]$ nid target=sys dbname=CRM_TEST setname=YES
DBNEWID: Release 11.2.0.2.0 - Production on Thu Dec 5 00:24:58 2013
Connected to database CRM (DBID=3641774948)
Change database name of database CRM to CRM_TEST? (Y/[N]) => y
Changing database name from CRM to CRM_TEST
Datafile /oracle/CRM/system01.db - wrote new name
Datafile /oracle/CRM/sysaux01.db - wrote new name
Datafile /oracle/CRM/zx.db - wrote new name
Datafile /oracle/CRM/users01.db - wrote new name
Datafile /oracle/CRM/pos.db - wrote new name
Datafile /oracle/CRM/erp.db - wrote new name
Datafile /oracle/CRM/user01.db - wrote new name
Datafile /oracle/CRM/undotbs03.db - wrote new name
Datafile /oracle/CRM/crm.db - wrote new name
Datafile /oracle/CRM/jxc.db - wrote new name
Datafile /oracle/CRM/temp01.db - wrote new name
Control File /oracle/CRM/control03.ctl - wrote new name
Database name changed to CRM_TEST.
Modify parameter file and generate a new password file before restarting.
Succesfully changed database name.
SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:25:33 2013
SQL> startup nomount;
SQL> alter system set db_name=CRM_TEST scope=spfile;
System altered.
[oracle@source ~]$orapwd file="$ORACLE_HOME/dbs/orapw$ORACLE_SID" password=dhhzdhhz force=y
[oracle@source dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:34:40 2013
SQL> startup force open;
Database opened.
3641774948 CRM_TEST
本文轉自 zhangxuwl 51CTO部落格,原文連結:http://blog.51cto.com/jiujian/1336559,如需轉載請自行聯系原作者