天天看點

Oracle 11g 資料庫遷移

由于伺服器更換,或者硬碟損壞等問題,在有些場景下,我們需要對資料庫進行遷移。

Oracle 資料庫有多種備份方式,如果可以停機,建議最好使用冷備的方式,直接遷移資料檔案,這樣效率會比較高。

由于兩台主機都是Windows server,為了友善直接使用複制檔案的方式,由于特殊原因,遷移前的資料目錄和遷移後的資料目錄是不一緻的。直接遷移資料後,啟動會報如下錯誤:

1

2

3

4

5

6

7

8

9

10

<code>SQL&gt; 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&gt; </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&gt; </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&gt; </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&gt; </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&gt; </code><code>shutdown</code> <code>immediate;</code>

将原主機上oradata目錄下執行個體的檔案全部拷貝到遷移後的主機對應目錄。然後在新的主機上以mount方式啟動資料庫執行個體:

<code>SQL&gt; startup </code><code>mount</code><code>;</code>

除了控制檔案的路徑是正常的,其他的檔案路徑都需要修改,将原來的錯誤路徑D盤改為F盤:

11

12

13

14

15

16

17

18

19

20

<code>SQL&gt; 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&gt; 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&gt; 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&gt; 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&gt; 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&gt; 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&gt; 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&gt; 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&gt; 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&gt; 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&gt; 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