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

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

[[442731]]

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

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

NID 实用程序允许我们更改

  • 只有数据库的 DBID
  • 只有数据库的 DBNAME
  • 数据库的 DBNAME 和 DBID

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

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

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

$ nid help=y

  • TARGET输入用户名和密码,注意,该用户必须具有sysdba的权限。譬如target=sys/oracle,当然,如果我们是在操作系统本地操作的话,可用反斜杠连接,即target=/
  • REVERT指明一个失败的DBID操作是否需要回退。默认是NO。注意,如果数据库的DBID修改成功,该操作无法回退。该回退操作只针对失败的DBID修改操作。
  • DBNAME指定新的数据库名。
  • SETNAME默认是NO,则该数据库将同时修改DBID和DBNAME。如果指定为YES,则该数据库将只修改DBNAME
  • LOGFILE日志文件,记录操作信息,默认是覆盖上个日志文件。如果APPEND设为YES的话,则这次操作信息将被追加到上个日志文件中。APPEND默认是NO。
  • HELP用来提示DBNEWID的语法规则。默认为NO

一、更改 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) 并创建密码文件(如有必要)。

  • 挂载数据库SQL> STARTUP MOUNT
  • 以 RESETLOGS 模式打开数据库,恢复正常使用SQL> ALTER DATABASE OPEN RESETLOGS;
  • SQL> select dbid, name from v$database;
  • DBID NAME---------- ---------
  • 1748860243 SFM_DEV

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 

 

责任编辑:姜华 来源: 今日头条
相关推荐

2010-04-19 11:23:26

Oracle开发工具

2020-10-24 15:31:10

Linux服务器工具

2010-05-04 11:58:38

Oracle数据库

2022-01-26 07:18:57

oracle临时表空间数据库

2023-11-14 10:56:56

2018-01-31 18:32:06

数据库Oracle优化工具

2011-11-21 11:19:19

Oracle NoSQ

2010-04-06 16:00:19

Oracle更改表

2018-05-30 09:23:11

数据库Oracle性能收集

2010-06-10 17:43:01

UML工具EA

2009-12-15 18:24:02

Ruby连接到orac

2010-04-12 17:58:38

Oracle更改

2020-07-16 10:19:43

程序员技能开发者

2015-09-09 15:54:00

mhddfs分区Linux

2009-11-19 11:12:13

Oracle LogM

2014-03-03 09:48:55

SSHTmux

2010-03-26 10:42:19

Exadata数据库机Oracle

2013-02-27 10:42:07

前端工具Web

2022-02-11 08:00:00

DevOps开发工具

2010-04-19 17:37:51

Oracle 10g
点赞
收藏

51CTO技术栈公众号