Linux oracle 10g 修改数据库的sid和dbname

来源:互联网 发布:sql必知必会 原书第4版 编辑:程序博客网 时间:2024/05/19 11:46


有时我们需要修改数据库的siddbname,除了使用rman进行备份恢复之外,也可以通过手工方式修改,主要由两个主要过程完成:

1、修改实例名(SID

2、修改数据库名(dbname

 

下面演示将数据库siddbnameorcl修改为jspt的过程:

 

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 - Productionon Sun Dec 20 11:14:49 2009

 

Copyright (c) 1982, 2005, Oracle. Allrights reserved.

 

 

Connected to:

Oracle Database 10g Enterprise EditionRelease 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Miningoptions

 

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 10gEnterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Miningoptions

 

1.3、修改oracle用户的ORACLE_SID环境变量,如由orcl修改为jspt

 

oracle@oracle[/home/oracle]> cat~/.bash_profile|grep -i sid

ORACLE_SID=jspt

export ORACLE_BASE ORACLE_HOME ORACLE_SIDPATH

 

1.4、修改/etc/oratab文件,将sid名由旧的修改为新的,如从orcl修改为jspt

 

oracle@oracle[/home/oracle]> cat/etc/oratab

 

......

 

jspt:/oracle/app/10.1:Y

 

1.5、进入到$ORACLE_HOME/dbs目录

 

将所有文件名中包含原来的sid的修改为对应的新sid

如我对如下文件修改为其后对应的文件

 

hc_orcl.dat->hc_jspt.dat

lkORCL->lkJSPT

orapworcl->orapwjspt

snapcf_orcl.f->snapcf_jspt.f

spfileorcl.ora->spfilejspt.ora

 

1.6、使新修改的ORACLE_SID环境变量生效

 

oracle@oracle[/oracle/app/10.1/dbs]> .~/.bash_profile

oracle@oracle[/oracle/app/10.1/dbs]>echo $ORACLE_SID

jspt

 

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 2011:27 orapwjspt

 

1.8、启动数据库

 

oracle@oracle[/oracle/app/10.1/dbs]>sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.1.0 - Productionon Sun Dec 20 11:29:53 2009

 

Copyright (c) 1982, 2005, Oracle. Allrights 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变成jspt

 

idle> select instance from v$thread;

 

INSTANCE

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

jspt

 

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 jspt

lock_name_space string

log_file_name_convert string

service_names string orcl

 

可以通过如下步骤修改数据库名(dbname

 

2.1、首先切换一下在线日志,使数据库做checkpoint

 

sys@ORCL> alter system archive logcurrent;

 

System altered.

 

2.2、生成重建控制文件的脚本

 

sys@ORCL> alter database backupcontrolfile to trace resetlogs;

 

Database altered.

 

2.3、关闭数据库,需要干净关闭,不能shutdownabort

 

sys@ORCL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

sys@ORCL> exit

Disconnected from Oracle Database 10gEnterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Miningoptions

 

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 713:37 orcl_ora_12020.trc

 

......

 

-rw-r----- 1 oracle oinstall 4407 Dec 2011:36 jspt_ora_7789.trc

 

2.5、将找到的trc文件复制一份,并命名为ccf.sql

 

oracle@oracle[/oracle/admin/orcl/udump]>cp jspt_ora_7789.trc ccf.sql

 

2.6、修改ccf.sql

 

查找STARTUP NOMOUNT语句,将这一行上面的所有行都删除

查找所有以--开始的行,把这些行删除

查找所有的orcl修改为jspt,所有的ORCL修改为JSPT

找到CREATE CONTROLFILE REUSE DATABASE...语句,将其中的REUSE修改为SET

找到RECOVER DATABASE USING BACKUP CONTROLFILE语句,将其用双横线(--)注释掉

如果有精力,可以修改这个脚本中的datafilelogfile部分使用新的文件名称,其实这部分不修改也可以,我为了测试的目的进行了修改,修改后要记得去重命名数据文件和log文件,将对应的数据文件和log文件与这里的名称相对应

 

我修改后的ccf.sql文件内容如下

 

STARTUP NOMOUNT

CREATE CONTROLFILE set DATABASE "jspt"RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '+DATA/jspt/onlinelog/group_1.LOG'SIZE 100M,

GROUP 2 '+DATA/jspt/onlinelog/group_2.LOG'SIZE 100M,

GROUP 3 '+DATA/jspt/onlinelog/group_3.LOG'SIZE 100M,

GROUP 4 '+DATA/jspt/onlinelog/group_4.LOG'SIZE 100M

DATAFILE

'+DATA/jspt/datafile/system01.DBF',

'+DATA/jspt/datafile/undotbs101.DBF',

'+DATA/jspt/datafile/sysaux01.DBF',

'+DATA/jspt/datafile/users01.DBF',

'+DATA/jspt/datafile/example01.DBF',

'+DATA/jspt/datafile/tbs_lmt01.DBF',

'+DATA/jspt/datafile/tbs_lmt_201.DBF',

'+DATA/jspt/datafile/tbs_lmt_301.DBF'

CHARACTER SET ZHS16GBK

;

--RECOVER DATABASE USING BACKUPCONTROLFILE;

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/jspt/tempfile/temp.269.705923003'

SIZE 104857600 REUSE AUTOEXTEND ON NEXT104857600 MAXSIZE 32767M;

 

2.7、修改数据文件、在线日志文件名

 

如果上一步修改了ccf.sql文件中的datafilelogfile段的文件名,这里要将这些文件名重命令为与其一致。

 

2.8、如果归档日志目录名中包含sid,那么修改归档目录名

 

我的测试环境,归档目录使用的是flash_recovery_area,所以需要将这个目录中的ORCL目录重命名为JSPT

 

2.9、使用spfile生成pfile

 

注意这里没有启动数据库,只是链接到idle状态

 

oracle@oracle[/home/oracle]> exportORACLE_SID=jspt

oracle@oracle[/home/oracle]> sqlplus /as sysdba

 

SQL*Plus: Release 10.2.0.1.0 - Productionon Sun Dec 20 11:49:20 2009

 

Copyright (c) 1982, 2005, Oracle. Allrights reserved.

 

Connected to an idle instance.

 

idle> create pfile='?/dbs/initjspt.ora'from spfile;

 

File created.

 

idle> exit

Disconnected from Oracle Database 10gEnterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Miningoptions

 

2.10、进入$ORACLE_HOME/dbs目录

 

2.11、编辑initjspt.ora文件

 

搜索所有的orcl,重命令为jspt,搜索所有的ORCL,重命名为JSPT

 

2.12、删除控制文件

 

将原来的控制文件删除或重命名

控制文件的位置名称可以通过查看2.11步骤中的*.control_files来确定

如果控制文件在ASM中,可以进入asmcmd命令,然后用rm命令删除

 

2.13、进入$ORACLE_BASE/admin目录

 

orcl目录重命名为jspt

 

2.14、使用修改过的pfile生成spfile

 

oracle@oracle[/oracle/admin/jspt/udump]>sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.1.0 - Productionon Sun Dec 20 11:59:56 2009

 

Copyright (c) 1982, 2005, Oracle. Allrights reserved.

 

Connected to an idle instance.

 

idle> create spfile frompfile='?/dbs/initjspt.ora';

 

File created.

 


 

2.15、调用2.6步骤修改好的ccf.sql

 

idle> @/oracle/admin/jspt/udump/ccf.sql

ORACLE instance started.

 

Total System Global Area 167772160 bytes

Fixed Size 1218292 bytes

Variable Size 67111180 bytes

Database Buffers 92274688 bytes

Redo Buffers 7168000 bytes

 

Control file created.

 

 

Database altered.

 

 

Database altered.

 

 

Tablespace altered.

 

2.16、检查数据库状态

 

idle> conn / as sysdba

Connected.

sys@JSPT>select open_mode fromv$database;

OPEN_MODE

----------

READ WRITE

 

sys@JSPT> show parameter name

 

NAME TYPE VALUE

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

db_file_name_convert string

db_name string jspt

db_unique_name string jspt

global_names boolean FALSE

instance_name string jspt

lock_name_space string

log_file_name_convert string

service_names string jspt

 

发现数据库名(db_name)已经修改为jspt

 

ORA-01503: CREATE CONTROLFILE failed

ORA-01990: error opening password file 'dbs/orapw'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

根据错误提示,是缺少密码验证文件,用下面的命令创建密码文件。







$cd$ORACLE_HOME/dbs

orapwd password=oraclefile=orapwjspt



 


0 0