Nid是Oracle从9iR2开始提供的工具,可以用来更改数据库名称,而无需通过之前重建控制文件等繁琐方式。
需要说明的是,虽然这个工具来自9iR2,但是仍然可以被用于Oracle8i.
先看一下帮助:
C:\>nid -help
DBNEWID: Release 10.1.0.2.0 - Production
Copyright (c) 2001, 2004, Oracle. All rights reserved.
关键字 说明 (默认值)
----------------------------------------------------
TARGET 用户名/口令 (无)
DBNAME 新的数据库名 (无)
LOGFILE 输出日志 (无)
REVERT 还原失败的更改 否
SETNAME 仅设置新的数据库名 否
APPEND 附加至输出日志 否
HELP 显示这些消息 否
我们通过范例来看一下用法:
1.数据库当前设置
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
db_name string eyglev
global_names boolean FALSE
instance_name string eyglev
lock_name_space string
log_file_name_convert string
oracle_trace_collection_name string
oracle_trace_facility_name string oracled
plsql_native_make_file_name string
service_names string eyglev
2.Shutdown数据库
SQL> connect sys/orasys as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
3.Startup mount
SQL> startup mount
ORACLE instance started.
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
4. 使用NID更改
SQL> host
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.
C:\Documents and Settings\Administrator>nid target=sys/liu123 dbname=otclt
DBNEWID: Release 10.2.0.1.0 - Production on 星期二 10月 30 15:44:33 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接数据库 ORCL (DBID=1292164344)
已连接服务器版本 10.1.0
数据库中的控制文件数:
D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL01.CTL
D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL02.CTL
D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL03.CTL
是否将数据库 ID 和数据库名 ORCL 更改为 OTCLT? (Y/[N]) => Y
操作继续进行
将数据库 ID 从 1292164344 更改为 2981374306
将数据库名从 ORCL 更改为 OTCLT
控制文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL01.CTL - 已修改
控制文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL02.CTL - 已修改
控制文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL03.CTL - 已修改
数据文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF - dbid 已更改
已写入新名称
数据文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS01.DBF - dbid 已更改
数据文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAUX01.DBF - dbid 已更改
数据文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS01.DBF - dbid 已更改,
写入新名称
数据文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\EXAMPLE01.DBF - dbid 已更改
数据文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\TEMP01.DBF - dbid 已更改,
控制文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL01.CTL - dbid 已更改
控制文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL02.CTL - dbid 已更改
控制文件 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL03.CTL - dbid 已更改
实例关闭
数据库名已更改为 OTCLT。
修改参数文件并在重新启动前生成新的口令文件。
数据库 OTCLT 的数据库 ID 已更改为 2981374306。
此数据库的所有以前的备份和归档重做日志均不可用。
数据库无法识别恢复区中以前的备份和归档日志。
数据库已关闭, 用 RESETLOGS 选项打开数据库。
已成功更改数据库名和 ID。
DBNEWID - 已成功完成。
C:\Documents and Settings\Administrator>
5.Shutdown database
ORA-01109: database not open
6.修改初始化参数文件、spfile文件(init.ora/spfile)
###########################################
instance_name=eyglen
#instance_name=eyglev
db_domain=""
db_name=eyglen
# db_name=eyglev
7.重建spfile文件
如果你没有使用spfile,当然无需重建,跳至8
SQL> startup pfile=E:\Oracle\admin\eyglen\pfile\init.ora
ORA-01991: invalid password file 'e:\oracle\Ora9iR2\DATABASE\PWDeyglen.ORA'
SQL> CREATE SPFILE='E:\Oracle\Ora9iR2\database\SPFILEEYGLEN.ORA' FROM
PFILE='E:\Oracle\admin\eyglen\pfile\init.ora';
File created.
8.重建口令文件
C:\>orapwd file=E:\Oracle\Ora9iR2\database\PWDeyglen.ORA password=oracle entries=5
9.shutdown数据库
如果不使用spfile,则可以跳至10
10.Startup mount,resetlogs打开
11.修改后的参数
NAME TYPE VALUE
db_name string eyglen
global_names boolean FALSE
instance_name string eyglen
log_file_name_convert string
oracle_trace_facility_name string oracled
service_names string eyglen
12.对数据库做个全备份