use NID to change dbname

oracle@hp-cpp-11 bdump]$ nid -help

DBNEWID: Release 10.2.0.4.0 - Production on Tue May 11 15:06:41 2010

Copyright (c) 1982, 2007, Oracle.  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

 

SQL> show parameter name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string
db_name                              string      cdrlog
db_unique_name                       string      cdrlog
global_names                         boolean     FALSE
instance_name                        string      cdrlog
lock_name_space                      string
log_file_name_convert                string
service_names                        string      cdrlog


SQL> conn /as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
SQL> host
[oracle@hp-cpp-11 oracle]$ nid target=system/internal dbname=testcdr
.......


    Control File /opt/oracle/oradata/settle/control01.ctl - dbid changed, wrote new name
    Control File /opt/oracle/oradata/settle/control02.ctl - dbid changed, wrote new name
    Control File /data/boss/control03.ctl - dbid changed, wrote new name
   
这里出现长时间等待现象。


shutdown abort 后出现报错:
NID-00600: Internal Error - [28] [3113] [0] [0]


Change of database name and ID failed during validation - database is intact.
DBNEWID - Completed with validation errors.

 

/*
 *看alert log
 */
*** DBNEWID utility started ***
DBID will be changed from 352830500 to new DBID of 2901809528 for database CDRLOG
DBNAME will be changed from CDRLOG to new DBNAME of TESTCDR
Starting datafile conversion
Setting recovery target incarnation to 1
Datafile conversion complete
Database name changed to TESTCDR.
Modify parameter file and generate a new password file before restarting.
Database ID for database TESTCDR changed to 2901809528.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open with RESETLOGS option.
Succesfully changed database name and ID.
*** DBNEWID utility finished succesfully ***
Shutting down instance: further logons disabled
Tue May 11 13:48:09 2010
Stopping background process CJQ0
Tue May 11 13:48:09 2010
Stopping background process MMNL
Tue May 11 13:48:10 2010
Stopping background process MMON
Tue May 11 13:48:11 2010
Shutting down instance (immediate)
License high water mark = 2
Tue May 11 13:48:11 2010
Stopping Job queue slave processes, flags = 7
Tue May 11 13:48:11 2010
Job queue slave processes stopped
Waiting for dispatcher 'D000' to shutdown
Waiting for dispatcher 'D001' to shutdown
Waiting for dispatcher 'D002' to shutdown
All dispatchers and shared servers shutdown
Tue May 11 13:53:14 2010
SHUTDOWN: Active processes prevent shutdown operation
Tue May 11 13:58:15 2010
SHUTDOWN: Active processes prevent shutdown operation
Tue May 11 14:03:16 2010
SHUTDOWN: Active processes prevent shutdown operation
Tue May 11 14:08:17 2010
SHUTDOWN: Active processes prevent shutdown operation
Tue May 11 14:13:18 2010
SHUTDOWN: Active processes prevent shutdown operation
Tue May 11 14:18:19 2010
SHUTDOWN: Active processes prevent shutdown operation
Tue May 11 14:23:20 2010
SHUTDOWN: Active processes prevent shutdown operation
Tue May 11 14:28:21 2010
SHUTDOWN: Active processes prevent shutdown operation
Tue May 11 14:33:22 2010
SHUTDOWN: Active processes prevent shutdown operation

 

create pfile from spfile;
modify initial file
 把db_name, instance_name改为new dbname
create spfile from pfile;

重建口令文件

[oracle@hp-cpp-11 dbs]$ orapwd file=/opt/oracle/product/10.2.0.4/dbs/orapwtestcdr password=oracle entries=5

SQL> startup mount;
ORACLE instance started.

Total System Global Area  473956352 bytes
Fixed Size                  1268124 bytes
Variable Size             255854180 bytes
Database Buffers          209715200 bytes
Redo Buffers                7118848 bytes
Database mounted.
SQL> alter database open resetlogs;

Database altered.

SQL> select name from v$database;

NAME
---------
TESTCDR

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
settle

SQL> show parameter name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string
db_name                              string      testcdr
db_unique_name                       string      testcdr
global_names                         boolean     FALSE
instance_name                        string      testcdr
lock_name_space                      string
log_file_name_convert                string
service_names                        string      testcdr

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
TESTCDR

导致问题的原因:由于在执行NID命令的时候,没有退出SQLPLUS,也就是说SYS用户的连接还存在,导致NID在关闭数据库的时候出现了等待

请使用浏览器的分享功能分享到微信等