oracle更改数据库名

王朝学院·作者佚名  2009-10-25
窄屏简体版  字體: |||超大  

author:skate

time:2009/10/23

--------------------------------------------------------------------------------

这两天一朋友问如何更改数据库名,于是做个测试,简单记录下,以便说明问题

如何修改数据库名(db_name)及实例名(Instance_name or Service_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:\Documents and Settings\Administrator>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 10月 22 11:56:33 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

1. 查看更改前的相应名称

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

2. --先shutdown数据库

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

3. --nid需要在mount状态下才能做。因为要更改控制文件的信息

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area 612368384 bytes

Fixed Size 1250428 bytes

Variable Size 180358020 bytes

Database Buffers 423624704 bytes

Redo Buffers 7135232 bytes

数据库装载完毕。

nid是操作系统的命令,所以要用host

SQL> host nid -help

DBNEWID: Release 10.2.0.1.0 - Production on Fri Oct 23 13:40:54 2009

Copyright (c) 1982, 2005, 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命令的语法

4。 --运行nid命令

SQL> host nid target=sys/aibo dbname=dborcl

DBNEWID: Release 10.2.0.1.0 - Production on 星期四 10月 22 11:58:27 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

已连接数据库 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> shutdown immediate

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist

SQL> startup nomount

ORACLE 例程已经启动。

Total System Global Area 612368384 bytes

Fixed Size 1250428 bytes

Variable Size 180358020 bytes

Database Buffers 423624704 bytes

Redo Buffers 7135232 bytes

SQL> create pfile='D:\oracle\product\10.2.0\pfile20091022.ora' from spfile;

文件已创建。

SQL> shutdown immediate;

ORA-01507: ??????

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

###########################################

instance_name=eyglen

#instance_name=eyglev

###########################################

db_domain=""

db_name=eyglen

# db_name=eyglev

###########################################

7. ---以修改后的参数启动数据库

SQL> startup pfile='D:\oracle\product\10.2.0\pfile20091022.ora'

ORACLE 例程已经启动。

Total System Global Area 612368384 bytes

Fixed Size 1250428 bytes

Variable Size 180358020 bytes

Database Buffers 423624704 bytes

Redo Buffers 7135232 bytes

数据库装载完毕。

ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> create spfile from pfile='D:\oracle\product\10.2.0\pfile20091022.ora'

2 ;

文件已创建。

SQL> shutdown immediate

ORA-01109: 数据库未打开

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

Total System Global Area 612368384 bytes

Fixed Size 1250428 bytes

Variable Size 180358020 bytes

Database Buffers 423624704 bytes

Redo Buffers 7135232 bytes

数据库装载完毕。

ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open noresetlogs

2 ;

alter database open noresetlogs

*

第 1 行出现错误:

ORA-01588: 要打开数据库则必须使用 RESETLOGS 选项

SQL> alter database open resetlogs

2 ;

数据库已更改。

8. --现在数据库已经启动了啊,那就检查下吧,看看是否已经修改了

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

http://www.bizhicool.com/

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:\Documents and Settings\Administrator>orapwd file=D:\oracle\product\10.2.0\db_

1\database\PWDdborcl.ora password=aibo entries=5

要注意一下,此时虽然数据库名已经改成dborcl了,但instance_name还是orcl,所以,passwd文件必须跟以前一样。否则会出错。

10. 删除以前的实例orcl

C:\Documents and Settings\Administrator>oradim -delete -sid orcl

实例已删除。

11. 创建新的实例名 dborcl

C:\Documents and Settings\Administrator>oradim -new -sid dborcl -intpwd aibo -st

artmode a -pfile D:\oracle\product\10.2.0\pfile20091022.ora

OPW-00005: 存在相同名称的文件 - 请删除或重命名

实例已创建。

12.

C:\Documents and Settings\Administrator>set oracle_sid=dborcl

C:\Documents and Settings\Administrator>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 10月 22 13:41:12 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> quit

从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options 断开

13.检查服务名

C:\Documents and Settings\Administrator>lsnrctl reload

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-2009 13:4

3:13

Copyright (c) 1991, 2005, Oracle. All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.56)(PORT=1521)))

命令执行成功

C:\Documents and Settings\Administrator>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 10月 22 13:43:21 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 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 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options 断开

检查service是否被更改

C:\Documents and Settings\Administrator>tnsping dborcl

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-

2009 13:50:00

Copyright (c) 1997, 2005, Oracle. All rights reserved.

已使用的参数文件:

D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

已使用 EZCONNECT 适配器来解析别名

Attempting to contact (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:\Documents and Settings\Administrator>lsnrctl reload

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-2009 13:5

0:46

Copyright (c) 1991, 2005, Oracle. All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.56)(PORT=1521)))

命令执行成功

---在测试

C:\Documents and Settings\Administrator>tnsping dborcl

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-

2009 13:52:18

Copyright (c) 1997, 2005, Oracle. All rights reserved.

已使用的参数文件:

D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.

2.56)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dborcl)

))

OK (20 毫秒)

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

参考:http://blog.chinaunix.net/u/1696/showart_1011690.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航