当我们手动copy了整个数据库,并通过重建控制文件给数据库指定了新的dbname,但是却不能给数据库分配新的dbid.对于以上问题我们可以通过nid命令来对数据库分配一
当我们手动copy了整个数据库,并通过重建控制文件给数据库指定了新的dbname,但是却不能给数据库分配新的dbid.对于以上问题我们可以通过nid命令来对数据库分配一个全新的dbid。同时需要注意rman也是通过dbid来区分数据库。
一 命令解释
[oracle@source ~]$ nid help=yes
DBNEWID: Release 11.2.0.2.0 - Production on Thu Dec 5 00:09:50 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Keyword Description (Default)
----------------------------------------------------
TARGET Username/Password (NONE) 指定连接数据库的用户名和密码
DBNAME New database name (NONE) DBNAME=new_db_name 改变数据库的名字
LOGFILE Output Log (NONE) LOGFILE=logfile指定输出消息到指定的日志文件,默认nid覆盖之前的日子文件
REVERT Revert failed change NO 指定yes表明更改dbid失败时能够恢复之前的状态
SETNAME Set a new database name only NO 指定yes表明仅仅更改数据库db_name
APPEND Append to output log NO 指定yes标识输出追加到已经存在的日志文件
HELP Displays these messages NO 指定yes显示帮助信息
注意:可以同时更改数据库的dbid和db_name,也可以仅改变数据库的db_name、抑或仅更改数据库的dbid。语法分别如下:
改变dbid和db_name : nid target=sys/dhhzdhhz dbname=crm_test (也可以target=/)
仅改变db_name: nid target=sys/dhhzdhhz dbname=crm_test setname=yes (也可以target=/)
仅更改dbid: nid target=sys/dhhzdhhz (也可以target=/)
二 使用nid的注意事项
1 确保有能够对数据库进行完全恢复的备份。
2 确保执行更改dbid操作时数据库处于mounted状态且mounted之前数据库是经过shutdown immediate关闭的。
3 使用nid更改数据库的dbid后,数据库需要alter database open resetlogs启动,启动之后须对数据库进行一次全备份,因为之前的备份和归档已经不能再使用了。
4 使用nid更改数据库dbname后,需更改初始化参数文件中的DB_NAME参数并重建密码文件。
5 使用nid不能更改全局数据库名。
6 确保所有数据文件处于online状态且不需要恢复。
7 尽量确保oracle没有离线的数据文件和只读表空间,如果有使其正常化。
三 举两个例子
eg1:仅更改数据库dbid
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2226072 bytes
Variable Size 922749032 bytes
Database Buffers 318767104 bytes
Redo Buffers 8921088 bytes
Database mounted.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@source ~]$ nid target=sys
DBNEWID:版本 11.2.0.2.0 - 于 2013 年 12 月 4 日星期三 23:39:11 发布
版权所有 (c ) 1982 年、2009 年,Oracle 和/或其附属公司。 保留所有权利。
密码:
已连接到数据库 CRM (DBID=3599153036)
已连接到服务器版本 11.2.0
控制文件数据库:
/oracle/CRM/control03.ctl
更改数据库 CRM 的数据库 ID? (Y/[N]) => y
继续操作
将数据库 ID 从 3599153036 更改为 3641774948
控制文件 /oracle/CRM/control03.ctl - 已修改
数据文件 /oracle/CRM/system01.db - dbid 已更改
数据文件 /oracle/CRM/sysaux01.db - dbid 已更改
数据文件 /oracle/CRM/zx.db - dbid 已更改
数据文件 /oracle/CRM/users01.db - dbid 已更改
数据文件 /oracle/CRM/pos.db - dbid 已更改
数据文件 /oracle/CRM/erp.db - dbid 已更改
数据文件 /oracle/CRM/user01.db - dbid 已更改
数据文件 / oracle/CRM/undotbs03.db - dbid 已更改
数据文件 /oracle/CRM/crm.db - dbid 已更改
数据文件 /oracle/ CRM/jxc.db - dbid 已更改
数据文件 /oracle/CRM/temp01.db - dbid 已更改
控制文件 /oracle/CRM /control03.ctl - dbid 已更改
实例关闭
数据库 CRM 的数据库 ID 更改为3641774948.
此数据库之前的所有备份和存档重做日志均不可用。
数据库已关闭,使用 RESETLOGS 选项打开数据库。
成功更改数据库 ID。
DBNEWID - 成功完成。
[oracle@source ~]$ sqlplus / as sysdba
SQL*Plus:版本 11.2。 0.2.0 于 2013 年 12 月 4 日星期三 23:47:21 投入使用
版权所有 (c) 1982, 2010, Oracle。 保留所有权利。
已连接到空闲实例。
SQL>启动挂载;
ORACLE 实例已启动。
总系统全局区域 1252663296 字节
固定大小 2226072 字节
可变大小 922749032 字节
数据库缓冲区 318767104 字节
重做缓冲区 8921088 字节
已安装数据库。
SQL>更改数据库打开重置日志;
数据库已更改。
SQL> select dbid,name from v$database;
DBID NAME
----- ---- ---------
3641774948 CRM
eg2 :仅更改数据库db_name
oracle@source ~]$ sqlplus / as sysdba
SQL*Plus:于 2013 年 12 月 5 日星期四 00:11:03 发布 11.2.0.2.0 生产
版权所有 (c) 1982、2010,Oracle。 保留所有权利。
连接到:
Oracle Database 11g 企业版版本 11.2.0.2.0 - 64 位生产
具有分区、OLAP、数据挖掘和实际应用程序测试选项
SQL>从 v$database 选择 open_mode;
OPEN_MODE
--------- -----------
读写
SQL> shutdown 立即;
数据库已关闭。
数据库已卸载。
ORACLE 实例关闭。
SQL>启动挂载;
ORACLE 实例已启动。
总系统全局区域 1252663296 字节
固定大小 2226072 字节
可变大小 905971816 字节
数据库缓冲区 335544320 字节
重做缓冲区 8921088 字节
数据库已安装。
SQL>退出
与 Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64 位生产版断开
使用分区、OLAP、数据挖掘和真实应用程序测试选项
oracle@source ~]$ nid target=sys dbname=CRM_TEST setname=YES
DBNEWID:版本 11.2.0.2.0 - 于 2013 年 12 月 5 日星期四 00:24:58 发布
版权所有 (c) 1982, 2009 年,Oracle 和/或其附属公司。 保留所有权利。
密码:
已连接到数据库 CRM (DBID=3641774948)
已连接到服务器版本 11.2.0
控制文件数据库:
/oracle/CRM/control03.ctl
将数据库 CRM 的数据库名称更改为CRM_测试? (Y/[N]) => y
继续操作
将数据库名称从 CRM 更改为 CRM_TEST
控制文件 /oracle/CRM/control03.ctl - 修改
数据文件 /oracle/CRM/system01.db - 写入新名称
数据文件 /oracle/CRM/sysaux01.db - 写入新名称
数据文件 /oracle/CRM/zx.db - 写入新名称
数据文件 /oracle/CRM/users01.db - 写入新名称
数据文件 /oracle/CRM/pos.db - 写入新名称
数据文件 /oracle/CRM/erp.db - 写入新名称
数据文件 /oracle/CRM/user01.db - 写入新名称
数据文件 /oracle/CRM/undotbs03.db - 写入新名称
数据文件 /oracle/CRM/crm.db - 写入新名称
数据文件 /oracle/CRM/jxc.db - 写入新名称
数据文件 /oracle/CRM/temp01.db - 写入新名称
控制文件 /oracle/CRM/control03.ctl - 写入新名称
实例关闭
数据库名称更改为 CRM_TEST。
重启前修改参数文件并生成新的密码文件。
数据库更改成功名称。
DBNEWID - 成功完成。
[oracle@source ~]$ sqlplus / as sysdba
SQL*Plus:于 2013 年 12 月 5 日星期四 00:25:33 发布 11.2.0.2.0 生产
版权所有 (c) 1982、2010,Oracle。 保留所有权利。
已连接到空闲实例。
SQL>启动 nomount;
ORACLE 实例已启动。
总系统全局区域 1252663296 字节
固定大小 2226072 字节
可变大小 905971816 字节
数据库缓冲区 335544320 字节
重做缓冲区 8921088 字节
SQL>; alter system set db_name=CRM_TEST range=spfile;
系统已更改。
[oracle@source ~]$orapwd file="$ORACLE_HOME/dbs/orapw$ORACLE_SID" 密码=dhhzdhhz Force=y
[oracle@source dbs]$ sqlplus / as sysdba
SQL*Plus:于 2000 年 12 月 5 日星期四发布 11.2.0.2.0 生产版:34:40 2013
版权所有 (c) 1982、2010,Oracle。 保留所有权利。
连接到:
Oracle Database 11g 企业版版本 11.2.0.2.0 - 64 位生产
具有分区、OLAP、数据挖掘和实际应用程序测试选项
SQL>启动强制打开;
ORACLE 实例已启动。
总系统全局区域 1252663296 字节
固定大小 2226072 字节
可变大小 905971816 字节
数据库缓冲区 335544320 字节
重做缓冲区 8921088 字节
数据库已安装。
数据库已打开。
SQL> select dbid,name from v$database;
DBID NAME
----- ---- ---------
3641774948 CRM_TEST
本文出自 “myblog” 博客,请务必保留此出处
,