在11g中,DBNEWID工具也做了一些改进使用上更加的方便。
看一下11g的DBNEWID工具的操作:
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on星期二4月7 17:11:53 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select dbid, name from v$database;
DBID NAME
---------- ------------------
835491368 TEST11G
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
TEST11G.NETDB
SQL> shutdown immediate数据库已经关闭。已经卸载数据库。ORACLE例程已经关闭。SQL> startup mount
ORACLE例程已经启动。
Total System Global Area 5279498240 bytes
Fixed Size 2094528 bytes
Variable Size 3192597056 bytes
Database Buffers 2080374784 bytes
Redo Buffers 4431872 bytes数据库装载完毕。SQL> exit从Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options断开
下面执行NID命令:
bash-3.00$ nid target=/ dbname=new11g
DBNEWID: Release 11.1.0.6.0 - Production on星期三4月8 00:52:41 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
已连接数据库TEST11G (DBID=835491368)
已连接服务器版本11.1.0
数据库中的控制文件数:
/data/oracle/oradata/test11g/control01.ctl
/data/oracle/oradata/test11g/control02.ctl
/data/oracle/oradata/test11g/control03.ctl
以下数据文件是只读的:
/data/oracle/oradata/test11g/test01.dbf (6)此实用程序必须能够写入这些文件。
是否将数据库ID和数据库名TEST11G更改为NEW11G? (Y/[N]) => y
操作继续进行将数据库ID从835491368更改为2655088921将数据库名从TEST11G更改为NEW11G控制文件/data/oracle/oradata/test11g/control01.ctl -已修改控制文件/data/oracle/oradata/test11g/control02.ctl -已修改控制文件/data/oracle/oradata/test11g/control03.ctl -已修改数据文件/data/oracle/oradata/test11g/system01.dbf - dbid已更改,已写入新名称数据文件/data/oracle/oradata/test11g/sysaux01.dbf - dbid已更改,已写入新名称数据文件/data/oracle/oradata/test11g/undotbs01.dbf - dbid已更改,已写入新名称数据文件/data/oracle/oradata/test11g/users01.dbf - dbid已更改,已写入新名称数据文件/data/oracle/oradata/test11g/yangtk01.dbf - dbid已更改,已写入新名称数据文件/data/oracle/oradata/test11g/test01.dbf - dbid已更改,已写入新名称数据文件/data/oracle/oradata/test11g/temp01.dbf - dbid已更改,已写入新名称控制文件/data/oracle/oradata/test11g/control01.ctl - dbid已更改,已写入新名称控制文件/data/oracle/oradata/test11g/control02.ctl - dbid已更改,已写入新名称控制文件/data/oracle/oradata/test11g/control03.ctl - dbid已更改,已写入新名称实例关闭
数据库名已更改为NEW11G。修改参数文件并在重新启动前生成新的口令文件。数据库NEW11G的数据库ID已更改为2655088921。此数据库的所有以前的备份和归档重做日志均不可用。数据库无法识别恢复区中以前的备份和归档日志。数据库已关闭,用RESETLOGS选项打开数据库。已成功更改数据库名和ID。DBNEWID -已成功完成。
可以看到,执行完NID命令后会自动关闭数据库,而9i中是需要手工关闭的,而且11g的提示信息更加详细。
在11g的alert文件中,DBNEWID工具会添加必要的信息来说明所进行的修改:
*** DBNEWID utility started ***
DBID will be changed from 835491368 to new DBID of 2655088921 for database TEST11G
DBNAME will be changed from TEST11G to new DBNAME of NEW11G
Starting datafile conversion
Setting recovery target incarnation to 1
Datafile conversion complete
Database name changed to NEW11G.
Modify parameter file and generate a new password file before restarting.
Database ID for database NEW11G changed to 2655088921.
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 ***
而在9i中则看不到任何的信息。
而且虽然Oracle提示需要重现生成新的密码文件,但是在11g不生成新的密码文件仍然可以正常登陆,而9i中则会报错ORA-01991错误:
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on星期三4月8 01:31:54 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup nomount
ORACLE例程已经启动。
Total System Global Area 5279498240 bytes
Fixed Size 2094528 bytes
Variable Size 3192597056 bytes
Database Buffers 2080374784 bytes
Redo Buffers 4431872 bytes
SQL> alter system set db_name = new11g scope = spfile;
系统已更改。
SQL> shutdown immediate
ORA-01507: ??????
ORACLE例程已经关闭。SQL> startup mount
ORACLE例程已经启动。
Total System Global Area 5279498240 bytes
Fixed Size 2094528 bytes
Variable Size 3192597056 bytes
Database Buffers 2080374784 bytes
Redo Buffers 4431872 bytes数据库装载完毕。SQL> alter database open resetlogs;
数据库已更改。
最后在11g中,GLOBAL_NAME也会自动修改,而9i还必须手工的修改GLOBAL_NAME:
SQL> select dbid, name from v$database;
DBID NAME
---------- ------------------
2655088921 NEW11G
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
NEW11G.NETDB
当然这些改进是10g和11g两个版本的改进,而不仅仅是11g一个版本的增强。