資料成長導致系統盤空間不足時,需將 Oracle 資料檔離線移動至大容量磁碟。本文以 Windows + Oracle 8i 為例,演示從 C:\ORA8\ORADATA\ORACLE\ 移動至 D:\ORADATA\ 的標準化流程:查詢檔案清單 → 關庫 → 複製檔案 → MOUNT 狀態 RENAME → 開庫驗證。
SQL> SELECT file_name FROM sys.dba_data_files;
FILE_NAME
--------------------------------------------------------
C:\ORA8\ORADATA\ORACLE\USERS01.DBF
C:\ORA8\ORADATA\ORACLE\DR01.DBF
C:\ORA8\ORADATA\ORACLE\TOOLS01.DBF
C:\ORA8\ORADATA\ORACLE\INDX01.DBF
C:\ORA8\ORADATA\ORACLE\RBS01.DBF
C:\ORA8\ORADATA\ORACLE\TEMP01.DBF
C:\ORA8\ORADATA\ORACLE\SYSTEM01.DBF
記錄 7 個檔案完整路徑與檔名。
以 USERS01.DBF 為例,其他檔案重複此流程。
C:\> svrmgrl
SVRMGR> CONNECT INTERNAL
SVRMGR> SHUTDOWN IMMEDIATE
-- 等待提示:Database closed. Database dismounted. ORACLE instance shut down.
SVRMGR> EXIT
COPY C:\ORA8\ORADATA\ORACLE\USERS01.DBF D:\ORADATA\USERS01.DBF
建議複製而非移動,驗證成功後再刪除來源。
C:\> svrmgrl
SVRMGR> CONNECT INTERNAL
SVRMGR> STARTUP MOUNT
-- 等待提示:Database mounted.
SVRMGR> ALTER DATABASE RENAME FILE
'C:\ORA8\ORADATA\ORACLE\USERS01.DBF'
TO 'D:\ORADATA\USERS01.DBF';
-- 提示:Statement processed.
SVRMGR> ALTER DATABASE OPEN;
SVRMGR> EXIT
SQL> SELECT file_name FROM sys.dba_data_files WHERE tablespace_name = 'USERS';
FILE_NAME
------------------------------
D:\ORADATA\USERS01.DBF
-- 1. 產生 RENAME 腳本
SELECT 'ALTER DATABASE RENAME FILE ''' || file_name || ''' TO ''' ||
REPLACE(file_name, 'C:\ORA8\ORADATA\ORACLE\', 'D:\ORADATA\') || ''';'
FROM sys.dba_data_files
SPOOL rename_files.sql
-- 2. 關庫 → 複製所有檔案 → MOUNT → 執行 rename_files.sql → OPEN
CONTROL_FILES 參數並重啟)ALTER TABLESPACE TEMP ADD TEMPFILE ...),無需 RENAMEDB_CREATE_FILE_DEST 參數遷移ALTER DATABASE MOVE DATAFILE 'old_path' TO 'new_path'; -- 線上移動,無需關庫
資料檔遷移 = 一致性關閉 → 檔案複製 → 元資料更新 → 一致性開啟。Windows 平台用 SVRMGR (8i/9i) 或 SQL*Plus (10g+),核心邏輯不變。備份驗證是最後防線,遷移未備份等於裸奔。