ITPub博客

首页 > 数据库 > Oracle > 通过dbms_backup_restore修改oracle的dbid

通过dbms_backup_restore修改oracle的dbid

原创 Oracle 作者:selectshen 时间:2017-05-09 16:34:05 0 删除 编辑
    某些应用场景需要修改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博客 ” ,链接:https://blog.itpub.net/28539951/viewspace-2138760/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-01-05

  • 博文量
    169
  • 访问量
    1567072