NID 與 dbms_backup_restore。
兩個最大的差別在於,NID方便使用但無法指定更改為甚麼DBID,
DBMS_BACKUP_RESTORE較複雜,但是可以指定要使用甚麼DBID。
本文會先介紹NID使用,再介紹DBMS_BACKUP_RESTORE
一、NID
NID可以做到修改DBNAME與DBID兩種功能,
若要使用前,請先將資料庫至於mount的狀態,如下語法:
$ sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup mount;
SQL> exit
然後再執行NID的工具。
若是只想更改DBID,輸入以下語法
$ nid target=sys/password
在對話框輸入y,即會自動變更為新的DBID(無法指定)。
如果變更DBID,則必須要使用resetlogs來開啟資料庫
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database open resetlogs;
二、DBMS_BACKUP_RESTORE
手動執行procedure修改DBID,較複雜但可自行指定DBID。
若是執行Procedure過程中出現任何問題,可以使用NID工具取消變更DBID。
$nid target = sys/password REVERT=Yes
使用前仍須將資料庫設定為mount狀態。
1.將資料庫設為mount
$ sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup mount;
2.檢查目前的dbid
SQL> select dbid, name from v$database;
3.修改DBNAME與DBID
(1)開始執行nid procedure
SQL> exec dbms_backup_restore.nidbegin([new_dbname], [old_dbname], [new_dbid], [old_dbid], 0, 0, 0);
(2)設立變數,稍後使用
SQL> var v_skipped number;
SQL> var v_idchged number;
SQL> var v_nmchged number;
(3)執行以下語法,並執行其結果
SQL> select ' exec dbms_backup_restore.nidprocessdf('||file#||',0,:v_skipped, :v_idchged, :v_idchged);' from v$datafile;
(4)執行以下語法,並執行其結果
SQL> select 'exec dbms_backup_restore.nidprocessdf('||file#||',1,:v_skipped, :v_idchged, :v_idchged);' from v$tempfile;
(5)獲得所需數字,執行最後最後語法,並結束NID PROCEDURE
SQL>exec dbms_backup_restore.nidprocesscf(:v_idchged, :v_nmchged);
SQL>exec dbms_backup_restore.nidend;
4.以resetlogs方式打開資料庫
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database open resetlogs;
SQL> startup mount;
SQL> alter database open resetlogs;
參考資料:
http://m.blog.itpub.net/28539951/viewspace-2138760/
http://www.hwrf.com.cn/tech/207146.html
http://www.eygle.com/archives/2008/05/dbms_backup_restore_dbid.html
http://www.programering.com/a/MTNzQzNwATU.html