使用原始數據文件將數據庫複製到另一台伺服器
我正在嘗試使用原始數據文件將伺服器 1的數據庫複製到伺服器 2 。我正在使用 Linux 7 和 Oracle 11g R2。我在伺服器 2中使用相同的 SID 執行實例,但文件結構不同。該數據庫約為 85 GB。我有數據文件、控製文件、redolog 文件、spfile 和 init.ora。有人可以向我解釋以這種方式複製的方法嗎?
可以使用 rman 來複製數據庫。這是數據庫備份和恢復使用者指南。
但是現在讓我們假設您有這些文件的副本,這些文件是在數據庫關閉時製作的,並且已經復製到目標系統的位置。
在目標伺服器 1 上,您擁有與源伺服器 1 上相同類型的作業系統。在目標伺服器上,您擁有與源伺服器上相同更新檔級別的相同 Oracle 版本。您可以通過設置 oracle 環境並執行命令來檢查這一點
$ORACLE_HOME/OPatch/opatch lsinventory
並比較兩台伺服器的輸出。
如果您沒有合適的環境,您可以使用 Oracle Universal Installer 從源伺服器複製 Oracle 軟體。
因此,假設您安裝了正確的軟體並設置了目標伺服器的 Oracle 實例的正確環境。
如果你
startup nomount
在 sqlplus 中做一個數據庫會發生什麼?sqlplus 首先搜尋
${ORACLE_HOME}/dbs/pfile${ORACLE_SID}.ora
如果這樣的文件不存在,它會搜尋
${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
並使用此文件中給出的參數啟動 oracle。我對此不是 100% 確定的。也許 sqlplus 啟動 oracle 執行檔並且 oracle 執行檔搜尋這些文件。但這對我們的目的無關緊要。
所以這些文件的參數應該有合理的值。這意味著,這些文件中的路徑應該指向正確的文件。
如果沒有,您必須更改它們。可以使用文本編輯器修改 init.ora 文件。必須通過執行將 spfile 轉換為 init.ora 文件
create pfile='/tmp/myfile.txt' from spfile='&absolute_spfile_path';
在實例未執行時在 sqlplus 中。
&absolute_spfile_path
必須用正確的路徑代替。然後您可以
/tmp/myfile.tx
使用文本編輯器編輯文件。您可以更改路徑,如果文件中包含實例名稱,則也必須對其進行修改。可以調整記憶體參數。實例寫入的下劃線參數應該被刪除,例如’_sga_target’和類似的參數。然後通過發出創建修改後的 spfile
create spfile='&absolute_spfile_path' from pfile='/tmp/myfile.txt';
在開始之前,您可以復製文件,以便在出現問題時重新開始。
複製 init.ora 和 spfile.ora、控製文件、重做日誌文件以及 SYS、SYSAUX 和 undo 表空間的數據文件。其餘表空間的數據文件使用適當的 Linux 命令(chmod)只讀,因此它們不能被 oracle 修改。源數據庫不需要臨時文件。
現在您可以使用
startup mount
如果一切正常,請檢查警報日誌。如果有錯誤,則修復它們。
如果一切正常,則掛載數據庫
alter database mount;
現在讀取控製文件。您現在可以重命名所有文件。在控製文件中儲存了它們的舊名稱。如果你做一個,你可以看到這個
select name from v$datafile;
發出一個
alter database rename file '&old_name' to '&new_name';
直到所有數據文件都被刪除。
可以使用相同的命令重命名日誌文件。
select member from v$logfile;
顯示控製文件中重做日誌文件的名稱。
您可以將臨時文件離線以避免打開數據庫時出現錯誤消息
select name from v$tempfile;
然後顯示臨時文件的名稱。
alter database '&tempfileName' offline;
使文件離線。
現在可以打開數據庫了
alte database open;
現在將具有正確路徑和大小的新臨時文件添加到臨時表空間。
alter tablespace TEMP add tempfile ...;
然後刪除舊的
alter tablespace TEMP drop tempfile ...;
如果您已將數據文件設為只讀,然後關閉數據庫,則將文件設為讀/寫並再次啟動數據庫。
現在你完成了。
作為旁注,如果您想複製所有文件,停止數據庫不是“必須”的,您可以使用:
改變數據庫開始備份;
{複製數據文件}
更改數據庫結束備份;
這樣,您將擁有可用的數據庫,並且您將能夠複製數據文件並按照之前解釋的方式進行複製。