暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用dbms_backup_restore修改DBID

原创 eygle 2008-05-21
752
数据库中还有什么是不能修改的呢?



在一些特殊的情况下,我们可能需要修改数据库的DBID,有时候可能仅仅是修改控制文件的。

从Oracle10g开始,Oracle在DBMS_BACKUP_RESTORE包中增加了几个PROCEDURE用来完成这个工作。



这几个相关过程是:

PROCEDURE NIDBEGIN

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

NEWDBNAME                      VARCHAR2                IN

OLDDBNAME                      VARCHAR2                IN

NEWDBID                        NUMBER                  IN

OLDDBID                        NUMBER                  IN

DOREVERT                      BINARY_INTEGER          IN

DORESTART                      BINARY_INTEGER          IN

EVENTS                        NUMBER                  IN

PROCEDURE NIDEND

PROCEDURE NIDGETNEWDBID

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

DBNAME                        VARCHAR2                IN

NDBID                          NUMBER                  OUT

PROCEDURE NIDPROCESSCF

Argument Name                  Type                    In/Out Default?

------------------------------ ----------------------- ------ --------

CHGDBID                        BINARY_INTEGER          OUT

CHGDBNAME                      BINARY_INTEGER          OUT



顺便说一句,如果你遇到数据库DBMS_BACKUP_RESTORE不存在的情况:

SQL> DESC DBMS_BACKUP_RESTORE

ERROR:

ORA-04043: 对象 DBMS_BACKUP_RESTORE 不存在



可以通过运行 $ORACLE_HOME/rdbms/admin/dbmsbkrs.sql 来创建!



通过以上几个新增的SQL我们可以来修改数据库的DBID,以下是一个测试过程:

C:\\>sqlplus "/ as sysdba"



SQL*Plus: Release 10.2.0.3.0 - Production on 星期三 5月 21 22:10:17 2008



Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.




连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production

With the Partitioning, OLAP and Data Mining options



SQL> alter database open;



数据库已更改。



SQL> select dbid from v$database;



      DBID

----------

1465764760



SQL> show parameter db_name



NAME                                TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_name                              string      eygle



SQL> exec dbms_backup_restore.nidbegin('eygle','EYGLE','3935589514','1465764760',0,0,10)



PL/SQL 过程已成功完成。



SQL> select dbid from v$database;



      DBID

----------

1465764760



SQL> variable a number;

SQL> variable b number

SQL> variable c number;

SQL> exec dbms_backup_restore.nidprocessdf(0,0,:a,:b,:c);



PL/SQL 过程已成功完成。



SQL> print :a



        A

----------

        0



SQL> print :b



        B

----------

        1



SQL> print :c



        C

----------

        1



SQL> exec dbms_backup_restore.nidprocesscf(:a,:b);



PL/SQL 过程已成功完成。



SQL> print :a



        A

----------

        1



SQL> print :b



        B

----------

        1



SQL> exec dbms_backup_restore.nidend;



PL/SQL 过程已成功完成。



SQL> select dbid from v$database;



      DBID

----------

3935589514



此时修改完成,最好重启一次数据库,使得修改被确认。



-The End-



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论