1.说明
修改dbname和dbid可以通过nid工具来修改,但是只不能修改为指定的dbid值。但是可以通过自己调用dbms_backup_restore包来实现。
注意:类似这种危险操作没有经过足够的测试,千万不要随便在生产库上使用,可能会造成很严重的后果。如:之前的备份全部不可用。
2.具体例子
关闭数据库,启动到MOUNT
SQL> shutdown immediate
SQL> startup mount
通过调用dbms_backup_restore包来修改DBID为主库的DBID。
注:在18c中需要将数据库启动到MOUNT,10g、11g read only打开即可
执行以下脚本,脚本可以去
SQL> @changdb_name_dbid.sql
根据提示输入DBNAME和DBID即可,然后以resetlogs方式打开数据库即可
SQL> select name,dbid from v$database;
NAME DBID
------------------ ----------------
CNDBA_S 2297590717
3.脚本内容
脚本内容从网上整理而来
var old_name varchar2(20)
var old_dbid number
var new_name varchar2(20)
var new_dbid number
exec select name, dbid into :old_name,:old_dbid from v$database
print old_name
accept new_name prompt "Enter the new DbName:"
accept new_dbid prompt "Enter the new DBID:"
exec :new_name:='&&new_name'
exec :new_dbid:=&&new_dbid
set serveroutput on
exec dbms_output.put_line('Convert '||:old_name|| -
'('||to_char(:old_dbid)||') to '||:new_name|| -
'('||to_char(:new_dbid)||')')
declare
v_chgdbid binary_integer;
v_chgdbname binary_integer;
v_skipped binary_integer;
begin
dbms_backup_restore.nidbegin(:new_name,
:old_name,:new_dbid,:old_dbid,0,0,10);
dbms_backup_restore.nidprocesscf(
v_chgdbid,v_chgdbname);
dbms_output.put_line('ControlFile: ');
dbms_output.put_line(' => Change Name:'
||to_char(v_chgdbname));
dbms_output.put_line(' => Change DBID:'
||to_char(v_chgdbid));
for i in (select file#,name from v$datafile)
loop
dbms_backup_restore.nidprocessdf(i.file#,0,
v_skipped,v_chgdbid,v_chgdbname);
dbms_output.put_line('DataFile: '||i.name);
dbms_output.put_line(' => Skipped:'
||to_char(v_skipped));
dbms_output.put_line(' => Change Name:'
||to_char(v_chgdbname));
dbms_output.put_line(' => Change DBID:'
||to_char(v_chgdbid));
end loop;
for i in (select file#,name from v$tempfile)
loop
dbms_backup_restore.nidprocessdf(i.file#,1,
v_skipped,v_chgdbid,v_chgdbname);
dbms_output.put_line('DataFile: '||i.name);
dbms_output.put_line(' => Skipped:'
||to_char(v_skipped));
dbms_output.put_line(' => Change Name:'
||to_char(v_chgdbname));
dbms_output.put_line(' => Change DBID:'
||to_char(v_chgdbid));
end loop;
dbms_backup_restore.nidend;
end;
/
版权声明:本文为博主原创文章,未经博主允许不得转载。
修改dbid dbms_backup_restore