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
C:\ORA8\ORADATA\ORACLE\ → D:\ORADATA\)C:\> SVRMGR30
SVRMGR> CONNECT INTERNAL
SVRMGR> SHUTDOWN IMMEDIATE
-- 等待 "Database closed. Database dismounted. ORACLE instance shut down."
SVRMGR> EXIT
注意:11g+ 建議用 SQL*Plus:
SQLPLUS / AS SYSDBA→SHUTDOWN IMMEDIATE
-- 以系統管理員身份執行
COPY "C:\ORA8\ORADATA\ORACLE\USERS01.DBF" "D:\ORADATA\USERS01.DBF"
-- 依序複製所有需遷移的檔案
-- 建議用 Robocopy 含驗證:robocopy "C:\ORA8\ORADATA\ORACLE" "D:\ORADATA" USERS01.DBF /COPY:DAT /V
C:\> SVRMGR30
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."
-- 依序執行所有檔案的 RENAME
SVRMGR> ALTER DATABASE OPEN;
SVRMGR> EXIT
SQL> SELECT FILE_NAME FROM SYS.DBA_DATA_FILES;
-- 確認所有檔案路徑已更新為 D:\ORADATA\...
SQL> SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES;
-- 確認所有表空間 ONLINE
-- 檢查 Alert Log 無錯誤
-- 測試應用連線正常
| 風險點 | 說明 | 預防措施 |
|---|---|---|
| 檔案鎖定無法複製 | 資料庫未完全關閉、防毒軟體掃描、備份軟體持有句柄 | SHUTDOWN IMMEDIATE 確認實例關閉、暫停防毒/備份軟體、用 Handle 工具檢查 |
| 路徑拼寫錯誤 | RENAME FILE 路徑錯誤導致開啟失敗 | 複製貼上路徑、雙人核對、先測試單一檔案 |
| 權限不足 | Oracle 服務帳戶無目標目錄讀寫權限 | 確保目標目錄 Oracle 服務帳戶有 Full Control |
| 控制檔未同步 | 未執行 RENAME FILE 直接啟動 | 嚴格遵循 MOUNT → RENAME → OPEN 流程 |
| 臨時表空間檔案 | TEMP 檔案遷移同樣適用,但也可直接刪除重建 | TEMP 檔案較小可考慮 DROP/CREATE TEMPORARY TABLESPACE |
| Redo Log / Control File | 本文僅涵蓋資料檔,Redo/Control 遷移步驟不同 | Redo Log 需 ALTER DATABASE RENAME FILE + 參數檔修改;Control File 需特殊流程 |