如非必要,不建議在生産庫上對dbid進行修改
1、修改dbid及dbname的影響
a、修改dbid
等同于建立一個新的資料庫,不同的是資料已經存在于資料檔案。這是由dbid的唯一性決定的。
修改之後所有之前的備份與歸檔日志将不可用,因為在恢複時會檢測dbid,由于不比對,則所有備份無效。
修改之後需要使用open resetlogs打開資料庫,一個新的incarnation會被建立,且sequence被置為1。
修改之後且成功open的情形下,建議一緻性關閉資料庫,重新開機并做一個完整的備份。
b、修改dbname
修改之後,無需使用open resetlogs打開資料庫。(注dbname不具有唯一性,global name則具有唯一性)。
修改之後,所有的備份即歸檔日志依舊可用。
修改之後,需要修改pfile/spfile中對應的db_name參數以及重建相應的oracle密碼檔案。
如果需要使用舊的控制檔案恢複資料庫,應當使用修改之前的pfile/spfile以及密碼檔案啟動資料庫再進行恢複。
c、同時修改dbid及dbname
如果同時修改,則是上述兩種情形的綜合,修改完畢後需要open resetlogs以及修改pfile/spifle,密碼檔案,全備資料庫。
2、nid指令
[oracle@oratest ~]$ nid
dbnewid: release 11.2.0.3.0 - production on thu dec 17 10:16:07 2015
copyright (c) 1982, 2011, oracle and/or its affiliates. all rights reserved.
keyword description (default)
----------------------------------------------------
target username/password (none)
dbname new database name (none)
logfile output log (none)
revert revert failed change no
setname set a new database name only no
append append to output log no
help displays these messages no
在執行nid指令時,該程式會校驗目前資料庫所有資料檔案以及控制檔案的頭部資訊,校驗成功後提示是否要修改。
如果使用了輸出到日志檔案logfile則不會出現修改提示。
接下來nid将使用新的dbid(或者dbname)逐個修改控制檔案,資料檔案(包括隻讀檔案,正常脫機檔案)的頭部。
修改成功後自動關閉資料庫并退出。
注:對于隻讀檔案,正常脫機檔案本文未作測試。其次應確定資料庫處于歸檔狀态,可正常歸檔以及不存在需要recover的資料檔案。
nid詳細指令
nid target=sys/password #此方式是僅僅修改dbid
nid target=/ dbname=new_dbname [setname=yes] # / 表明連接配接到目前環境的sid,且使用作業系統認證
nid target=sys/password dbname=new_dbname [setname=yes] # setname=yes 僅僅修改資料庫名字,如果省略,則兩者同時修改
nid target=sys/pwdd@conn_string dbname=new_dbname [setname=yes] #使用連接配接串連接配接到遠端主機并修改
1)nid修改dbid
--檢視目前dbid
sql> conn /as sysdba
connected.
sql> select dbid from v$database;
dbid
----------
1668473151
--啟動db到mount 狀态
sql> shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
sql> startup mount;
sql> exit
disconnected from oracle database 10g enterprise edition release 10.2.0.4.0 - 64bit production
with the partitioning, olap, data mining and real application testing options
[oracle@oratest ~]$ nid target=sys/tina@tinadb
dbnewid: release 11.2.0.3.0 - production on thu dec 17 10:02:06 2015
connected to database tinadb (dbid=1668473151)
connected to server version 11.2.0
control files in database:
/u01/oradata/tinadb/control01.ctl
/u01/fast_recovery_area/tinadb/control02.ctl
change database id of database tinadb? (y/[n]) => y
proceeding with operation
changing database id from 1668473151 to 1669126943
control file /u01/oradata/tinadb/control01.ctl - modified
control file /u01/fast_recovery_area/tinadb/control02.ctl - modified
datafile /u01/oradata/tinadb/system01.db - dbid changed
datafile /u01/oradata/tinadb/sysaux01.db - dbid changed
datafile /u01/oradata/tinadb/undotbs01.db - dbid changed
datafile /u01/oradata/tinadb/users01.db - dbid changed
datafile /u01/oradata/tinadb/ts_tina01.db - dbid changed
datafile /u01/oradata/tinadb/temp01.db - dbid changed
datafile /u01/oradata/tinadb/temp02.db - dbid changed
control file /u01/oradata/tinadb/control01.ctl - dbid changed
control file /u01/fast_recovery_area/tinadb/control02.ctl - dbid changed
instance shut down
database id for database tinadb changed to 1669126943.
all previous backups and archived redo logs for this database are unusable.
database is not aware of previous backups and archived logs in recovery area.
database has been shutdown, open database with resetlogs option.
succesfully changed database id.
dbnewid - completed succesfully.
--重新開機db
sql> startup;
oracle instance started.
total system global area 2087780352 bytes
fixed size 2229944 bytes
variable size 520096072 bytes
database buffers 1560281088 bytes
redo buffers 5173248 bytes
database mounted.
ora-01589: must use resetlogs or noresetlogs option for database open
sql> alter database open resetlogs;
database altered.
--檢視修改後的值
1669126943
2)nid修改dbname
--檢視目前dbname
sql> select dbid,name,open_mode from v$database;
dbid name open_mode
---------- --------- --------------------
1669126943 tinadb read write
sql> startup mount; --mount狀态下才能修改
[oracle@oratest ~]$ nid target=sys/tina@tinadb dbname=tinadb2 setname=yes
dbnewid: release 11.2.0.3.0 - production on fri dec 18 17:08:37 2015
connected to database tinadb (dbid=1669126943)
change database name of database tinadb to tinadb2? (y/[n]) => y
操作還算簡單,但輕易也不要去生産做此類操作。