天天看点

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