在Oracle数据库中,dbname和dbid是可以在创建数据库后修改的。一般在什么情况下去修改他们呢?我们知道在Data Guard physical standby DB下,主库和备库的DBID是一致的,当撤销Data Guard环境之后需要使用其中一个备库RMAN Catalog注册主库目标数据库的时会出现一个问题,因为RMAN认DBID,由于DBID相同,所以引发冲突这时候就会注册失败,可以通过修改DBID解决这个问题。
[oracle@testdb ~]$ sqlplus / AS sysdba
SQL*Plus: Release 10.2.0.1.0 - Production ON Wed Jan 18 11:02:03 2012
Copyright (c) 1982, 2005, Oracle. ALL rights reserved.
Connected TO:
Oracle DATABASE 10g Enterprise Edition Release 10.2.0.1.0 - Production
WITH the Partitioning, OLAP AND DATA Mining options
SQL> SELECT dbid FROM v$database;
DBID
----------
2556212653
SQL>
以上2556212653就是dbid
DBNEWID is a database utility that can change the internal database identifier (DBID)
and the database name (DBNAME) for an operational database.
Prior to the introduction of the DBNEWID utility, you could manually create a copy of
a database and give it a new database name (DBNAME) by re-creating the control file.
However, you could not give the database a new identifier (DBID). The DBID is an
internal, unique identifier for a database. Because Recovery Manager (RMAN)
distinguishes databases by DBID, you could not register a seed database and a
manually copied database together in the same RMAN repository. The DBNEWID
utility solves this problem by allowing you to change any of the following:
■ Only the DBID of a database
■ Only the DBNAME of a database
■ Both the DBNAME and DBID of a database
Changing the DBID and Database Name
当前dbname和dbid
SQL> SELECT open_mode,dbid,name FROM v$database;
OPEN_MODE DBID NAME
---------- ---------- ---------
MOUNTED 2556212653 TESTDB
SQL> exit
Disconnected FROM Oracle DATABASE 10g Enterprise Edition Release 10.2.0.1.0 - Production
WITH the Partitioning, OLAP AND DATA Mining options
[oracle@testdb ~]$
修改dbname和dbid
[oracle@testdb ~]$ nid target=/ dbname=ZWC
DBNEWID: Release 10.2.0.1.0 - Production ON Wed Jan 18 11:40:26 2012
Copyright (c) 1982, 2005, Oracle. ALL rights reserved.
Connected TO DATABASE TESTDB (DBID=2556212653)
Connected TO server version 10.2.0
Control Files IN DATABASE:
/u01/app/oracle/oradata/testdb/control01.ctl
/u01/app/oracle/oradata/testdb/control02.ctl
/u01/app/oracle/oradata/testdb/control03.ctl
CHANGE DATABASE ID AND DATABASE name TESTDB TO ZWC? (Y/[N]) => Y
Proceeding WITH operation
Changing DATABASE ID FROM 2556212653 TO 528908138
Changing DATABASE name FROM TESTDB TO ZWC
Control File /u01/app/oracle/oradata/testdb/control01.ctl - modified
Control File /u01/app/oracle/oradata/testdb/control02.ctl - modified
Control File /u01/app/oracle/oradata/testdb/control03.ctl - modified
Datafile /u01/app/oracle/oradata/testdb/system01.dbf - dbid changed, wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/undotbs01.dbf - dbid changed, wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/sysaux01.dbf - dbid changed, wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/users01.dbf - dbid changed, wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/example01.dbf - dbid changed, wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/temp01.dbf - dbid changed, wrote NEW name
Control File /u01/app/oracle/oradata/testdb/control01.ctl - dbid changed, wrote NEW name
Control File /u01/app/oracle/oradata/testdb/control02.ctl - dbid changed, wrote NEW name
Control File /u01/app/oracle/oradata/testdb/control03.ctl - dbid changed, wrote NEW name
Instance shut down
DATABASE name changed TO ZWC.
MODIFY parameter file AND generate a NEW password file BEFORE restarting.
DATABASE ID FOR DATABASE ZWC changed TO 528908138.
ALL previous backups AND archived redo logs FOR this DATABASE are unusable.
DATABASE has been shutdown, OPEN DATABASE WITH RESETLOGS OPTION.
Succesfully changed DATABASE name AND ID.
DBNEWID - Completed succesfully.
修改pfile文件
SQL> CREATE pfile='/u01/app/tmp.ora' FROM spfile;
File created.
SQL>
[oracle@testdb app]$ cat tmp.ora |grep db_name
*.db_name='ZWC'
[oracle@testdb app]$
SQL> CREATE spfile FROM pfile='/u01/app/tmp.ora';
File created.
SQL>
启动数据库验证
SQL> startup mount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed SIZE 1218992 bytes
Variable SIZE 92276304 bytes
DATABASE Buffers 188743680 bytes
Redo Buffers 2973696 bytes
DATABASE mounted.
SQL> ALTER DATABASE OPEN resetlogs;
DATABASE altered.
SQL> SELECT open_mode,dbid,name FROM v$database;
OPEN_MODE DBID NAME
---------- ---------- ---------
READ WRITE 528908138 ZWC
SQL>
Changing Only the Database ID
当前dbname和dbid
SQL> SELECT open_mode,dbid,name FROM v$database;
OPEN_MODE DBID NAME
---------- ---------- ---------
READ WRITE 528908138 ZWC
SQL>
SQL> shutdown immediate
DATABASE closed.
DATABASE dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed SIZE 1218992 bytes
Variable SIZE 92276304 bytes
DATABASE Buffers 188743680 bytes
Redo Buffers 2973696 bytes
DATABASE mounted.
SQL> exit
Disconnected FROM Oracle DATABASE 10g Enterprise Edition Release 10.2.0.1.0 - Production
WITH the Partitioning, OLAP AND DATA Mining options
[oracle@testdb ~]$
[oracle@testdb ~]$ nid target=/
DBNEWID: Release 10.2.0.1.0 - Production ON Wed Jan 18 12:31:13 2012
Copyright (c) 1982, 2005, Oracle. ALL rights reserved.
Connected TO DATABASE ZWC (DBID=528908138)
Connected TO server version 10.2.0
Control Files IN DATABASE:
/u01/app/oracle/oradata/testdb/control01.ctl
/u01/app/oracle/oradata/testdb/control02.ctl
/u01/app/oracle/oradata/testdb/control03.ctl
CHANGE DATABASE ID OF DATABASE ZWC? (Y/[N]) => Y
Proceeding WITH operation
Changing DATABASE ID FROM 528908138 TO 528872785
Control File /u01/app/oracle/oradata/testdb/control01.ctl - modified
Control File /u01/app/oracle/oradata/testdb/control02.ctl - modified
Control File /u01/app/oracle/oradata/testdb/control03.ctl - modified
Datafile /u01/app/oracle/oradata/testdb/system01.dbf - dbid changed
Datafile /u01/app/oracle/oradata/testdb/undotbs01.dbf - dbid changed
Datafile /u01/app/oracle/oradata/testdb/sysaux01.dbf - dbid changed
Datafile /u01/app/oracle/oradata/testdb/users01.dbf - dbid changed
Datafile /u01/app/oracle/oradata/testdb/example01.dbf - dbid changed
Datafile /u01/app/oracle/oradata/testdb/temp01.dbf - dbid changed
Control File /u01/app/oracle/oradata/testdb/control01.ctl - dbid changed
Control File /u01/app/oracle/oradata/testdb/control02.ctl - dbid changed
Control File /u01/app/oracle/oradata/testdb/control03.ctl - dbid changed
Instance shut down
DATABASE ID FOR DATABASE ZWC changed TO 528872785.
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.
[oracle@testdb ~]$
[oracle@testdb ~]$ sqlplus / AS sysdba
SQL*Plus: Release 10.2.0.1.0 - Production ON Wed Jan 18 12:32:24 2012
Copyright (c) 1982, 2005, Oracle. ALL rights reserved.
Connected TO an idle instance.
SQL> startup mount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed SIZE 1218992 bytes
Variable SIZE 92276304 bytes
DATABASE Buffers 188743680 bytes
Redo Buffers 2973696 bytes
DATABASE mounted.
SQL> ALTER DATABASE OPEN resetlogs;
DATABASE altered.
修改后的dbid
SQL> SELECT open_mode,dbid,name FROM v$database;
OPEN_MODE DBID NAME
---------- ---------- ---------
READ WRITE 528872785 ZWC
Changing Only the Database Name
当前dbname
SQL> SELECT open_mode,dbid,name FROM v$database;
OPEN_MODE DBID NAME
---------- ---------- ---------
READ WRITE 528872785 ZWC
SQL>
修改dbname
SQL> shutdown immediate
DATABASE closed.
DATABASE dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed SIZE 1218992 bytes
Variable SIZE 92276304 bytes
DATABASE Buffers 188743680 bytes
Redo Buffers 2973696 bytes
DATABASE mounted.
SQL> exit
Disconnected FROM Oracle DATABASE 10g Enterprise Edition Release 10.2.0.1.0 - Production
WITH the Partitioning, OLAP AND DATA Mining options
[oracle@testdb ~]$
[oracle@testdb ~]$ nid target=/ dbname=ZHONG setname=yes
DBNEWID: Release 10.2.0.1.0 - Production ON Wed Jan 18 12:43:31 2012
Copyright (c) 1982, 2005, Oracle. ALL rights reserved.
Connected TO DATABASE ZWC (DBID=528872785)
Connected TO server version 10.2.0
Control Files IN DATABASE:
/u01/app/oracle/oradata/testdb/control01.ctl
/u01/app/oracle/oradata/testdb/control02.ctl
/u01/app/oracle/oradata/testdb/control03.ctl
CHANGE DATABASE name OF DATABASE ZWC TO ZHONG? (Y/[N]) => Y
Proceeding WITH operation
Changing DATABASE name FROM ZWC TO ZHONG
Control File /u01/app/oracle/oradata/testdb/control01.ctl - modified
Control File /u01/app/oracle/oradata/testdb/control02.ctl - modified
Control File /u01/app/oracle/oradata/testdb/control03.ctl - modified
Datafile /u01/app/oracle/oradata/testdb/system01.dbf - wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/undotbs01.dbf - wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/sysaux01.dbf - wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/users01.dbf - wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/example01.dbf - wrote NEW name
Datafile /u01/app/oracle/oradata/testdb/temp01.dbf - wrote NEW name
Control File /u01/app/oracle/oradata/testdb/control01.ctl - wrote NEW name
Control File /u01/app/oracle/oradata/testdb/control02.ctl - wrote NEW name
Control File /u01/app/oracle/oradata/testdb/control03.ctl - wrote NEW name
Instance shut down
DATABASE name changed TO ZHONG.
MODIFY parameter file AND generate a NEW password file BEFORE restarting.
Succesfully changed DATABASE name.
DBNEWID - Completed succesfully.
[oracle@testdb ~]$
SQL> CREATE pfile='/u01/app/tmp.ora' FROM spfile;
File created.
SQL> !cat /u01/app/tmp.ora|grep db_name
*.db_name='ZHONG'
SQL>
SQL> CREATE spfile FROM pfile='/u01/app/tmp.ora';
File created.
修改后的dbname
SQL> startup
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed SIZE 1218992 bytes
Variable SIZE 92276304 bytes
DATABASE Buffers 188743680 bytes
Redo Buffers 2973696 bytes
DATABASE mounted.
DATABASE opened.
SQL> SELECT open_mode,dbid,name FROM v$database;
OPEN_MODE DBID NAME
---------- ---------- ---------
READ WRITE 528872785 ZHONG
