1 Oracle 数据库迁移的基本知识
Oracle数据库数据迁移可以从一个版本迁移到另一个版本(即升级),也可以从一个主版本迁移到另一个主版本(即移植),例如从Oracle7迁移到Oracle8;可以从一个系统平台迁移到另一个系统平台,例如从Windows系统迁移到Linux系统;也可以从非Oracle数据库迁移到Oracle数据库,例如从MS SQL Server迁移到Oracle数据库。
在低版本数据库向高版本数据库转换以及两个不同数据库之间进行转换时,数据库中的数据(包括结构定义)需要被转移并使之正常运行,对于中小型数据库,如FoxPro中的*.dbf,这种迁移非常简单,一般只需通过简单的Copy就能完成,但对于大型数据库系统,如Oracle数据库,数据迁移就不那么简单了,它需要利用一定的技术和经验,有步骤按计划地完成。
2 Oracle数据库迁移的步骤
数据迁移的一般步骤如下:
(1)准备实施数据迁移;
(2)正式实施数据迁移前还需要做好以下几个方面工作:进行完全数据备份、确定数据迁移方案、安装和配置软硬件等。
(3)正式实施数据迁移;
(4)按照确定的数据迁移方案,正式实施数据迁移。
(5)测试数据迁移效果;
(6)按照数据迁移测试方案测试数据迁移效果,并对数据迁移后的数据库参数和性能进行调整,使之满足数据迁移后实际应用系统的需要。
(7)移植系统应用软件;
(8)将实际应用系统的应用软件移植到数据迁移后的数据库系统上,并使之正常运行。
(9)正式运行应用系统;
(10)在正式实施数据迁移成功并且数据库参数和性能达到要求后,就可以正式运行应用系统,并投入实际使用。

3 Oracle数据库迁移的两种方法
数据库迁移一般有以下几种简单实用的方法:
方法一:导入/导出工具(Export/Import)
Oracle导入/导出工具(Export/Import)主要是用来对数据库进行逻辑备份,利用Export导出数据库的转储二进制文件作为数据库Import输入,从而达到移植的目的。有二个规则可以参考:
规则一:从Oracle低版本的Export数据可以Import到Oracle高版本中,但限于Oracle的相邻版本。当在不相邻的主要版本之间迁移数据(例如,从Oracle 6到Oracle 8)时,应先将数据导入到中间版本(本例中是Oracle 7),然后再从这个版本的数据库导入更新到主要版本(Oracle 8)。
规则二:Oracle的Export/Import工具只能连接到拥有更高或者一样的Export/Import版本的数据库。如Oracle 8.0.5的Export/Import (版本8.0.5)可连接到Oracle 8.1.6数据库(版本8.1.6);低版本的Export导出来的转储文件,高版本的
Import可以进行读取。
    当需要从一个非PC的系统平台迁移数据库时,导入/导出方式是一种非常有用的策略,当然相同系统平台的数据迁移导入/导出方式同样适用。采用导入/导出方式迁移Oracle8l7 for Windows2000到Oracle8l7 for Linux数据库的一般步骤是
    以正常方式关闭Windows2000系统的Oracle817数据库系统,不要立即终止或者异常终止,然后冷备份数据库。打开数据库,使用导出工具(Export Utility)进行数据库的完全导出。
D:\>exp system/manager full=y inctype=complete constraints=y
file=full_exp_filename.dmp
    在RedFlag-Linux DC4.0系统上安装Oracle8i数据库软件并创建启动数据库。
    使用FTP,将文件传输到RedFlag.Linux DC4.0计算机。必须使用FTP的binary传输模式,否则,可能造成读导出转储文件错误。
   在RedFlag-Linux DC4.0中使用安装数据时创建的0racle用户登录,使用导出转储文件,执行到目标数据库完全的导入。
    【Oracle@RedFlagDC Oracle】#imp system/manager full=y file=full_exp_filename.dmp
    注:如果导出用户拥有DBA权限,则导入用户也必须拥有DBA权限。查看导入日志文件,确认数据库导入执行成功。
    方法二:SQL*Loader工具
SQL*Loader可以将ASCII文件中的数据装入Oracle数据库。ASCII文件中的信息可以来自不同的数据源,例如其他Oracle数据库、非Oracle数据库以及电子表格等。这个方法还适合数据有汉字而字符集不符的情况。
采用SQL Loader工具将数据迁到Oracle数据库的一般步骤有:
在Windows2000操作系统端,进入SQL*PLUS运行脚本程序如loaddata.sql sqlplus>@loaddata.sql
通过loaddata.sql脚本程序建立一个不带换码符、标题、字段名的纯数据文件,便于sql*load使用,基本内容如下:
    spool a.txt(将查询结果存入文件a.txt)
set newpage 0(发送换页,清屏)
set space 0(设置输出列间空格数)
set linesize 999(一行上显示的字符数)
set pagesize 0(禁止各种格式化信息,如标题、页中断、题目等)
set echo off(禁止列出命令)
set feedback of(禁止显示查询结果的记录数信息)
set heading off(禁止打印列标题)
select * from a:
spool out(停止假脱机)
安装Oracle8i数据库,并创建一个数据库作为目标数据库。
添加所需的表空间和用户到目标数据库中;安装所需的Net8软件,并配置用于连接数据库的别名。
使用文本文件编辑器创建控制文件如dataload.ctl。
在命令行下使用sqlldr命令装载数据文件。
Sqlldr username/password control=dataload.ctl logfile= dataload.1og
验证数据是否正确装载。
利用Oracle的Oracle导入/导出工具(Export/Import)除了可进行数据库逻辑备份、数据库移植,还可以用来提高数据库的性能:对数据库进行一次导入/导出操作能重新组织数据,消除数据库的碎片,从而使数据库的性能有较大的提高;而SQL*Loader是一个ORACLE的类属实用程序,几乎能被用来装载任何类型的数据,支持直接路径装载和并行装载能力,因此,上面的在实际工作中运用的这两种方法是非常通用和实用的程序。
4 小结
以上两种方法都可以实现Oracle数据库的迁移工作,但是第二种方法不如第一种方法采用全表导入导出的方式简单,因此我们在实际应用中最终采用了第一种方法,完成了我们单位数据库由Oracle817 for Windows2000到Oracle817 for Linux数据迁移工作。

文章如转载,请注明转载自:http://www.5iadmin.com/post/125.html