通过dbms_backup_restore修改oracle的dbid

    某些应用场景需要修改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;



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28539951/viewspace-2138760/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28539951/viewspace-2138760/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值