資料檔跨目錄/磁碟遷移是 DBA 常態作業。本文以 Oracle 10g/11g/12c/19c 通用的離線移動 + 媒體恢復標準流程為主線,涵蓖錯誤處理、驗證步驟與新版本線上移動特性對比。
-- 1. 離線目標資料檔
ALTER DATABASE DATAFILE '/old/path/ds.dbf' OFFLINE;
-- 2. OS 層複製/移動檔案 (cp/rsync/ASM cp)
$ cp /old/path/ds.dbf /new/path/ds.dbf
-- 3. 更新控制檔指標
ALTER DATABASE RENAME FILE '/old/path/ds.dbf' TO '/new/path/ds.dbf';
-- 4. 嘗試上線 (通常會報 ORA-01113 需媒體恢復)
ALTER DATABASE DATAFILE '/new/path/ds.dbf' ONLINE;
-- ORA-01113: file 5 needs media recovery
-- ORA-01110: data file 5: '/new/path/ds.dbf'
-- 5. 啟用自動恢復並執行媒體恢复
SET AUTORECOVERY ON;
RECOVER DATAFILE 5; -- 文件號來自 V$DATAFILE.FILE#
-- Media recovery complete.
-- 6. 確認上線成功
ALTER DATABASE DATAFILE '/new/path/ds.dbf' ONLINE;
SHUTDOWN IMMEDIATE; STARTUP MOUNT; 再離線。RECOVER DATAFILE <file#> 的編號對應 V$DATAFILE.FILE#,非絕對檔案號 (AFN)。ASMCMD cp 或 DBMS_FILE_TRANSFER。ALTER DATABASE BACKUP CONTROLFILE TO TRACE)。-- 12c 起支援線上移動,無需離線/恢復
ALTER DATABASE MOVE DATAFILE '/old/path/ds.dbf' TO '/new/path/ds.dbf';
-- 可選:REUSE / KEEP / ENCRYPTION OFF 等子句
優勢:零停機、自動處理重做/撤銷、支援跨儲存類型 (檔案系統 ↔ ASM)。前提:資料庫開啟、歸檔模式、目標路徑可寫。
SELECT FILE_NAME, TABLESPACE_NAME FROM DBA_DATA_FILES WHERE FILE_NAME LIKE '%ds.dbf%'; 路徑已更新SELECT STATUS, ENABLED FROM V$DATAFILE WHERE NAME LIKE '%ds.dbf%'; 顯示 ONLINE / READ WRITESELECT * FROM V$RECOVER_FILE; 無殘留需恢復檔案離線移動 + 媒體恢復是通用鐵律流程,掌握其邏輯可應對所有版本。12c+ 環境優先使用 ALTER DATABASE MOVE DATAFILE 實現零停機遷移。無論哪種方式,「備份控制檔、確認歸檔完整、驗證檔案狀態」三步不可省略。