侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Oracle DBNEWID的使用

与晚风述往事
2022-04-18 / 0 评论 / 0 点赞 / 143 阅读 / 3,834 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

引言

运维Oracle数据库的过程中,由于各种各样的原因,例如早期的命名不规范,可能需要重新修改Oracle数据库的实例名。如果想修改Oracle数据库的实例名,可能会想到以下方法:

  • 使用逻辑备份重新创建个规范化的实例名,将数据还原回去
  • 手动复制数据库文件副本,重建控制文件并改名

使用逻辑备份的方法比较麻烦,耗时也长,而使用手动重建控制文件又有些复杂,那么还有没有其他方法呢?

答案是有,它就是DBNEWID。

DBNEWID介绍

在早期,虽然可以通过手动复制数据库文件副本,然后重建控制文件来修改数据库名(DBNAME),但并不能给数据库指定新的标识符(DBID),DBID是数据库内部的唯一标识符。由于RMAN程序是通过DBID来区分数据库的,这也就导致无法在同一个RMAN存储库中同时注册这两个数据库。Oracle为了解决该问题,引入了一个新的实用程序,它就是DBNEWID。

DBNEWID实用程序可以修改以下内容:

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

注:DBNEWID实用程序不会修改全局数据库名

语法

nid ::=
nid TARGET = [username] / [password] [@service_name]
[REVERT = { YES | NO }
|DBNAME = new_db_name [SETNAME = { YES | NO }]]
[LOGFILE = logfile [APPEND = { YES | NO }] [HELP = { YES | NO }]]

说明:

  • TARGET 指定用于连接数据库的用户名和密码。如果使用的是操作系统身份验证,则可以使用斜杠(/)连接。
  • REVERT 指定遇到DBID更改失败时是否恢复旧的DBID,默认为NO,表示不进行恢复;值为YES时,表示恢复失败的DBID更改。注意,REVERT参数只能在DBNEWID程序遇到错误时使用。
  • DBNAME 指定新的数据库名。
  • SETNAME 指定更改数据库名的同时是否更新DBID。默认为NO,表示更改数据库名并更新DBID;值为YES时,表示仅修改数据库名。
  • LOGFILE 指定是否将控制台的内容写入到指定的文件中。默认值为NO,表示不写入;值为YES时,表示将控制台内容写入到指定的文件中,且控制台不再显示信息。
  • APPEND 指定是否以追加的形式将控制台内容写入到指定的文件中。默认值为NO,表示以覆盖的形式,也就是每次执行会覆盖现有的日志文件;值为YES时,表示以追加的形式写入到现有的日志文件中。
  • HELP 指定是否在控制台打印DBNEWID的语法,默认值为NO,表示不显示DBNEWID的使用语法;值为YES时,将DBNEWID的语法打印到控制台中。

DBNEWID注意事项

DBID修改后,应立即重新执行RMAN备份,因为之前的RMAN创建的备份和归档日志中的DBID是修改前的,这也就导致无法再使用这些来恢复数据库。在打开数据库时,必须使用resetlogs打开,它会重建redo log并将其重置为1。

DBNAME修改后,不需要使用resetlogs打开数据库,并且数据库备份和归档日志不会失效,但修改DBNAME后必须要修改初始化参数来映射新的DBNAME。

方案

以下示例均采用虚拟机搭建Oracle 11.2.0.4版本作为演示。

仅修改DBNAME

1、备份参数文件和口令文件

如果仅修改DBNAME,则Oracle旧的RMAN备份还是可以使用的。在执行修改之前,就需要备份参数文件和口令文件,以便后续可能需要恢复旧的控制文件和备份。

进入sqlplus窗口中

[oracle@localhost ~]$ sqlplus / as sysdba

以spfile创建pfile文件

SQL> create pfile from spfile;

进入到dbs目录

[oracle@localhost ~]$ cd $ORACLE_HOME/dbs

备份口令文件

[oracle@localhost dbs]$ cp orapworcl orapworcl.20220419

备份参数文件

[oracle@localhost dbs]$ cp initorcl.ora initorcl.ora.20220419
[oracle@localhost dbs]$ cp spfileorcl.ora spfileorcl.ora.20220419

2、启动到MOUNT模式

DBNEWID实用程序需要在MOUNT模式下执行,因此我们就将数据库切换到MOUNT模式下。

立即关闭数据库

SQL> shutdown immediate

启动数据库至MOUNT模式

SQL> startup mount

3、修改DBNAME

启动至MOUNT后,我们使用DBNEWID实用程序修改DBNAME,我这里将orcl实例改为orcl52。

[oracle@localhost dbs]$ nid target=/ dbname=orcl52 setname=yes

image-1650355058639

4、修改参数文件及口令文件

执行完DBNAME后,我们修改spfile文件。
由于spfile是二进制文件,不能直接修改,所以就先修改pfile文件,然后再使用pfile文件创建spfile。

编辑pfile文件

[oracle@localhost dbs]$ vim initorcl.ora

将initorcl.ora中的db_name由orcl改为新的orcl52,然后保存并退出。

*.db_name='orcl52'

进入到sqlplus命令

[oracle@localhost dbs]$ sqlplus / as sysdba

创建spfile文件

SQL> create spfile from pfile;

重建口令文件

[oracle@localhost dbs]$ orapwd file=$ORACLE_HOME/dbs/orapworcl force=y;

5、启动数据库

全部配置好后,启动数据库

SQL> startup

image-1650355875394

仅修改DBID

注意,对于生产环境来说,修改DBID后,需要立即做一次全库备份,因为之前的RMAN备份因DBID的改变已不再可用。非生产环境自行是否需要进行备份。

1、启动到MOUNT模式

DBNEWID实用程序需要在MOUNT模式下执行,因此我们就将数据库切换到MOUNT模式下。

进入sqlplus命令窗口

[oracle@localhost ~]$ sqlplus / as sysdba

立即关闭数据库

SQL> shutdown immediate

启动数据库至MOUNT模式

SQL> startup mount

2、修改DBID

启动至MOUNT模式后,直接使用NID修改。

[oracle@localhost ~]$ nid target=/

image-1650356802901

3、启动数据库

由于DBID发生了改变,此时我们必须使用resetlogs打开数据库。

进入到sqlplus命令窗口中

[oracle@localhost ~]$ sqlplus / as sysdba

启动数据库至MOUNT

SQL> startup mount

以resetlogs打开数据库

SQL> alter database open resetlogs;

image-1650357015293

修改DBNAME和DBID

1、启动到MOUNT模式

DBNEWID实用程序需要在MOUNT模式下执行,因此我们就将数据库切换到MOUNT模式下。

进入sqlplus命令窗口

[oracle@localhost ~]$ sqlplus / as sysdba

立即关闭数据库

SQL> shutdown immediate

启动数据库至MOUNT模式

SQL> startup mount

2、修改DBNAME和DBID

启动至MOUNT模式后,直接使用NID修改。

[oracle@localhost ~]$ nid target=/ dbname=orcl52;

image-1650357937792

3、修改参数文件及口令文件

执行完NID实用程序后,我们修改参数文件及口令文件。

进入sqlplus命令窗口

[oracle@localhost ~]$ sqlplus / as sysdba

使用spfile创建pfile

SQL> create pfile from spfile;

退出sqlplus窗口并进入到dbs目录下

[oracle@localhost ~]$ cd $ORACLE_HOME/dbs

编辑pfile文件

[oracle@localhost dbs]$ vim initorcl.ora

将initorcl.ora中的db_name由orcl改为新的orcl52,然后保存退出。

*.db_name='orcl52'

再次进入到sqlplus命令窗口

[oracle@localhost dbs]$ sqlplus / as sysdba

创建spfile文件

SQL> create spfile from pfile;

重建口令文件

[oracle@localhost dbs]$ orapwd file=$ORACLE_HOME/dbs/orapworcl force=y;

4、启动数据库

配置好后,我们以resetlogs方式启动数据库。

进入到sqlplus命令窗口

[oracle@localhost dbs]$ sqlplus / as sysdba

启动到MOUNT模式

SQL> startup mount

以resetlogs打开数据库

SQL> alter database open resetlogs;

结束

至此,三种修改方式都已经提供,接下来就是连接到数据库中验证是否修改完成的过程,就不再阐述。

0

评论区