修改oracle實例名(sid)和數據庫名(db_name)

 修改oracle實例名(sid)和數據庫名(db_name)

有時我們需要修改數據庫的sid和dbname,除了使用rman進行備份恢復之外,也可以通過手工方式修改,主要由兩個主要過程完成:
1、修改實例名(SID)
2、修改數據庫名(dbname)

下面演示將數據庫sid和dbname由orcl修改爲bi118的過程:

 


1、修改實例名(sid)

1.1、檢查原來的數據庫實例名(sid)

oracle@oracle[/home/oracle]> echo $ORACLE_SID
orcl

sys@ORCL> select instance from v$thread;
INSTANCE
--------------------------------------------------------------------------------
orcl


1.2、關閉數據庫

注意不能用shutdown abort,只能是shutdown immediate或shutdown normal
sys@ORCL> shutdown immediate

 

1.3、修改oracle用戶的ORACLE_SID環境變量,如由orcl修改爲bi118

oracle@oracle[/home/oracle]> cat ~/.bash_profile|grep -i sid
ORACLE_SID=bi118
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH


1.4、修改/etc/oratab文件,將sid名由舊的修改爲新的,如從orcl修改爲bi118

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


1.5、進入到$ORACLE_HOME/dbs目錄

將所有文件名中包含原來的sid的修改爲對應的新sid的
如我對如下文件修改爲其後對應的文件
hc_orcl.dat->hc_bi118.dat
lkORCL->lkbi118
orapworcl->orapwbi118
snapcf_orcl.f->snapcf_bi118.f
spfileorcl.ora->spfilebi118.ora


1.6、使新修改的ORACLE_SID環境變量生效
oracle@oracle[/oracle/app/10.1/dbs]> . ~/.bash_profile
oracle@oracle[/oracle/app/10.1/dbs]> echo $ORACLE_SID
bi118


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 orapwbi118


1.8、啓動數據庫
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變成bi118
idle> select instance from v$thread;
INSTANCE
--------------------------------------------------------------------------------
bi118

 


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 bi118
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


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_ora_12020.trc
......
-rw-r----- 1 oracle oinstall 4407 Dec 20 11:36 bi118_ora_7789.trc


2.5、將找到的trc文件複製一份,並命名爲ccf.sql

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


2.6、修改ccf.sql

查找STARTUP NOMOUNT語句,將這一行上面的所有行都刪除
查找所有以--開始的行,把這些行刪除
查找所有的orcl修改爲bi118,所有的ORCL修改爲bi118
找到CREATE CONTROLFILE REUSE DATABASE...語句,將其中的REUSE修改爲SET
找到RECOVER DATABASE USING BACKUP CONTROLFILE語句,將其用雙橫線(--)註釋掉
如果有精力,可以修改這個腳本中的datafile和logfile部分使用新的文件名稱,其實這部分不修改也可以,我爲了測試的目的進行了修改,修改後要記得去重命名數據文件和log文件,將對應的數據文件和log文件與這裏的名稱相對應

我修改後的ccf.sql文件內容如下

STARTUP NOMOUNT
CREATE CONTROLFILE set DATABASE "bi118" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '+DATA/bi118/onlinelog/group_1.LOG' SIZE 100M,
GROUP 2 '+DATA/bi118/onlinelog/group_2.LOG' SIZE 100M,
GROUP 3 '+DATA/bi118/onlinelog/group_3.LOG' SIZE 100M,
GROUP 4 '+DATA/bi118/onlinelog/group_4.LOG' SIZE 100M
DATAFILE
'+DATA/bi118/datafile/system01.DBF',
'+DATA/bi118/datafile/undotbs101.DBF',
'+DATA/bi118/datafile/sysaux01.DBF',
'+DATA/bi118/datafile/users01.DBF',
'+DATA/bi118/datafile/example01.DBF',
'+DATA/bi118/datafile/tbs_lmt01.DBF',
'+DATA/bi118/datafile/tbs_lmt_201.DBF',
'+DATA/bi118/datafile/tbs_lmt_301.DBF'
CHARACTER SET ZHS16GBK
;
--RECOVER DATABASE USING BACKUP CONTROLFILE;
ALTER DATABASE OPEN RESETLOGS;            ----------這行若沒有,可以手動增加上去


2.7、修改數據文件、在線日誌文件名
如果上一步修改了ccf.sql文件中的datafile和logfile段的文件名,這裏要將這些文件名重命令爲與其一致。
因爲我的實驗環境使用了ASM,在Oracle 10.2中ASM中不能重命名和複製文件,我採用了創建別名的方式,操作如下:
oracle@oracle[/oracle/admin/bi118/udump]> export ORACLE_SID=+ASM
oracle@oracle[/oracle/admin/bi118/udump]> sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 12:08:52 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

idle> alter diskgroup data add directory '+data/bi118';

Diskgroup altered.

idle> alter diskgroup data add directory '+data/bi118/DATAFILE';

Diskgroup altered.

idle> alter diskgroup data add alias
2 '+data/bi118/DATAFILE/EXAMPLE01.DBF'
3 for
4 '+data/ORCL/DATAFILE/EXAMPLE.261.705922745';

Diskgroup altered.

......

idle> alter diskgroup data add alias
2 '+data/bi118/DATAFILE/USERS01.DBF'
3 for
4 '+data/ORCL/DATAFILE/USERS.266.705922777';

Diskgroup altered.

idle> alter diskgroup data add directory '+data/bi118/ONLINELOG';

Diskgroup altered.

......

idle> alter diskgroup data add alias
2 '+data/bi118/ONLINELOG/group_4.LOG'
3 for
4 '+data/ORCL/ONLINELOG/group_7.273.705923695';

Diskgroup altered.


2.8、如果歸檔日誌目錄名中包含sid,那麼修改歸檔目錄名
我的測試環境,歸檔目錄使用的是flash_recovery_area,所以需要將這個目錄中的ORCL目錄重命名爲bi118

2.9、使用spfile生成pfile
注意這裏沒有啓動數據庫,只是鏈接到idle狀態

oracle@oracle[/home/oracle]> export ORACLE_SID=bi118
oracle@oracle[/home/oracle]> sqlplus / as sysdba
idle> create pfile='?/dbs/initbi118.ora' from spfile;
File created.


2.10、進入$ORACLE_HOME/dbs目錄

2.11、編輯initbi118.ora文件

搜索所有的orcl,重命令爲bi118,搜索所有的ORCL,重命名爲bi118

2.12、刪除控制文件

將原來的控制文件刪除或重命名
控制文件的位置名稱可以通過查看2.11步驟中的*.control_files來確定
如果控制文件在ASM中,可以進入asmcmd命令,然後用rm命令刪除

2.13、進入$ORACLE_BASE/admin目錄

將orcl目錄重命名爲bi118

2.14、使用修改過的pfile生成spfile
oracle@oracle[/oracle/admin/bi118/udump]> sqlplus / as sysdba
idle> create spfile from pfile='?/dbs/initbi118.ora';
File created.


2.15、調用2.6步驟修改好的ccf.sql
使用了OMF管理的controlfile,因此在重建controlfile之前必須執行下面命令把參數control_files清空,否則重建controlfile失敗

SQL> alter system reset control_files scope=spfile sid='*';

idle> @/oracle/admin/bi118/udump/ccf.sql
ORACLE instance started.
Control file created.


2.16、檢查數據庫狀態
idle> conn / as sysdba
Connected.
sys@bi118>select open_mode from v$database;
OPEN_MODE
----------
READ WRITE

sys@bi118> show parameter name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
db_name string bi118
db_unique_name string bi118
global_names boolean FALSE
instance_name string bi118
lock_name_space string
log_file_name_convert string
service_names string bi118


發現數據庫名(db_name)已經修改爲bi118

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章