隨著資料量增長或存儲架構調整(如遷移至 ASM、新掛載點、不同磁碟陣列),資料檔遷移是 DBA 必備技能。本文系統梳理歸檔模式與非歸檔模式下的標準遷移流程,並給出生產環境可直接套用的 SQL 腳本模板。
Oracle 控制檔記錄資料檔的絕對路徑。遷移本質上是:
.dbf 實體檔案。MOUNT 狀態下,執行 ALTER DATABASE RENAME FILE '舊路徑' TO '新路徑' 更新控制檔指針。OPEN 資料庫驗證。關鍵點:必須在 MOUNT 狀態下執行 RENAME,OPEN 狀態下會報
ORA-01511;非歸檔模式無需歸檔日志支援,但需確保檔案一致性(冷備份前提)。
-- 1. 查詢當前資料檔路徑
SELECT file_name FROM dba_data_files;
-- 2. 確認歸檔模式
ARCHIVE LOG LIST;
-- Database log mode: Archive Mode
-- 3. 將目標表空間設為 READ ONLY(保證複製期間數據不變,可選但推薦)
ALTER TABLESPACE users READ ONLY;
-- 4. OS 層複製檔案
# cp /u01/oradata/orcl/users01.dbf /u02/oradata/orcl/users01.dbf
-- 5. 設為 OFFLINE(釋放鎖定)
ALTER TABLESPACE users OFFLINE;
-- 6. 更新控制檔指針
ALTER DATABASE RENAME FILE
'/u01/oradata/orcl/users01.dbf'
TO '/u02/oradata/orcl/users01.dbf';
-- 7. 設為 ONLINE
ALTER TABLESPACE users ONLINE;
-- 8. 恢復 READ WRITE
ALTER TABLESPACE users READ WRITE;
-- 9. 驗證
SELECT file_name FROM dba_data_files WHERE tablespace_name='USERS';
-- 1. 確認非歸檔模式
ARCHIVE LOG LIST;
-- Database log mode: No Archive Mode
-- 2. 關閉資料庫
SHUTDOWN IMMEDIATE;
-- 3. OS 層複製檔案
# cp /opt/oracle/test.dbf /opt/oracle/oradata/conner/test.dbf
-- 4. 啟動至 MOUNT
STARTUP MOUNT;
-- 5. 更新控制檔
ALTER DATABASE RENAME FILE
'/opt/oracle/test.dbf'
TO '/opt/oracle/oradata/conner/test.dbf';
-- 6. 開啟資料庫
ALTER DATABASE OPEN;
-- 6. 驗證
SELECT name FROM v$datafile;
SYSTEM/SYSAUX/UNDO 表空間無法 OFFLINE,需在 MOUNT 狀態直接 RENAME:
SHUTDOWN IMMEDIATE;
# cp /u01/oradata/orcl/system01.dbf /u02/oradata/orcl/system01.dbf
STARTUP MOUNT;
ALTER DATABASE RENAME FILE '/u01/oradata/orcl/system01.dbf' TO '/u02/oradata/orcl/system01.dbf';
ALTER DATABASE OPEN;
-- 1. 查詢當前日志組
SELECT group#, member FROM v$logfile;
-- 2. 新增目標路徑日志成員
ALTER DATABASE ADD LOGFILE MEMBER '/u02/oradata/orcl/redo01b.log' TO GROUP 1;
ALTER DATABASE ADD LOGFILE MEMBER '/u02/oradata/orcl/redo02b.log' TO GROUP 2;
ALTER DATABASE ADD LOGFILE MEMBER '/u02/oradata/orcl/redo03b.log' TO GROUP 3;
-- 3. 切換日志使新成員生效
ALTER SYSTEM SWITCH LOGFILE; -- 執行多次直到所有組切換
-- 4. 刪除舊成員
ALTER DATABASE DROP LOGFILE MEMBER '/u01/oradata/orcl/redo01a.log';
...
-- 1. 關閉庫
SHUTDOWN IMMEDIATE;
-- 2. 複製控制檔到新位置
# cp /u01/oradata/orcl/control01.ctl /u02/oradata/orcl/control01.ctl
# cp /u01/oradata/orcl/control02.ctl /u02/oradata/orcl/control02.ctl
-- 3. 修改參數檔
*.control_files='/u02/oradata/orcl/control01.ctl','/u02/oradata/orcl/control02.ctl'
-- 4. 啟動
STARTUP
SELECT file_name FROM dba_data_files; 路徑全正確。SELECT tablespace_name, status FROM dba_tablespaces; 全部 ONLINE。SELECT * FROM v$recover_file; 無需恢復的檔案。RMAN VALIDATE DATABASE 確認無壞塊。ORA-01157/ORA-01110 錯誤。| 錯誤碼 | 原因 | 解決 |
|---|---|---|
| ORA-01511 | OPEN 狀態執行 RENAME | SHUTDOWN → STARTUP MOUNT → RENAME |
| ORA-01157 | 檔案路徑不存在/權限不足 | 檢查 OS 路徑、擁有者 oracle:oinstall、權限 660 |
| ORA-01110 | 伴隨 1157 的具體檔案提示 | 同上 |
| ORA-01276 | 非歸檔模式嘗試熱遷移 | 必須冷備份/關庫遷移 |
生產環境遷移前,務必執行 RMAN 完整備份 並驗證可恢復。遷移操作建議在維護窗口、雙人核對腳本、保留回滾方案(保留舊檔案 24h)下進行。