在ORACLE中移動數據庫文件

在ORACLE中移動數據庫文件

在ORACLE中移動數據庫文件

--ORACLE數據庫由數據文件,控制文件和聯機日誌文件三種文件組成。
--由於磁盤空間的變化,或者基於數據庫磁盤I/O性能的調整等,
--我們可能會考慮移動數據庫文件。
--下面以LUNIX平臺爲例,分別討論三種數據庫文件的移動方法。

一.移動數據文件:
-- 可以用ALTER DATABASE,ALTER TABLESPACE兩種方法移動數據文件。

1. ALTER DATABASE方法;
-- 用此方法,可以移動任何表空間的數據文件。

STEP 1. 下數據庫:
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> SHUTDOWN;
SQL> EXIT;

STEP 2.用操作系統命令移動數據文件:
-- 將數據文件 'test.ora' 從/ora/oracle/data1目錄移動到/ora/oracle/data2目錄下:
$ mv /ora/oracle/data1/test.ora /ora/oracle/data2

STEP 3. Mount數據庫,用ALTER DATABASE命令將數據文件改名:
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RENAME FILE '/ora/oracle/data1/test.ora' TO '/ora/oracle/data2/test.ora';

STEP 4. 打開數據庫:.
SQL> ALTER DATABASE OPEN;
SQL>SELECT NAME,STATUS FROM V$DATAFILE;

2. ALTER TABLESPACE方法:
-- 用此方法,要求此數據文件既不屬於SYSTEM表空間,也不屬於含有ACTIVE回滾段或臨時段的表空間。

STEP1. 將此數據文件所在的表空間OFFLINE:
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> ALTER TABLESPACE test OFFLINE;
SQL> EXIT;

STEP2. 用操作系統命令移動數據文件:
將數據文件 'test.ora' 從/ora/oracle/
data1目錄移動到/ora/oracle/data2目錄下:
$ mv /ora/oracle/data1/test.ora /ora/oracle/data2

STEP3. 用ALTER TABLESPACE命令改數據文件名:
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> ALTER TABLESPACE test RENAME DATAFILE '/ora/oracle/data1/test.ora' TO '/ora/oracle/data2/test.ora';

STEP4. 將此數據文件所在的表空間ONLINE:
SQL> ALTER TABLESPACE test ONLINE;
SQL> SELECT NAME,STATUS FROM V$DATAFILE;

二. 移動控制文件:

-- 控制文件 在 INIT.ORA文件中指定。移動控制文件相對比較簡單,下數據庫,
-- 編輯INIT.ORA,移動控制文件,重啓動數據庫。

STEP 1. 下數據庫:
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> SHUTDOWN;
SQL> EXIT;

STEP 2.用操作系統命令 移動控制文件:
--將控制文件'ctl3orcl.ora' 從/ora/oracle/data1目錄移動到/ora/oracle/data2目錄下:
$ mv /ora/oracle/data1/ctrlorcl3.ora /ora/oracle/data2

STEP 3. 編輯INIT.ORA文件:
INIT.ORA文件的在$ORACLE_HOME/dbs目錄下,
修改參數 "control_files",其中指定移動後的控制文件:
control_files = (/ora/oracle/data1/ctrlorcl1.ora,/ora/oracle/data1/ctrlorcl2.ora,/ora/oracle/data2/ctrlorcl3.ora)

STEP 4. 重啓動數據庫:
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> STARTUP;
SQL>SELECT name FROM V$CONTROLFILE;
SQL> EXIT;


三. 移動聯機日誌文件:
STEP 1. 停數據庫:
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> SHUTDOWN;
SQL> EXIT;

STEP 2. 用操作系統命令移動聯機日誌文件:
--將聯機日誌文件'redolog1.ora' 從/ora/oracle/data1目錄移動到/ora/oracle/data2目錄下:
$ mv /ora/oracle/data1/redolog1.ora /ora/oracle/data2

STEP 3. Mount數據庫,用ALTER DATABASE 命令改聯機日誌文件名:.
$ sqlplus /nolog
SQL> CONNECT INTERNAL;
SQL> STARTUP MOUNT ;
SQL> ALTER DATABASE RENAME FILE '/ora/oracle/data1/redolog1.ora' TO '/ora/oracle/data2/redolog1.ora';

STEP 4.重啓動數據庫: .
SQL> ALTER DATABASE OPEN;
SQL>SELECT MEMBER FROM V$LOGFILE;


按Oracle原理,啓動過程分爲三個步驟nomount/mount/open.
PHASE0:nomount前,即數據庫完全關閉了.
此時可以將數據庫control files/data files/redo log files在OS下用mv命令任意移動(實際上,只要未被open的文件都是可以mv的),然後根據各種file location在Oracle中的存放位置,採用不同的方式來告訴Oracle:"偶已將原文件移動到另一個地方了".
其中初始參數文件中的control_files參數指定了具體的control file的location.所以移動了control file可在參數文件被open前直接改參數值Oracle就明白了.(PFILE/SPFILE的具體使用此處不多累贅).

PHASE1:nomount階段. 打開了初始參數文件和backupground_dump_dest下的   alert_sid.log和background processes 的trace files.


PHASE2:mount階段是打開了control file.
control file中存放的東東如下:
• Database name and identifier
• Time stamp of database creation
• Tablespace names
• Names and locations of data files and redo log files
• Current redo log file sequence number
• Checkpoint information
• Begin and end of undo segments
• Redo log archive information
• Backup information
所以偶們在PHASE0中所做操作就得在PHASE3真正open這些文件之前,告訴Oracle(因爲信息記錄在control file中,所以又得在PHASE2中,control file被open後做),偶們已改了file location.
於是可用alter database的data file clause或log file clause的rename 命令來更新control file,於是Oracle會在PHASE3時,到新file location去找相應的文件.

PHASE3:open階段打開所有非offline的data files和redo log files.
因爲文件已打開了.所以此時,只能對已經offline或還可以offline的文件作rename操作.原理也是通過更新control file中的內容來告訴Oracle:File location has been changed.

http://www.cnblogs.com/neozhu/archive/2007/04/25/726903.html


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