某些应用场景需要修改oracle的dbid,oracle自带的nid工具可以修改dbname,产生新的dbid,但不能直接指定dbid。通过跟踪nid的执行过程,发现它主要是调用了dbms_backup_restore下的存储过程,而dbms_backup_restore.nidbegin是可以指定新的dbid的。
跟踪的方法:
--测试前请做好备份
1.关闭数据库并启动到mount状态
shutdown immediate;
startup mount;
2.执行nid target=sys/password
在Change database ID of database CT6601? (Y/[N]) =>这一步时暂停
3.跟踪nid
sqlplus / as sysdba
select b.spid from v$session a,v$process b where a.paddr=b.addr and a.program like 'dbnewid%';
--ospid是上面的查询结果
oradebug setospid 31423
oradebug TRACEFILE_NAME
oradebug event 10046 trace name context forever ,level 12;
4.步骤2的nid程序继续执行,直到完成
5.查看跟踪文件的SQL
以下是手动设定dbid的大概方法:
--测试环境是11.2.0.4
--测试前请做好备份。
1.关闭数据库并启动到mount状态
shutdown immediate;
startup mount;
2.查看当前的dbname和dbid
select dbid ,name from v$database;
3.修改dbid
--设定新的dbname,dbid
exec dbms_backup_restore.nidbegin('CT6601', 'CT6601', '1963719358','1959733503', 0, 0, 0);
var v_skipped number;
var v_idchged number;
var v_nmchged number;
--执行以下的查询结果
select ' exec dbms_backup_restore.nidprocessdf('||file#||',0,:v_skipped, :v_idchged, :v_idchged);' from v$datafile;
--执行以下的查询结果
select 'exec dbms_backup_restore.nidprocessdf('||file#||',1,:v_skipped, :v_idchged, :v_idchged);' from v$tempfile;
exec dbms_backup_restore.nidprocesscf(:v_idchged, :v_nmchged);
exec dbms_backup_restore.nidend;
4.关闭数据库,并resetlogs打开数据库。
shutdown immediate;
startup mount;
alter database open resetlogs;
跟踪的方法:
--测试前请做好备份
1.关闭数据库并启动到mount状态
shutdown immediate;
startup mount;
2.执行nid target=sys/password
在Change database ID of database CT6601? (Y/[N]) =>这一步时暂停
3.跟踪nid
sqlplus / as sysdba
select b.spid from v$session a,v$process b where a.paddr=b.addr and a.program like 'dbnewid%';
--ospid是上面的查询结果
oradebug setospid 31423
oradebug TRACEFILE_NAME
oradebug event 10046 trace name context forever ,level 12;
4.步骤2的nid程序继续执行,直到完成
5.查看跟踪文件的SQL
以下是手动设定dbid的大概方法:
--测试环境是11.2.0.4
--测试前请做好备份。
1.关闭数据库并启动到mount状态
shutdown immediate;
startup mount;
2.查看当前的dbname和dbid
select dbid ,name from v$database;
3.修改dbid
--设定新的dbname,dbid
exec dbms_backup_restore.nidbegin('CT6601', 'CT6601', '1963719358','1959733503', 0, 0, 0);
var v_skipped number;
var v_idchged number;
var v_nmchged number;
--执行以下的查询结果
select ' exec dbms_backup_restore.nidprocessdf('||file#||',0,:v_skipped, :v_idchged, :v_idchged);' from v$datafile;
--执行以下的查询结果
select 'exec dbms_backup_restore.nidprocessdf('||file#||',1,:v_skipped, :v_idchged, :v_idchged);' from v$tempfile;
exec dbms_backup_restore.nidprocesscf(:v_idchged, :v_nmchged);
exec dbms_backup_restore.nidend;
4.关闭数据库,并resetlogs打开数据库。
shutdown immediate;
startup mount;
alter database open resetlogs;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28539951/viewspace-2138760/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28539951/viewspace-2138760/