当我们手动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: Release 11.2.0.2.0 - Production on Wed Dec 4 23:39:11 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to database CRM (DBID=3599153036)
Connected to server version 11.2.0
Control Files in database:
/oracle/CRM/control03.ctl
Change database ID of database CRM? (Y/[N]) => y
Proceeding with operation
Changing database ID from 3599153036 to 3641774948
Control File /oracle/CRM/control03.ctl - modified
Datafile /oracle/CRM/system01.db - dbid changed
Datafile /oracle/CRM/sysaux01.db - dbid changed
Datafile /oracle/CRM/zx.db - dbid changed
Datafile /oracle/CRM/users01.db - dbid changed
Datafile /oracle/CRM/pos.db - dbid changed
Datafile /oracle/CRM/erp.db - dbid changed
Datafile /oracle/CRM/user01.db - dbid changed
Datafile /oracle/CRM/undotbs03.db - dbid changed
Datafile /oracle/CRM/crm.db - dbid changed
Datafile /oracle/CRM/jxc.db - dbid changed
Datafile /oracle/CRM/temp01.db - dbid changed
Control File /oracle/CRM/control03.ctl - dbid changed
Instance shut down
.
Succesfully changed database ID.
DBNEWID - Completed succesfully.
[oracle@source ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Wed Dec 4 23:47:21 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to an idle instance.
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> alter database open resetlogs;
Database altered.
SQL> select dbid,name from v$database;
DBID NAME
---------- ---------
3641774948 CRM
eg2 :仅更改数据库db_name
oracle@source ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:11:03 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
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 905971816 bytes
Database Buffers 335544320 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 dbname=CRM_TEST setname=YES
DBNEWID: Release 11.2.0.2.0 - Production on Thu Dec 5 00:24:58 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to database CRM (DBID=3641774948)
Connected to server version 11.2.0
Control Files in database:
/oracle/CRM/control03.ctl
Change database name of database CRM to CRM_TEST? (Y/[N]) => y
Proceeding with operation
Changing database name from CRM to CRM_TEST
Control File /oracle/CRM/control03.ctl - modified
Datafile /oracle/CRM/system01.db - wrote new name
Datafile /oracle/CRM/sysaux01.db - wrote new name
Datafile /oracle/CRM/zx.db - wrote new name
Datafile /oracle/CRM/users01.db - wrote new name
Datafile /oracle/CRM/pos.db - wrote new name
Datafile /oracle/CRM/erp.db - wrote new name
Datafile /oracle/CRM/user01.db - wrote new name
Datafile /oracle/CRM/undotbs03.db - wrote new name
Datafile /oracle/CRM/crm.db - wrote new name
Datafile /oracle/CRM/jxc.db - wrote new name
Datafile /oracle/CRM/temp01.db - wrote new name
Control File /oracle/CRM/control03.ctl - wrote new name
Instance shut down
Succesfully changed database name.
DBNEWID - Completed succesfully.
[oracle@source ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:25:33 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2226072 bytes
Variable Size 905971816 bytes
Database Buffers 335544320 bytes
Redo Buffers 8921088 bytes
SQL> alter system set db_name=CRM_TEST scope=spfile;
System altered.
[oracle@source ~]$orapwd file="$ORACLE_HOME/dbs/orapw$ORACLE_SID" password=dhhzdhhz force=y
[oracle@source dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Thu Dec 5 00:34:40 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> startup force open;
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2226072 bytes
Variable Size 905971816 bytes
Database Buffers 335544320 bytes
Redo Buffers 8921088 bytes
Database mounted.
Database opened.
SQL> select dbid,name from v$database;
DBID NAME
---------- ---------
3641774948 CRM_TEST