由于伺服器更換,或者硬碟損壞等問題,在有些場景下,我們需要對資料庫進行遷移。
Oracle 資料庫有多種備份方式,如果可以停機,建議最好使用冷備的方式,直接遷移資料檔案,這樣效率會比較高。
由于兩台主機都是Windows server,為了友善直接使用複制檔案的方式,由于特殊原因,遷移前的資料目錄和遷移後的資料目錄是不一緻的。直接遷移資料後,啟動會報如下錯誤:
1
2
3
4
5
6
7
8
9
10
<code>SQL> startup</code>
<code>ORACLE 例程已經啟動。</code>
<code>Total System Global Area 1071333376 bytes</code>
<code>Fixed Size 1334380 bytes</code>
<code>Variable Size 301990804 bytes</code>
<code>Database Buffers 754974720 bytes</code>
<code>Redo Buffers 13033472 bytes</code>
<code>資料庫裝載完畢。</code>
<code>ORA-01157: 無法辨別/鎖定資料檔案 1 - 請參閱 DBWR 跟蹤檔案</code>
<code>ORA-01110: 資料檔案 1: </code><code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSTEM01.DBF'</code>
檢視檔案路徑:
<code>SQL> </code><code>select</code> <code>name from </code><code>v</code><code>$controlfile;</code>
<code>NAME</code>
<code>---------------------------------------------------------</code>
<code>F:\APP\ADMINISTRATOR\ORADATA\AGRISK\CONTROL01.CTL</code>
<code>F:\APP\ADMINISTRATOR\ORADATA\AGRISK\CONTROL02.CTL</code>
<code>F:\APP\ADMINISTRATOR\ORADATA\AGRISK\CONTROL03.CTL</code>
<code>SQL> </code><code>select</code> <code>name from </code><code>v</code><code>$datafile;</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSTEM01.DBF</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSAUX01.DBF</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\UNDOTBS01.DBF</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\USERS01.DBF</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK.DBF</code>
<code>SQL> </code><code>select</code> <code>name from </code><code>v</code><code>$tempfile;</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\TEMP01.DBF</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK_TEMP.DBF</code>
<code>SQL> </code><code>select</code> <code>member from </code><code>v</code><code>$logfile;</code>
<code>MEMBER</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO03.LOG</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO02.LOG</code>
<code>D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO01.LOG</code>
停止資料庫:
<code>SQL> </code><code>shutdown</code> <code>immediate;</code>
将原主機上oradata目錄下執行個體的檔案全部拷貝到遷移後的主機對應目錄。然後在新的主機上以mount方式啟動資料庫執行個體:
<code>SQL> startup </code><code>mount</code><code>;</code>
除了控制檔案的路徑是正常的,其他的檔案路徑都需要修改,将原來的錯誤路徑D盤改為F盤:
11
12
13
14
15
16
17
18
19
20
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSTEM01.DBF'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSTEM01.DBF'</code><code>;</code>
<code>資料庫已更改。</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSAUX01.DBF'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\SYSAUX01.DBF'</code><code>;</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\UNDOTBS01.DBF'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\UNDOTBS01.DBF'</code><code>;</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\USERS01.DBF'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\USERS01.DBF'</code><code>;</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK.DBF'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK.DBF'</code><code>;</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\TEMP01.DBF'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\TEMP01.DBF'</code><code>;</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK_TEMP.DBF'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\AGRISK_TEMP.DBF'</code><code>;</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO01.LOG'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO01.LOG'</code><code>;</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO02.LOG'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO02.LOG'</code><code>;</code>
<code>SQL> alter database rename </code><code>file</code> <code>'D:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO03.LOG'</code> <code>to </code><code>'F:\APP\ADMINISTRATOR\ORADATA\AGRISK\REDO03.LOG'</code><code>;</code>
确認修改成功後,啟動資料庫:
<code>SQL> alter database </code><code>open</code><code>;</code>
重新開機資料庫:
<code>資料庫已經關閉。</code>
<code>已經解除安裝資料庫。</code>
<code>ORACLE 例程已經關閉。</code>
<code>資料庫已經打開。</code>
檢視監聽端口。如果沒有配置netca網絡監聽端口,需要使用系統自帶的Net Cofiguration Assistant進行配置。
本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1952754