zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

oracle更改数据库名的方法

2023-06-13 09:14:13 时间
如何修改数据库名(db_name)及实例名(Instance_nameorService_name)

Nid是Oracle从9iR2开始提供的工具,可以用来更改数据库名称,而无需通过之前重建控制文件等繁琐方式。
nid是自带的工具,在oracle_home/bin目录中.以下方法假设登陆到数据库本机做。
目的:在本例中,假设原来的数据库名为orcl,要改成dborcl,原实例名(service_name,instance_name)orcl,要改成dborcl.
步骤概述:

1.检查当前的参数情况
2.shutdown数据库,然后mount数据库
3.运行nid命令
4.更改参数文件pfile.ora(db_name,instance_name)
5.检测更改情况
6.如果是windows平台,要修改服务
7.修改监听服务

C:\DocumentsandSettings\Administrator>sqlplus"/assysdba"
SQL*Plus:Release10.2.0.1.0-Productionon星期四10月2211:56:332009
Copyright(c)1982,2005,Oracle.Allrightsreserved.

连接到:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions
SQL>select*fromv$version;
BANNER
----------------------------------------------------------------
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Prod
PL/SQLRelease10.2.0.1.0-Production
CORE10.2.0.1.0Production
TNSfor32-bitWindows:Version10.2.0.1.0-Production
NLSRTLVersion10.2.0.1.0-Production
1.查看更改前的相应名称
SQL>showparametername
NAMETYPEVALUE
-----------------------------------------------------------------------------
db_file_name_convertstring
db_namestringorcl
db_unique_namestringorcl
global_namesbooleanFALSE
instance_namestringorcl
lock_name_spacestring
log_file_name_convertstring
service_namesstringorcl
2.--先shutdown数据库
SQL>shutdownimmediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
3.--nid需要在mount状态下才能做。因为要更改控制文件的信息
SQL>startupmount
ORACLE例程已经启动。
TotalSystemGlobalArea612368384bytes
FixedSize1250428bytes
VariableSize180358020bytes
DatabaseBuffers423624704bytes
RedoBuffers7135232bytes
数据库装载完毕。

nid是操作系统的命令,所以要用host
SQL>hostnid-help
DBNEWID:Release10.2.0.1.0-ProductiononFriOct2313:40:542009
Copyright(c)1982,2005,Oracle.Allrightsreserved.
KeywordDescription(Default)
----------------------------------------------------
TARGETUsername/Password(NONE)
DBNAMENewdatabasename(NONE)
LOGFILEOutputLog(NONE)
REVERTRevertfailedchangeNO
SETNAMESetanewdatabasenameonlyNO
APPENDAppendtooutputlogNO
HELPDisplaysthesemessagesNO
以上是nid命令的语法
4。--运行nid命令
SQL>hostnidtarget=sys/aibodbname=dborcl
DBNEWID:Release10.2.0.1.0-Productionon星期四10月2211:58:272009
Copyright(c)1982,2005,Oracle.Allrightsreserved.
已连接数据库ORCL(DBID=1224293825)
已连接服务器版本10.2.0
数据库中的控制文件数:
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
是否将数据库ID和数据库名ORCL更改为DBORCL?(Y/[N])=>y
操作继续进行
将数据库ID从1224293825更改为3277448932
将数据库名从ORCL更改为DBORCL
控制文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL-已修改
控制文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL-已修改
控制文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL-已修改
数据文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF-dbid已更改,
已写入新名称
数据文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF-dbid已更改,
已写入新名称
数据文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF-dbid已更改,
已写入新名称
数据文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF-dbid已更改,已
写入新名称
数据文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF-dbid已更改,
已写入新名称
数据文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF-dbid已更改,已
写入新名称
控制文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL-dbid已更改,
已写入新名称
控制文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL-dbid已更改,
已写入新名称
控制文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL-dbid已更改,
已写入新名称
实例关闭
数据库名已更改为DBORCL。
修改参数文件并在重新启动前生成新的口令文件。
数据库DBORCL的数据库ID已更改为3277448932。
此数据库的所有以前的备份和归档重做日志均不可用。
数据库无法识别恢复区中以前的备份和归档日志。
数据库已关闭,用RESETLOGS选项打开数据库。
已成功更改数据库名和ID。
DBNEWID-已成功完成。
5.---shutdown数据库
SQL>shutdownimmediate
ORA-01034:ORACLEnotavailable
ORA-27101:sharedmemoryrealmdoesnotexist

SQL>startupnomount
ORACLE例程已经启动。
TotalSystemGlobalArea612368384bytes
FixedSize1250428bytes
VariableSize180358020bytes
DatabaseBuffers423624704bytes
RedoBuffers7135232bytes

SQL>createpfile="D:\oracle\product\10.2.0\pfile20091022.ora"fromspfile;
文件已创建。
SQL>shutdownimmediate;
ORA-01507:??????

6.---修改初始化参数文件、spfile文件(init.ora/spfile)

###########################################
instance_name=eyglen
#instance_name=eyglev
###########################################
db_domain=""
db_name=eyglen
#db_name=eyglev
###########################################
7.---以修改后的参数启动数据库
SQL>startuppfile="D:\oracle\product\10.2.0\pfile20091022.ora"
ORACLE例程已经启动。
TotalSystemGlobalArea612368384bytes
FixedSize1250428bytes
VariableSize180358020bytes
DatabaseBuffers423624704bytes
RedoBuffers7135232bytes
数据库装载完毕。
ORA-01589:要打开数据库则必须使用RESETLOGS或NORESETLOGS选项

SQL>createspfilefrompfile="D:\oracle\product\10.2.0\pfile20091022.ora"
2;
文件已创建。
SQL>shutdownimmediate
ORA-01109:数据库未打开

已经卸载数据库。
ORACLE例程已经关闭。

SQL>startup
ORACLE例程已经启动。
TotalSystemGlobalArea612368384bytes
FixedSize1250428bytes
VariableSize180358020bytes
DatabaseBuffers423624704bytes
RedoBuffers7135232bytes
数据库装载完毕。
ORA-01589:要打开数据库则必须使用RESETLOGS或NORESETLOGS选项

SQL>alterdatabaseopennoresetlogs
2;
alterdatabaseopennoresetlogs
*
第1行出现错误:
ORA-01588:要打开数据库则必须使用RESETLOGS选项

SQL>alterdatabaseopenresetlogs
2;
数据库已更改。

8.--现在数据库已经启动了啊,那就检查下吧,看看是否已经修改了
SQL>selectopen_modefromv$database;
OPEN_MODE
----------
READWRITE
SQL>showparametername
NAMETYPEVALUE
-----------------------------------------------------------------------------
db_file_name_convertstring
db_namestringdborcl
db_unique_namestringdborcl
global_namesbooleanFALSE
instance_namestringdborcl
lock_name_spacestring
log_file_name_convertstring
service_namesstringdborcl
SQL>
SQL>selectinstance_namefromv$instance;
INSTANCE_NAME
----------------
orcl

9.发现v$instance里的没有修改过来,这是因为在windows平台,继续如下操作

********如果是windows平台,v$instance里的instanc_name没有变,继续如下操作
passwd文件通常放在oracle_home/database目录下,文件命名形式为PWDsid.ora,sid为实例名(Service_name),
如当前的数据库名及service_name为orcl,则passwd文件为PWDorcl.ora

C:\DocumentsandSettings\Administrator>orapwdfile=D:\oracle\product\10.2.0\db_
1\database\PWDdborcl.orapassword=aiboentries=5
要注意一下,此时虽然数据库名已经改成dborcl了,但instance_name还是orcl,所以,passwd文件必须跟以前一样。否则会出错。

10.删除以前的实例orcl
C:\DocumentsandSettings\Administrator>oradim-delete-sidorcl
实例已删除。
11.创建新的实例名dborcl
C:\DocumentsandSettings\Administrator>oradim-new-siddborcl-intpwdaibo-st
artmodea-pfileD:\oracle\product\10.2.0\pfile20091022.ora
OPW-00005:存在相同名称的文件-请删除或重命名
实例已创建。
12.

C:\DocumentsandSettings\Administrator>setoracle_sid=dborcl
C:\DocumentsandSettings\Administrator>sqlplus"/assysdba"
SQL*Plus:Release10.2.0.1.0-Productionon星期四10月2213:41:122009
Copyright(c)1982,2005,Oracle.Allrightsreserved.

连接到:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions

SQL>quit
从OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions断开

13.检查服务名
C:\DocumentsandSettings\Administrator>lsnrctlreload
LSNRCTLfor32-bitWindows:Version10.2.0.1.0-Productionon22-10月-200913:4
3:13
Copyright(c)1991,2005,Oracle.Allrightsreserved.
正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.56)(PORT=1521)))
命令执行成功
C:\DocumentsandSettings\Administrator>sqlplus"/assysdba"
SQL*Plus:Release10.2.0.1.0-Productionon星期四10月2213:43:212009
Copyright(c)1982,2005,Oracle.Allrightsreserved.

连接到:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions
SQL>selectopen_modefromv$database;
OPEN_MODE
----------
READWRITE
SQL>selectinstance_namefromv$instance;
INSTANCE_NAME
----------------
dborcl
SQL>showparametername;
NAMETYPEVALUE
-----------------------------------------------------------------------------
db_file_name_convertstring
db_namestringdborcl
db_unique_namestringdborcl
global_namesbooleanFALSE
instance_namestringdborcl
lock_name_spacestring
log_file_name_convertstring
service_namesstringdborcl

SQL>quit
从OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions断开
检查service是否被更改
C:\DocumentsandSettings\Administrator>tnspingdborcl
TNSPingUtilityfor32-bitWindows:Version10.2.0.1.0-Productionon22-10月-
200913:50:00
Copyright(c)1997,2005,Oracle.Allrightsreserved.
已使用的参数文件:
D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
已使用EZCONNECT适配器来解析别名
Attemptingtocontact(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=dborcl.gdgg.local
))(ADDRESS=(PROTOCOL=TCP)(HOST=202.106.195.30)(PORT=1521)))
^C

测试不通过,说明dborcl配置有问题

修改tnsnames.ora文件,添加如下内容:
×××××××××××××××××××××××××××××××××××××××××××××××××××××
DBORCL=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.56)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=dborcl)
)
)
×××××××××××××××××××××××××××××××××××××××××××××××××××××

--重启监听
C:\DocumentsandSettings\Administrator>lsnrctlreload
LSNRCTLfor32-bitWindows:Version10.2.0.1.0-Productionon22-10月-200913:5
0:46
Copyright(c)1991,2005,Oracle.Allrightsreserved.
正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.56)(PORT=1521)))
命令执行成功

---在测试
C:\DocumentsandSettings\Administrator>tnspingdborcl
TNSPingUtilityfor32-bitWindows:Version10.2.0.1.0-Productionon22-10月-
200913:52:18
Copyright(c)1997,2005,Oracle.Allrightsreserved.
已使用的参数文件:
D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

已使用TNSNAMES适配器来解析别名
Attemptingtocontact(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.
2.56)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=dborcl)
))
OK(20毫秒)

到此所有的数据库名(db_name)及实例名(Instance_nameorService_name),都已经更改