有时我们需要修改数据库的siddbname,除了使用rman进行备份恢复之外,也可以通过手工方式修改,主要由两个主要过程完成:
1、修改实例名(SID
2、修改数据库名(dbname
下面演示将数据库siddbnameorcl修改为cnhtm的过程:

1、修改实例名(sid
1.1、检查原来的数据库实例名(sid
oracle@oracle[/home/oracle]> echo $ORACLE_SID
orcl
oracle@oracle[/home/oracle]> sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:14:49 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
sys@ORCL> select instance from v$thread;
INSTANCE
--------------------------------------------------------------------------------
orcl
1.2、关闭数据库
注意不能用shutdown abort,只能是shutdown immediateshutdown normal
sys@ORCL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORCL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
1.3、修改oracle用户的ORACLE_SID环境变量,如由orcl修改为cnhtm
oracle@oracle[/home/oracle]> cat ~/.bash_profile|grep -i sid
ORACLE_SID=cnhtm
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
1.4、修改/etc/oratab文件,将sid名由旧的修改为新的,如从orcl修改为cnhtm
oracle@oracle[/home/oracle]> cat /etc/oratab
......
cnhtm:/oracle/app/10.1:Y
+ASM:/oracle/app/10.1:Y
1.5、进入到$ORACLE_HOME/dbs目录
将所有文件名中包含原来的sid的修改为对应的新sid
如我对如下文件修改为其后对应的文件
数据库实例名是什么意思
hc_orcl.dat->hc_cnhtm.dat
lkORCL->lkCNHTM
orapworcl->orapwcnhtm
snapcf_orcl.f->snapcf_cnhtm.f
a-&a
1.6、使新修改的ORACLE_SID环境变量生效
oracle@oracle[/oracle/app/10.1/dbs]> . ~/.bash_profile
oracle@oracle[/oracle/app/10.1/dbs]> echo $ORACLE_SID
cnhtm
1.7、重建口令文件
因为口令文件改名后不能在新实例中使用,所以重建
oracle@oracle[/oracle/app/10.1/dbs]> orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5 force=y
oracle@oracle[/oracle/app/10.1/dbs]> ls -lrt orapw*
-rw-r----- 1 oracle oinstall 2048 Dec 20 11:27 orapwcnhtm
1.8、启动数据库
oracle@oracle[/oracle/app/10.1/dbs]> sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:29:53 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
idle> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218292 bytes
Variable Size 62916876 bytes
Database Buffers 96468992 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.
1.9、检查数据库实例名
通过如下语句检查数据库实例名,发现实例名已经由orcl变成cnhtm
idle> select instance from v$thread;
INSTANCE
--------------------------------------------------------------------------------
cnhtm
2、修改数据库名(dbname
虽然已经修改过了实例名(sid),但是数据库的名称(dbname还是原来的名称orcl
idle> conn / as sysdba
Connected.
sys@ORCL> 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 cnhtm
lock_name_space string
log_file_name_convert string
service_names string orcl
可以通过如下步骤修改数据库名(dbname
2.1、首先切换一下在线日志,使数据库做checkpoint
sys@ORCL> alter system archive log current;
System altered.
2.2、生成重建控制文件的脚本
sys@ORCL> alter database backup controlfile to trace resetlogs;
Database altered.
2.3、关闭数据库,需要干净关闭,不能shutdown abort
sys@ORCL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORCL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
2.4、进入$ORACLE_BASE/admin/<sid>/udump目录中,到最新生成的trc文件,这就是重建控制文件的脚本
oracle@oracle[/oracle/admin/orcl/udump]> ls -lrt
total 2608
-rw-r----- 1 oracle oinstall 577 Nov 7 13:37 orcl_
......
-rw-r----- 1 oracle oinstall 4407 Dec 20 11:36 cnhtm_
2.5、将到的trc文件复制一份,并命名为ccf.sql
oracle@oracle[/oracle/admin/orcl/udump]> cp cnhtm_ ccf.sql
2.6、修改ccf.sql