分享好友 站长动态首页 网站导航

Oracle 更改dbid和dbname工具利器|DBNEWID (NID)分享

2022-03-31 09:47 · 头闻号数据库

NID 实用程序是在Oracle 10g中引入的。DBNEWID 是一个数据库实用程序,位于 $ORACLE_HOME/bin 目录中,可以更改操作数据库的内部数据库标识符 (DBID) 和数据库名称 (DBNAME)。在引入 DBNEWID 实用程序之前,我们曾经手动创建数据库的副本,并通过重新创建控制文件为其赋予新的数据库名称 (DBNAME)。但是,更改实例的内部数据库标识符 (DBID) 是不可能的。

DBID 是数据库的内部唯一标识符。由于恢复管理器 (RMAN)通过 DBID 区分数据库,因此您无法在同一个 RMAN 存储库中同时注册种子数据库和手动复制的数据库。DBNEWID 实用程序解决了这个问题。

NID 实用程序允许我们更改

更改数据库的 DBID 是一个严肃的过程。当数据库的 DBID 更改时,该数据库的所有先前备份和存档日志将变得不可用。更改 DBID 后,必须使用 RESETLOGS 选项打开数据库,该选项会重新创建联机重做日志并将其序列重置为 1。因此,更改 DBID 后应立即备份整个数据库。

在不更改 DBID 的情况下更改 DBNAME 不需要您使用 RESETLOGS 选项打开,因此数据库备份和存档日志不会失效。但是,更改 DBNAME 确实会产生影响。您必须在数据库名称更改后更改 DB_NAME 初始化参数以反映新名称。此外,您可能需要重新创建 Oracle密码文件. 如果您恢复控制文件的旧备份(在名称更改之前),那么您应该使用数据库名称更改之前的初始化参数文件和密码文件。

NID 实用程序的参数(Oracle 10g 和Oracle 11g 中的参数相同):

$ nid help=y

一、更改 DBNAME & DBID

1、查询数据库的信息

  1. SQL> select dbid, name from v$database; 
  2. DBID      NAME 
  3.  
  4. ---------- --------- 
  5.  
  6. 1744662402 SFMv 

2、 备份数据库

备份脚本示例:

  1. [localhost]$cat /oracle/ods_backup/bak0.sh 
  2. #!/bin/bash 
  3. export ORACLE_HOME=/oracle/ods/12201 
  4. export ORACLE_SID=orcl 
  5. export DATE=`date +%F` 
  6. export BACK_DIR='/oracle/ods_backup' 
  7. mkdir -p $BACK_DIR/$DATE 
  8. /oracle/ods/12201/bin/rman log=$BACK_DIR/$DATE/rman_backup_$DATE.log target / <<EOF 
  9. run{ 
  10.     CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; 
  11.     CONFIGURE CONTROLFILE AUTOBACKUP ON; 
  12.     CONFIGURE CONTROLFILE autobackup format for device type disk to '$BACK_DIR/$DATE/CONTROLFILE.%F'; 
  13.     ALLOCATE CHANNEL disk1 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; 
  14.     ALLOCATE CHANNEL disk2 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; 
  15.     ALLOCATE CHANNEL disk3 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; 
  16.     SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; 
  17.     BACKUP  DATAbase SKIP INACCESSIBLE FILESPERSET 10 PLUS ARCHIVELOG FILESPERSET 20 DELETE ALL INPUT; 
  18.     SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; 
  19.     CROSSCHECK BACKUP; 
  20.     CROSSCHECK ARCHIVELOG ALL; 
  21.     DELETE NOprompt EXPIRED BACKUP; 
  22.     DELETE NOprompt EXPIRED ARCHIVELOG ALL; 
  23.     DELETE NOprompt OBSOLETE; 
  24.     RELEASE channel disk1; 
  25.     RELEASE channel disk2; 
  26.     RELEASE channel disk3; 
  27. EOF 
  28. export EXPIRE_DATE=`date +%F -d '+7 day ago'` 
  29. rm -rf $BACK_DIR/$EXPIRE_DATE 
  30. exit 

3、在干净关闭后挂载数据库

  1. SQL> SHUTDOWN IMMEDIATE 
  2. SQL> STARTUP MOUNT 

4、调用 DBNEWID (NID) 实用程序

调用 DBNEWID (NID) 实用程序,使用具有 SYSDBA 权限的用户从命令行指定 DBNAME。

  1. $ nid TARGET=sys/password DBNAME=new_name LOGFILE =change_dbname.log 

DBNEWID 实用程序在尝试对文件进行 I/O 之前在数据文件和控制文件的标头中执行验证。如果验证成功,则 DBNEWID 会提示您确认操作(除非您指定日志文件,在这种情况下它不会提示),更改所有数据文件中的 DBID,然后退出。数据库处于挂载状态,但尚不可用。

5、更新pfile文件并创建密码文件(如有必要)

此实用程序不会更改 pfile 中的数据库名称,因此请手动更改 pfile 中的数据库名称 (DB_NAME) 并创建密码文件(如有必要)。

6、进行新的数据库备份

由于您已重置联机重做日志,因此旧的备份和归档日志在当前的数据库中不再可用。

二、Changing only DBNAME

在命令行上调用该实用程序;您必须同时指定 DBNAME 和 SETNAME 参数。

  1. $ nid TARGET=SYS/password DBNAME=newname SETNAME=YES 

DBNEWID 在尝试对文件进行 I/O 之前在控制文件(不是数据文件)的头中执行验证。如果验证成功,则 DBNEWID 会提示确认,更改控制文件中的数据库名称,然后退出。DBNEWID 成功完成后,数据库仍处于挂载状态但尚不可用。

如果操作成功,更新init文件后启动数据库。

如果操作失败,要恢复更改,请再次运行 DBNEWID 实用程序,指定 REVERT 关键字。

  1. $ nid TARGET=SYS/password REVERT=YES LOGFILE= backout.log 

三、Changing only DBID

在命令行上调用该实用程序;不要指定 DBNAME。

  1. $ nid TARGET=SYS/password 

如果操作成功,挂载数据库并用resetlogs打开。如果操作失败,要恢复更改,请再次运行 DBNEWID 实用程序,指定 REVERT 关键字。

  1. $ nid TARGET=SYS/password REVERT=YES LOGFILE=backout.log 

 

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

评论

0

收藏

点赞