如何修改数据库名(db_name)及实例名(Instance_name or Service_name)
Nid是Oracle从iR开始提供的工具可以用来更改数据库名称而无需通过之前重建控制文件等繁琐方式
nid是自带的工具在oracle_home/bin目录中以下方法假设登陆到数据库本机做
目的在本例中假设原来的数据库名为orcl要改成dborcl原实例名(service_nameinstance_name)orcl要改成dborcl
步骤概述
检查当前的参数情况
shutdown数据库然后mount数据库
运行nid命令
更改参数文件pfileora(db_nameinstance_name)
检测更改情况
如果是windows平台要修改服务
修改监听服务
C:\Documents and Settings\Administrator>sqlplus /as sysdba
SQL*Plus: Release Production on 星期四 月 ::
Copyright (c) Oracle All rights reserved
连接到:
Oracle Database g Enterprise Edition Release Production
With the Partitioning OLAP and Data Mining options
SQL> select * from v$version;
BANNER
Oracle Database g Enterprise Edition Release Prod
PL/SQL Release Production
CORE Production
TNS for bit Windows: Version Production
NLSRTL Version Production
查看更改前的相应名称
SQL> show parameter name
NAME TYPE VALUE
db_file_name_convert string
db_name string orcl
db_unique_name string orcl
global_names boolean FALSE
instance_name string orcl
lock_name_space string
log_file_name_convert string
service_names string orcl
先shutdown数据库
SQL> shutdown immediate
数据库已经关闭
已经卸载数据库
ORACLE 例程已经关闭
nid需要在mount状态下才能做因为要更改控制文件的信息
SQL> startup mount
ORACLE 例程已经启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
数据库装载完毕
nid是操作系统的命令所以要用host
SQL> host nid help
DBNEWID: Release Production on Fri Oct ::
Copyright (c) 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
以上是nid命令的语法
运行nid命令
SQL> host nid target=sys/aibo dbname=dborcl
DBNEWID: Release Production on 星期四 月 ::
Copyright (c) Oracle All rights reserved
已连接数据库 ORCL (DBID=)
已连接服务器版本
数据库中的控制文件数:
D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL
D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL
D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL
是否将数据库 ID 和数据库名 ORCL 更改为 DBORCL? (Y/[N]) => y
操作继续进行
将数据库 ID 从 更改为
将数据库名从 ORCL 更改为 DBORCL
控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL 已修改
控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL 已修改
控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL 已修改
数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\SYSTEMDBF dbid 已更改
已写入新名称
数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\UNDOTBSDBF dbid 已更改
已写入新名称
数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\SYSAUXDBF dbid 已更改
已写入新名称
数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\USERSDBF dbid 已更改 已
写入新名称
数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\EXAMPLEDBF dbid 已更改
已写入新名称
数据文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\TEMPDBF dbid 已更改 已
写入新名称
控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL dbid 已更改
已写入新名称
控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL dbid 已更改
已写入新名称
控制文件 D:\ORACLE\PRODUCT\\ORADATA\ORCL\CONTROLCTL dbid 已更改
已写入新名称
实例关闭
数据库名已更改为 DBORCL
修改参数文件并在重新启动前生成新的口令文件
数据库 DBORCL 的数据库 ID 已更改为
此数据库的所有以前的备份和归档重做日志均不可用
数据库无法识别恢复区中以前的备份和归档日志
数据库已关闭 用 RESETLOGS 选项打开数据库
已成功更改数据库名和 ID
DBNEWID 已成功完成
shutdown数据库
SQL> shutdown immediate
ORA: ORACLE not available
ORA: shared memory realm does not exist
SQL> startup nomount
ORACLE 例程已经启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
SQL> create pfile=D:\oracle\product\\pfileora from spfile;
文件已创建
SQL> shutdown immediate;
ORA: ??????
修改初始化参数文件spfile文件(initora/spfile)
###########################################
instance_name=eyglen
#instance_name=eyglev
###########################################
db_domain=
db_name=eyglen
# db_name=eyglev
###########################################
以修改后的参数启动数据库
SQL> startup pfile=D:\oracle\product\\pfileora
ORACLE 例程已经启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
数据库装载完毕
ORA: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> create spfile from pfile=D:\oracle\product\\pfileora
;
文件已创建
SQL> shutdown immediate
ORA: 数据库未打开
已经卸载数据库
ORACLE 例程已经关闭
SQL> startup
ORACLE 例程已经启动
Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
数据库装载完毕
ORA: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open noresetlogs
;
alter database open noresetlogs
*
第 行出现错误:
ORA: 要打开数据库则必须使用 RESETLOGS 选项
SQL> alter database open resetlogs
;
数据库已更改
现在数据库已经启动了啊那就检查下吧看看是否已经修改了
SQL> select open_mode from v$database;
OPEN_MODE
READ WRITE
SQL> show parameter name
NAME TYPE VALUE
db_file_name_convert string
db_name string dborcl
db_unique_name string dborcl
global_names boolean FALSE
instance_name string dborcl
lock_name_space string
log_file_name_convert string
service_names string dborcl
SQL>
SQL> select instance_name from v$instance;
INSTANCE_NAME
orcl
发现v$instance里的没有修改过来这是因为在windows平台继续如下操作
********如果是windows平台v$instance里的instanc_name没有变 继续如下操作
passwd文件通常放在oracle_home/database目录下文件命名形式为PWDsidorasid为实例名(Service_name)
如当前的数据库名及service_name为orcl则passwd文件为PWDorclora
C:\Documents and Settings\Administrator>orapwd file=D:\oracle\product\\db_
\database\PWDdborclora password=aibo entries=
要注意一下此时虽然数据库名已经改成dborcl了但instance_name还是orcl所以passwd文件必须跟以前一样否则会出错
删除以前的实例orcl
C:\Documents and Settings\Administrator>oradim delete sid orcl
实例已删除
创建新的实例名 dborcl
C:\Documents and Settings\Administrator>oradim new sid dborcl intpwd aibo st
artmode a pfile D:\oracle\product\\pfileora
OPW: 存在相同名称的文件 请删除或重命名
实例已创建
C:\Documents and Settings\Administrator>set oracle_sid=dborcl
C:\Documents and Settings\Administrator>sqlplus /as sysdba
SQL*Plus: Release Production on 星期四 月 ::
Copyright (c) Oracle All rights reserved
连接到:
Oracle Database g Enterprise Edition Release Production
With the Partitioning OLAP and Data Mining options
SQL> quit
从 Oracle Database g Enterprise Edition Release Production
With the Partitioning OLAP and Data Mining options 断开
检查服务名
C:\Documents and Settings\Administrator>lsnrctl reload
LSNRCTL for bit Windows: Version Production on 月 :
:
Copyright (c) Oracle All rights reserved
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=)))
命令执行成功
C:\Documents and Settings\Administrator>sqlplus /as sysdba
SQL*Plus: Release Production on 星期四 月 ::
Copyright (c) Oracle All rights reserved
连接到:
Oracle Database g Enterprise Edition Release Production
With the Partitioning OLAP and Data Mining options
SQL> select open_mode from v$database;
OPEN_MODE
READ WRITE
SQL> select instance_name from v$instance;
INSTANCE_NAME
dborcl
SQL> show parameter name;
NAME TYPE VALUE
db_file_name_convert string
db_name string dborcl
db_unique_name string dborcl
global_names boolean FALSE
instance_name string dborcl
lock_name_space string
log_file_name_convert string
service_names string dborcl
SQL> quit
从 Oracle Database g Enterprise Edition Release Production
With the Partitioning OLAP and Data Mining options 断开
检查service是否被更改
C:\Documents and Settings\Administrator>tnsping dborcl
TNS Ping Utility for bit Windows: Version Production on 月
::
Copyright (c) Oracle All rights reserved
已使用的参数文件:
D:\oracle\product\\db_\network\admin\sqlnetora
已使用 EZCONNECT 适配器来解析别名
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=dborclgdgglocal
))(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=)))
^C
测试不通过说明dborcl配置有问题
修改tnsnamesora文件添加如下内容
×××××××××××××××××××××××××××××××××××××××××××××××××××××
DBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dborcl)
)
)
×××××××××××××××××××××××××××××××××××××××××××××××××××××
重启监听
C:\Documents and Settings\Administrator>lsnrctl reload
LSNRCTL for bit Windows: Version Production on 月 :
:
Copyright (c) Oracle All rights reserved
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=)))
命令执行成功
在测试
C:\Documents and Settings\Administrator>tnsping dborcl
TNS Ping Utility for bit Windows: Version Production on 月
::
Copyright (c) Oracle All rights reserved
已使用的参数文件:
D:\oracle\product\\db_\network\admin\sqlnetora
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
)(PORT = )) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dborcl)
))
OK ( 毫秒)
到此所有的 数据库名(db_name)及实例名(Instance_name or Service_name) 都已经更改