oracle更改数据库名

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

 


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

 

---end----

你可能感兴趣的:(oracle,sql,数据库,String,service,database)