修 改 SID
案例: 舊資料庫(OLDDB)
檔案存放(data files,redo files,control files,temp files, undo files)目錄是
(/u01/OLDDB)
dump檔案目錄是(/u01/dump)
新資料庫(NEWDB)
檔案存放(data files,redo files,control files,temp files, undo files)目錄是
(/u02/NEWDB)
dump檔案目錄是(/u02/dump)
1. 生成舊資料庫初始化參數檔案(init{SID}.ora)和文本格式的控制檔案(control.txt)
create pfile from spfile
alter database backup controlfile to trace as '/tmp/control.txt'
2. 關閉舊資料庫
3. 将舊資料庫存放檔案和dump的目錄移動到新資料庫存放檔案和dump的目錄(如果不更改存放的目錄可以不
執行該步驟)—重命名檔案
mv /u01/OLDDB /u02/NEWDB --資料庫檔案
mv /u01/dump /u02/dump --dump目錄
--重新生成pfile檔案
4. 進入$ORACLE_HOME/dbs目錄,拷貝OLDDB的pfile成NEWDB的pfile,同時修改NEWDB的pfile檔案.
cd $ORACLE_HOME/dbs
cp initOLDDB.ora initNEWDB.ora
修改initNEWDB.ora檔案
a.. db_name和instance_name參數更改成新資料庫的名稱(NEWDB)
b. background_dump_desc,core_dump_desc和user_dump_desc參數更改為新數
據庫存放dump資訊的目錄(/u02/dump)
c. control_files參數指定存放新資料庫的控制檔案目錄及名稱
('/u02/NEWDB/control01.ctl','/u02/NEWDB/control02.ctl')
5. 編輯control.txt檔案,新生成newdb.sql和newdb1.sql檔案
拷貝control.txt檔案中以下行到/tmp/newdb.sql檔案中
---------------
CREATE CONTROLFILE REUSE DATABASE "OLDDB" RESETLOGS NOARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 453
LOGFILE
GROUP 1 '/u01/OLDDB/redo01.log' SIZE 10M,
GROUP 2 '/u01/OLDDB/redo02.log' SIZE 10M,
...
GROUP n '/u01/OLDDB/redo0n.log' SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'/u01/OLDDB/system01.dbf',
'/u01/OLDDB/undotbs01.dbf',
'/u01/OLDDB/indx01.dbf',
'/u01/OLDDB/tools01.dbf',
'/u01/OLDDB/users01.dbf',
'/u01/OLDDB/xdb01.dbf',
...
'/u01/OLDDB/filename.dbf'
CHARACTER SET ZHS16GBK
;
-------------
并修改/tmp/newdb.sql檔案
a. REUSE -> SET
b. OLDDB -> NEWDB
c. 存放目錄 /u01/OLDDB -> /u02/NEWDB(如果不更改存放的目錄可以不執行該步驟)
更改後/tmp/newdb.sql檔案内容如下
重新生成控制檔案
---------------
CREATE CONTROLFILE SET DATABASE "NEWDB" RESETLOGS NOARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 453
LOGFILE
GROUP 1 '/u02/NEWDB/redo01.log' SIZE 10M,
GROUP 2 '/u02/NEWDB/redo02.log' SIZE 10M,
...
GROUP n '/u02/NEWDB/redo0n.log' SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'/u02/NEWDB/system01.dbf',
'/u02/NEWDB/undotbs01.dbf',
'/u02/NEWDB/indx01.dbf',
'/u02/NEWDB/tools01.dbf',
'/u02/NEWDB/users01.dbf',
'/u02/NEWDB/xdb01.dbf',
...
'/u02/NEWDB/filename.dbf'
CHARACTER SET ZHS16GBK
;
-------------
拷貝control.txt檔案中以下行到/tmp/newdb1.sql檔案中
-------------
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/OLDDB/temp01.dbf'
SIZE 524288000 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;
...
ALTER TABLESPACE TEMPn ADD TEMPFILE '/u01/OLDDB/tempn.dbf'
SIZE 524288000 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;
-------------
并修改/tmp/newdb.sql檔案
a. 存放目錄 /u01/OLDDB -> /u02/NEWDB(如果不更改存放的目錄可以不執行該步驟)
更改後/tmp/newdb1.sql檔案内容如下
------------- (增加臨時表空間的資料檔案)
ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/NEWDB/temp01.dbf'
SIZE 524288000 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;
...
ALTER TABLESPACE TEMPn ADD TEMPFILE '/u02/NEWDB/tempn.dbf'
SIZE 524288000 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;
-------------
6. 删除新資料庫pfile檔案(initNEWDB.ora)中control_files參數所指定的控制檔案.
rm /u02/NEWDB/*.ctl (删除原來的控制檔案)
7. 啟動新資料庫(NEWDB)到nomount狀态,使用initNEWDB.ora參數檔案
startup nomount pfile=$ORACLE_HOME/dbs/initNEWDB.ora
8. 執行/tmp/newdb.sql檔案,重建控制檔案
@/tmp/newdb.sql
9. 使用resetlogs選項打開新資料庫(NEWDB)
Alter dabase mount
alter database open resetlogs
10. 執行/tmp/newdb1.sql檔案,重建臨時表空間
@/tmp/newdb2.sql
11. 檢視v$database和v$instance視圖,是不是資料庫名稱已更改
12..profile/.bash_profile檔案
13.Listener.ora,tnsnames.ora檔案修改