设为首页 收藏本站
查看: 434|回复: 0

[经验分享] 使用dbms_backup_restore包修改dbname及dbid

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-31 09:21:57 | 显示全部楼层 |阅读模式
本帖最后由 4若 于 2014-3-31 09:23 编辑

   修改dbname以及dbid通常在使用RMAN还原到异机之后需要更改dbname以及dbid的情形。对于这个修改我们可以借助于命令行下的nid工具来完成。同时也可以直接调用API来实现。本文即是通过dbms_backup_restore方式来修改dbname及dbid,供大家参考。
      有关使用nid方式修改dbname及dbid,请参考:使用nid命令修改 db name 及 dbid

1、修改dbid及dbname的步骤
    a、一致性关闭数据库并启动数据库到read only状态(需要调用dbms_backup_restore,因此要open数据库)
    b、调用脚本修改dbname或者dbid(根据提示输入)
    c、修改spfile或pfile中的db_name的值,如果仅改变dbid,此步骤可忽略
    d、以open resetlogs方式打开数据库

2、实战演习
robin@SZDB:~/dba_scripts/custom/sql> export ORACLE_SID=ES0481  
robin@SZDB:~/dba_scripts/custom/sql> sqlplus / as sysdba  

SQL*Plus: Release 10.2.0.3.0 - Production on Sat Mar 29 20:18:28 2014  

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

Connected to:  
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  

sys@ES0481> shutdown immediate;  

sys@ES0481> startup open read only;  

sys@ES0481> select name,dbid from v$database;  

NAME            DBID  
--------- ----------  
ES0481        123456  

sys@ES0481> @chg_dbname_dbid  

PL/SQL procedure successfully completed.  

OLD_NAME  
------------------------------------------------------  
ES0481  

Enter the new Database Name:ES0480  
Enter the new Database ID:654321  

PL/SQL procedure successfully completed.  

PL/SQL procedure successfully completed.  

Convert ES0481(123456) to ES0480(654321)  

PL/SQL procedure successfully completed.  

ControlFile:  
=> Change Name:1  
=> Change DBID:1  
DataFile: /u02/database/ES0481/oradata/sysES0481.dbf  
=> Skipped:0  
=> Change Name:1  
=> Change DBID:1  
DataFile: /u02/database/ES0481/undo/undotbsES0481.dbf  
=> Skipped:0  
=> Change Name:1  
=> Change DBID:1  
  .................  
DataFile: /u02/database/ES0481/temp/ES0481_tempES0481.dbf  
=> Skipped:0  
=> Change Name:1  
=> Change DBID:1  

PL/SQL procedure successfully completed.  

sys@ES0481> create pfile from spfile;  

File created.  

sys@ES0481> ho cat $ORACLE_HOME/dbs/initES0481.ora |sed "s/db_name='ES0481'/db_name='ES0480'/">$ORACLE_HOME/dbs/initES0480.ora  

sys@ES0481> shutdown immediate;  

sys@ES0481> exit  
Disconnected from Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
robin@SZDB:~/dba_scripts/custom/sql> export ORACLE_SID=ES0480  
robin@SZDB:~/dba_scripts/custom/sql> sqlplus / as sysdba  

idle> startup pfile=/users/oracle/OraHome10g/dbs/initES0480.ora mount;  
ORACLE instance started.  

Total System Global Area  599785472 bytes  
Fixed Size                  2074568 bytes  
Variable Size             167774264 bytes  
Database Buffers          423624704 bytes  
Redo Buffers                6311936 bytes  
Database mounted.  
idle> alter database open resetlogs;  

Database altered.  

-- Author : Leshami  


idle> create spfile from pfile='/users/oracle/OraHome10g/dbs/initES0480.ora';  

File created.  

idle> startup force;  

idle> select name,dbid from v$database;  

NAME            DBID  
--------- ----------  
ES0480        654321  
3、脚本chg_dbname_dbid.sql
--该脚本从网上整理而来  
--该脚本可以修改dbname,以及dbid,或者两者同时修改  
--该脚本在10g下测试ok,11g下有待测试  
robin@SZDB:~/dba_scripts/custom/sql> more chg_dbname_dbid.sql   
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 Database Name:"  

accept new_dbid prompt "Enter the new Database ID:"  

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;  
/      


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-16480-1-1.html 上篇帖子: Oracle11g的安装和卸载教程 下篇帖子: Oracle Data Guard_ 主库添加数据文件或创建表空间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表