2018年3月4日 星期日

Oracle修改DBID的方式,NID 與 dbms_backup_restore

有些情況必須要修改ORACLE的DBID,因此Oracle發展了兩個工具以方便達成此任務。
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;



參考資料:
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


沒有留言:

張貼留言