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
Keyword
Description
TARGET
Username/Password
DBNAME
New database name
LOGFILE
Output log
REVERT
Revert failed change (YES/NO)?
SETNAME
Set name only (YES/NO)?
APPEND
Append to output log (YES/NO)?
HELP
Displays help messages (YES/NO)?
TARGET输入用户名和密码,把稳,该用户必须具有sysdba的权限。譬如target=sys/oracle,当然,如果我们是在操作系统本地操作的话,可用反斜杠连接,即target=/REVERT指明一个失落败的DBID操作是否须要回退。默认是NO。把稳,如果数据库的DBID修正成功,该操作无法回退。该回退操作只针对失落败的DBID修正操作。DBNAME指定新的数据库名。SETNAME默认是NO,则该数据库将同时修正DBID和DBNAME。如果指定为YES,则该数据库将只修正DBNAMELOGFILE日志文件,记录操作信息,默认是覆盖上个日志文件。如果APPEND设为YES的话,则这次操作信息将被追加到上个日志文件中。APPEND默认是NO。HELP用来提示DBNEWID的语法规则。默认为NO一、变动 DBNAME & DBID1、查询数据库的信息
SQL> select dbid, name from v$database;DBID NAME---------- ---------1744662402 SFMv
2、 备份数据库
备份脚本示例:
[localhost]$cat /oracle/ods_backup/bak0.sh#!/bin/bashexport ORACLE_HOME=/oracle/ods/12201export ORACLE_SID=orclexport DATE=`date +%F`export BACK_DIR='/oracle/ods_backup'mkdir -p $BACK_DIR/$DATE/oracle/ods/12201/bin/rman log=$BACK_DIR/$DATE/rman_backup_$DATE.log target / <<EOFrun{ CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE autobackup format for device type disk to '$BACK_DIR/$DATE/CONTROLFILE.%F'; ALLOCATE CHANNEL disk1 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; ALLOCATE CHANNEL disk2 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; ALLOCATE CHANNEL disk3 DEVICE TYPE DISK FORMAT '$BACK_DIR/$DATE/full_%d_%T_%s.bak'; SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10 PLUS ARCHIVELOG FILESPERSET 20 DELETE ALL INPUT; SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; CROSSCHECK BACKUP; CROSSCHECK ARCHIVELOG ALL; DELETE NOPROMPT EXPIRED BACKUP; DELETE NOPROMPT EXPIRED ARCHIVELOG ALL; DELETE NOPROMPT OBSOLETE; RELEASE channel disk1; RELEASE channel disk2; RELEASE channel disk3;}EOFexport EXPIRE_DATE=`date +%F -d '+7 day ago'`rm -rf $BACK_DIR/$EXPIRE_DATEexit
3、在干净关闭后挂载数据库
SQL> SHUTDOWN IMMEDIATESQL> STARTUP MOUNT
4、调用 DBNEWID (NID) 实用程序
调用 DBNEWID (NID) 实用程序,利用具有 SYSDBA 权限的用户从命令行指定 DBNAME。
$ 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_DEV6、进行新的数据库备份
由于您已重置联机重做日志,因此旧的备份和归档日志在当前的数据库中不再可用。
二、Changing only DBNAME在命令行上调用该实用程序;您必须同时指定 DBNAME 和 SETNAME 参数。
$ nid TARGET=SYS/password DBNAME=newname SETNAME=YES
DBNEWID 在考试测验对文件进行 I/O 之前在掌握文件(不是数据文件)的头中实行验证。如果验证成功,则 DBNEWID 会提示确认,变动掌握文件中的数据库名称,然退却撤退出。DBNEWID 成功完成后,数据库仍处于挂载状态但尚不可用。
如果操作成功,更新init文件后启动数据库。
如果操作失落败,要规复变动,请再次运行 DBNEWID 实用程序,指定 REVERT 关键字。
$ nid TARGET=SYS/password REVERT=YES LOGFILE= backout.log
三、Changing only DBID
在命令行上调用该实用程序;不要指定 DBNAME。
$ nid TARGET=SYS/password
如果操作成功,挂载数据库并用resetlogs打开。如果操作失落败,要规复变动,请再次运行 DBNEWID 实用程序,指定 REVERT 关键字。
$ nid TARGET=SYS/password REVERT=YES LOGFILE=backout.log
四、小结
以为有帮助的朋友,欢迎收藏、点赞和转发!