天天看點

使用nid修改sid和dbname

如非必要,不建議在生産庫上對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 

操作還算簡單,但輕易也不要去生産做此類操作。