當資料庫體量龐大、資料檔案高達數百 GB 甚至 TB 級時,傳統的匯出/匯入不僅耗時極長,更容易遭遇空間不足、網路中斷等風險。此時,利用作業系統層級的複製指令,配合冷備份或熱備份策略,直接搬移實體檔案,往往是最高效、風險最低的選擇。本文以 RedHat Fedora Core 1 上的 Oracle 9.2.0.1 為例,詳細記錄跨伺服器、跨目錄結構的完整遷移流程,原理同樣適用於其他 Unix/Linux 平台及 Oracle 版本。
在 Server B 上僅安裝 Oracle 軟體(不建立資料庫),並從 Server A 複製環境變數設定檔,修改其中的 $ORACLE_HOME 路徑指向新位置。
若來源端使用 SPFILE,需先轉換為 PFILE:
CREATE PFILE FROM SPFILE;
執行 SHUTDOWN IMMEDIATE 乾淨關閉。若業務不允許停機,需改用線上熱備份(資料庫必須處於 ARCHIVELOG 模式),原理類似,本文不贅述。
使用 OS 指令複製下列所有檔案:
透過 FTP 或 scp 將備份檔上傳至 Server B 對應路徑。雖然邏輯目錄結構保持一致,但實體路徑已變更(如 /oracle → /u01/oracle),若目標端缺少對應目錄需手工建立。
編輯上傳的 init
SQLPLUS "/ AS SYSDBA" 進入後,資料庫處於閒置狀態。
CREATE SPFILE FROM PFILE;
STARTUP MOUNT;
控制檔內記錄的是舊路徑,必須逐一重命名。可透過 SPOOL 產生腳本批次執行:
ALTER DATABASE RENAME FILE '/Oracle/oradata/oraLinux/system01.dbf'
TO '/u01/Oracle/oradata/oraLinux/system01.dbf';
對所有資料檔、線上日誌檔重複此操作。
ALTER DATABASE OPEN; 此時資料庫已可正常存取。
因暫存檔未複製,需手工加入:
ALTER TABLESPACE TEMP ADD TEMPFILE
'/u01/Oracle/oradata/oraLinux/temp01.dbf' SIZE 20M;
全程務必確保檔案權限、擁有者一致;遷移後執行完整性檢查與效能基準測試;若採用熱備份遷移,別忘了套用歸檔日誌以達一致性復原點。