签到成功

知道了

CNDBA社区CNDBA社区

Oracle 18c--通过dbms_backup_restore包修改DBname和DBID

2018-08-09 09:44 2058 0 原创 Oracle 18c
作者: Expect-乐

1.说明

修改dbname和dbid可以通过nid工具来修改,但是只不能修改为指定的dbid值。但是可以通过自己调用dbms_backup_restore包来实现。
注意:类似这种危险操作没有经过足够的测试,千万不要随便在生产库上使用,可能会造成很严重的后果。如:之前的备份全部不可用。

2.具体例子

关闭数据库,启动到MOUNT

http://www.cndba.cn/Expect-le/article/2935
http://www.cndba.cn/Expect-le/article/2935

    SQL> shutdown immediate
    SQL> startup mount

通过调用dbms_backup_restore包来修改DBID为主库的DBID。

http://www.cndba.cn/Expect-le/article/2935
http://www.cndba.cn/Expect-le/article/2935

注:在18c中需要将数据库启动到MOUNT,10g、11g read only打开即可

执行以下脚本,脚本可以去http://www.cndba.cn/Expect-le/article/2935

http://www.cndba.cn/Expect-le/article/2935
http://www.cndba.cn/Expect-le/article/2935

SQL> @changdb_name_dbid.sql

根据提示输入DBNAME和DBID即可,然后以resetlogs方式打开数据库即可http://www.cndba.cn/Expect-le/article/2935http://www.cndba.cn/Expect-le/article/2935http://www.cndba.cn/Expect-le/article/2935

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

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Expect-乐

Expect-乐

关注

Without the continuous bitter cold, there can be no fragrant plum blossom

  • 336
    原创
  • 6
    翻译
  • 100
    转载
  • 41
    评论
  • 访问:1553966次
  • 积分:1957
  • 等级:核心会员
  • 排名:第4名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ