我们知道,在数据库内部,数据库的DBNAME和DBID是数据库标识符,其中,DBID更是数据库的唯一标识符,如果要重新调整数据库的名字,一般是要重建控制文件,为数据库赋予新的名称 (DBNAME);
但是,更改实例的内部数据库标识符 (DBID) 是不可能的,这样对于恢复管理器 (RMAN)来说,由于是通过 DBID来区分数据库的,因此无法在同一个RMAN存储库中同时注册种子数据库和重建之后的数据库。
对此,Oracle专门提供的数据库名字修改工具NID(DBNEWID),解决了这个问题。
NID(DBNEWID)实用程序是在Oracle 10g中引入的,是一个数据库实用程序,位于 $ORACLE_HOME/bin 目录中,可以更改操作数据库的内部数据库标识符 (DBID) 和数据库名称 (DBNAME)。

NID用途:
只修改数据库的DBID;
只修改数据库的DBNAME;
同时修改数据库的DBNAME和DBID;

注意:

  1. 如果仅调整DBNAME,调整之后,数据库是不需要使用RESETLOGS选项就可以正常打开,数据库备份和存档日志都不会失效。调整DBNAME的影响是: 需要调整初始化参数文件中的db_name参数;需要重新创建 Oracle密码文件.
  2. 如果仅调整数据库的DBID,由于更改数据库的DBID是一个全局的操作,一旦数据库的DBID发生改变,对应该数据库的所有备份和存档日志将不再可用,所以在更改 数据库DBID之后,必须使用RESETLOGS选项打开数据库,那么数据库会将联机重做日志的序列重置为1,因此,建议在调整数据库的DBID之后应立即对整个数据库进行备份。

NID 实用程序的参数:

[oracle@dkfdg ~]$ nid -helpDBNEWID: Release 19.0.0.0.0 - Production on Thu Dec 22 17:45:01 2022Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.Keyword     Description                    (Default)
----------------------------------------------------
TARGET      Username/Password              (NONE)
DBNAME      New database name              (NONE)
LOGFILE     Output Log                     (NONE)
REVERT      Revert failed change           NO
SETNAME     Set a new database name only   NO
APPEND      Append to output log           NO
HELP        Displays these messages        NO[oracle@dkfdg ~]$

. 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

如下在19c数据库上使用nid进行数据库DBID和DBNAME参数的调整:

  1. 建议调整之前对数据库进行全量备份
    建议在调整DBNAE和DBID前对数据库进行全备,全备备份脚本示例:
[oracle@dkfdg ~]$cat /oracle/ods_backup/bak0.sh
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export ORACLE_SID=dkf006
export DATE=`date +%F`
export BACK_DIR='/u01/app/rmanbak'
mkdir -p $BACK_DIR/$DATE
//u01/app/oracle/product/19.3.0/dbhome_1/bin/rman log=$BACK_DIR/$DATE/rman_backup_$DATE.log target / <<EOF
run{ CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 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'; RELEASE channel disk1; RELEASE channel disk2; RELEASE channel disk3;
}
EOF
exit

场景一、仅仅调整数据库的DBID
1、查询数据库的信息

SQL> select dbid, name from v$database;
DBID      NAME
---------- ---------
2651711443 dkf006

2、正常关闭数据库,并将数据库启动到mount状态

SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT
  1. 直接调用NID工具,连接数据库,不需要指定DBNAME
[oracle@dkfdg ~]$ nid target=sys/oracleDBNEWID: Release 19.0.0.0.0 - Production on Thu Dec 22 17:29:24 2022Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.Connected to database DKF006 (DBID=2651711443)Connected to server version 19.3.0Control Files in database:+DATA/DKF006/CONTROLFILE/current.261.1101088595Change database ID of database DKF006? (Y/[N]) => YProceeding with operation
Changing database ID from 2651711443 to 2674719348Control File +DATA/DKF006/CONTROLFILE/current.261.1101088595 - modifiedDatafile +DATA/DKF006/DATAFILE/system.257.110108848 - dbid changedDatafile +DATA/DKF006/DATAFILE/sysaux.258.110108852 - dbid changedDatafile +DATA/DKF006/DATAFILE/undotbs1.259.110108853 - dbid changedDatafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.266.110108879 - dbid changedDatafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.267.110108879 - dbid changedDatafile +DATA/DKF006/DATAFILE/users.260.110108853 - dbid changedDatafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.268.110108879 - dbid changedDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/system.272.110108943 - dbid changedDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/sysaux.273.110108943 - dbid changedDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/undotbs1.271.110108943 - dbid changedDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/users.275.110108945 - dbid changedDatafile +DATA/DKF006/DATAFILE/test.280.110739837 - dbid changedDatafile +DATA/DKF006/TEMPFILE/temp.265.110108860 - dbid changedDatafile +DATA/DKF006/DBCED86261CB7148E0550A002762E1A4/TEMPFILE/temp.269.110108882 - dbid changedDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/TEMPFILE/temp.274.110108943 - dbid changedControl File +DATA/DKF006/CONTROLFILE/current.261.1101088595 - dbid changedInstance shut downDatabase ID for database DKF006 changed to 2674719348.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open database with RESETLOGS option.
Succesfully changed database ID.
DBNEWID - Completed succesfully.
  1. 操作成功,打开数据库,会提示数据库需要用resetlogs打开:
SQL> startup
ORACLE instance started.Total System Global Area 1241510080 bytes
Fixed Size                  9134272 bytes
Variable Size             402653184 bytes
Database Buffers          822083584 bytes
Redo Buffers                7639040 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database openSQL>
  1. 使用resetlogs打开数据库:
SQL> alter database open RESETLOGS;Database altered.SQL>

6.回退方案:
如果操作失败,要恢复更改,执行成功也可以在resetlogs前进行恢复,再次运行 DBNEWID 实用程序,指定 REVERT 关键字。
正常关闭数据库,并启动到mount状态

[oracle@dkfdg ~]$ nid TARGET=sys/oracle  REVERT=YES LOGFILE=rollback.log

由于数据库我已经resetlogs打开,已无法恢复,此时恢复会有报错:

DBNEWID: Release 19.0.0.0.0 - Production on Thu Dec 22 18:01:55 2022
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.Connected to database DKF006 (DBID=2674719348)NID-00128: Cannot revert change of database, change not in progressReversion of database changes failed during validation - database is intact.
DBNEWID - Completed with validation errors.[oracle@dkfdg ~]$

二、仅仅调整数据库的DBNAME
1、查询数据库的信息

SQL> select dbid, name from v$database;
DBID      NAME
---------- ---------
2651711443 dkf006

2、正常关闭数据库,并将数据库启动到mount状态

SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT

3、使用 DBNEWID (NID) 工具更改数据库的DBNAME

[oracle@dkfdg ~]$ nid TARGET=sys/oracle DBNAME=dkf007 SETNAME=YES DBNEWID: Release 19.0.0.0.0 - Production on Thu Dec 22 18:16:10 2022Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.Connected to database DKF006 (DBID=2674719348)Connected to server version 19.3.0Control Files in database:+DATA/DKF006/CONTROLFILE/current.261.1101088595Change database name of database DKF006 to DKF007? (Y/[N]) => YProceeding with operation
Changing database name from DKF006 to DKF007Control File +DATA/DKF006/CONTROLFILE/current.261.1101088595 - modifiedDatafile +DATA/DKF006/DATAFILE/system.257.110108848 - wrote new nameDatafile +DATA/DKF006/DATAFILE/sysaux.258.110108852 - wrote new nameDatafile +DATA/DKF006/DATAFILE/undotbs1.259.110108853 - wrote new nameDatafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.266.110108879 - wrote new nameDatafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.267.110108879 - wrote new nameDatafile +DATA/DKF006/DATAFILE/users.260.110108853 - wrote new nameDatafile +DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.268.110108879 - wrote new nameDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/system.272.110108943 - wrote new nameDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/sysaux.273.110108943 - wrote new nameDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/undotbs1.271.110108943 - wrote new nameDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/users.275.110108945 - wrote new nameDatafile +DATA/DKF006/DATAFILE/test.280.110739837 - wrote new nameDatafile +DATA/DKF006/TEMPFILE/temp.265.110108860 - wrote new nameDatafile +DATA/DKF006/DBCED86261CB7148E0550A002762E1A4/TEMPFILE/temp.269.110108882 - wrote new nameDatafile +DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/TEMPFILE/temp.274.110108943 - wrote new nameControl File +DATA/DKF006/CONTROLFILE/current.261.1101088595 - wrote new nameInstance shut downDatabase name changed to DKF007.
Modify parameter file and generate a new password file before restarting.
Succesfully changed database name.
DBNEWID - Completed succesfully.

DBNEWID 在尝试对文件进行 I/O 之前在控制文件(不是数据文件)的头中执行验证。如果验证成功,则 DBNEWID 会提示确认,更改控制文件中的数据库名称,然后退出,DBNEWID 成功完成后,数据库会自动进行关闭。

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

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

[oracle@dkfdg ~]$ nid TARGET=sys/oracle  REVERT=YES LOGFILE=rollback.log

三、同时更改数据库的DBNAME和DBID
1、查询数据库的信息

SQL> select dbid, name from v$database;
DBID      NAME
---------- ---------
2651711443 dkf006

2、正常关闭数据库,并将数据库启动到mount状态

SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT

3、使用 DBNEWID (NID) 工具更改数据库的DBNAME和DBID
注意:DBNEWID 实用程序在尝试对文件进行 I/O 之前在数据文件和控制文件的标头中执行验证。如果验证成功,则 DBNEWID 会提示确认操作(除非您指定日志文件,在这种情况下它不会提示),更改所有数据文件中的 DBID,数据库会进行关闭,然后退出。

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

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

完.

Oracle使用NID调整数据库的DBNAME和DBID相关推荐

  1. oracle数据库之DBNAME和DBID

    一.查看DBID (1)使用rman查看 $ rman target /Recovery Manager: Release 11.2.0.4.0 - Production on Fri Jun 12 ...

  2. 利用nid更改数据库的名称(OCM---OCP)

    转载请注明处出:http://blog.csdn.net/guoyjoe/article/details/19265523 1.运行nid,显示如下参数: [oracle@mydb 2014_02_1 ...

  3. 利用nid修改数据库的DBID

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/19263339 1.运行nid,显示如下参数: oracle@mydb 2014_02_15 ...

  4. 使用nid修改dbname和dbid

    系统 rh5.8 oracle 10.2.0.5 使用nid实验之前要明白dbname和dbid以及sid的关系 在使用dbca建库的时候,有一步要填dbname和sid,一般情况下填完dbname后 ...

  5. NID修改数据库名称时候碰到NID-00137

    Oracle 11.2.0.3.5 ,  EBS R12.1.3 今天在做EBS系统克隆时候,使用RMAN备份恢复数据库后,需要更改数据库名称,以免混淆,在做了一系列动作(recover,  redo ...

  6. nid 修改数据库的名字

    Nid是Oracle从9iR2开始提供的工具,可以用来更改数据库名称,而无需通过之前重建控制文件等繁琐方式. 需要说明的是,虽然这个工具来自9iR2,但是仍然可以被用于Oracle8i. 先看一下帮助 ...

  7. oracle部署在mysql_Oracle数据库部署实施流程

    作为一个Oracle数据库的DBA,部署一套Oracle数据库属于基本技能,那么完整的部署一套Oracle数据库应该包含哪些内容呢?下面我们来 作为一个Oracle数据库的DBA,部署一套Oracle ...

  8. Linux内核参数(如kernel.shmmax)及Oracle相关参数调整(如SGA_MAX_SIZE)

    Linux内核参数(如kernel.shmmax)及Oracle相关参数调整(如SGA_MAX_SIZE) 我们一般在Linux 上安装 设置Oracle 数据库 或者在更换或升级硬件的时候都需要配置 ...

  9. python oracle orm_Python - ORM(数据库相关)

    1. 概念 目标:类/对象操作 -> SQL语句 -> DB API -> 再在数据库中执行.ORM做前两部,因为ORM本身无法操作数据库.参考:https://baike.baid ...

最新文章

  1. 关于flume配置加载(二)
  2. Spring ----Bean的生命周期
  3. 17. 电话号码的字母组合(回溯算法)
  4. easyui treegrid获取父节点的id_超简单的分布式ID生成方案!美团开源框架介绍
  5. c++模板之函数模板
  6. html5 ios cookie,ios – WKWebView,获取所有cookie
  7. ubuntu安装python_常用linux指令 ubuntu环境pytorch配置
  8. popwin.js 弹出小窗口,图片预览;
  9. 【汇编】2、从汇编源码逐步分析函数调用过程
  10. Silverlight MMORPG WebGame游戏设计(二)--通讯协议之惑
  11. 【计算机网络】物理层
  12. 华住季琦谈未来酒店的趋势:传统星级酒店将会逐渐消亡与演变
  13. 洛谷P1757 通天之分组背包
  14. 为了数学的明天,,穿越时空,重返南大(III)-
  15. unity 跨平台动态生成二维码 免费下载
  16. Android入门之把窗口信息传递给InputDispatcher
  17. 高等数学上核心概念:谈谈导数,微分,积分之间的关系(导数篇)
  18. 搜索引擎优化,SEO关键词快速排名方法有哪些?
  19. RPA—pyautogui+PIL+pandas识别全版本(2.0-3.0)滑动验证码,获取表格数据
  20. 利用Serverless构建微信小程序的Server端

热门文章

  1. Whitelabel error page问题
  2. js周岁计算封装非常实用介意点赞收藏!!!
  3. Intel CPU命名规则的简略解析
  4. 浅谈图片展示、图片自适应解决方案
  5. 2020ICPC济南站 铸铜记
  6. springBoot_配置_yaml文件值获取
  7. python函数-setdefault()函数,stderr
  8. hashlib模块学习
  9. css一像素线条,CSS中比一像素还要细的边框
  10. FFMPEG之RTSP获取H264/H265裸流保存文件