1、Oracle数据迁移技术和方案姓 名: 学 号: 指导老师: 系 名: 软件学院 专 业: 计算机科学和技术 班 级: 11级12班 5月21日目录摘要- 1 -第1章 ORACLE数据迁移技术- 1 -1.1 数据迁移技术- 1 -1.2 数据迁移通常步骤- 1 -1.3 Oracle数据迁移方法- 3 -第2章 ORACLE数据迁移方案- 6 -2.1使用可移动表空间- 6 -2.2数据泵导出和导入工具- 6 -2.3拖出表空间- 7 -第3章 总结- 8 -摘要在企业级应用系统中,新系统开发,新旧系统升级换代,和正常系统维护,不可避免地包含到大量迁移工作。而在一个以数据为关键业务系统中,
2、数据迁移更是无处不在。比如:在以数据仓库为架构原型系统设计中,ETL(抽取,转换,装载)部分实现就是一个数据迁移;对大型数据系统分布式实施,数据迁移就是整个实施过程关键部分。而在实践中,渐进式数据库开发,更是包含到大量数据迁移和同时工作。Oracle数据库是当今世界上应用访问最为广泛数据库之一,是关系型数据库创作者,也是用户/服务器结构、分布式数据库和网格计算提倡者和领导者。基于Oracle数据库平台商品化应用软件包,已经广泛应用于中国政府部门、电信、邮政、公安、金融、保险、能源电力、交通、科教、石化、航空航天、民航等各行各业,当这些系统进行系统升级时,不可避免要进行数据迁移,所以研究Orac
3、le环境数据迁移很有价值。第1章 Oracle数据迁移技术1.1 数据迁移技术 数据迁移(又称分级存放管理,hierarchical storage management,hsm)是一个将离线存放和在线存放融合技术。它将高速、高容量非在线存放设备作为磁盘设备下一级设备,然后将磁盘中常见数据按指定策略自动迁移到磁带库(简称带库)等二级大容量存放设备上。当需要使用这些数据时,分级存放系统会自动将这些数据从下一级存放设备调回到上一级磁盘上。对于用户来说,上述数据迁移技术操作完全是透明,只是在访问磁盘速度上略有怠慢,而在逻辑磁盘容量上显著感觉大大提升了。通俗地讲,数据迁移技术是一个能够把大量不常常访问
4、数据存放在带库、盘库等离线介质上,只在盘阵上保留少许访问频率高数据技术。当那些磁带等介质上数据被访问时,系统自动把这些数据回迁到盘阵中;一样,盘阵中很久未访问数据被自动迁移到磁带介质上,从而大大降低投入和管理成本。 1.2 数据迁移通常步骤 在开发环境向运行环境转换、低版本数据库向高版本数据库转换和两个不一样数据库之间进行转换时,数据库中数据(包含结构定义)需要被转移并使之正常运行,这就是数据库中数据迁移。对于中小型数据库,如Foxpro中.dbf,这种迁移很简单,通常只需经过简单Copy就能完成。但对于大型数据库系统,如Oracle 数据库,数据迁移就不那么简单了,它需要利用一定技术和经验,
5、有步骤按计划地完成。 对数据库管理人员来说,数据库数据迁移极具挑战性,一旦方法不妥,珍贵数据资源将面临丢失危险,要成功地实现数据库数据平滑迁移,需要周密计划和充足准备,并根据一定步骤来完成。 1.设计数据迁移方案 设计数据迁移方案关键包含以下多个方面工作:研究和数据迁移相关资料,或在网站上查询相关内容、评定和选择数据迁移软硬件平台、选择数据迁移方法、选择数据备份和恢复策略、设计数据迁移和测试方案等。 2.进行数据模拟迁移 依据设计数据迁移方案,建立一个模拟数据迁移环境,它既能仿真实际环境又不影响实际数据,然后在数据模拟迁移环境中测试数据迁移效果。数据模拟迁移前也应按备份策略备份模拟数据,方便数
6、据迁移后能按恢复策略进行恢复测试。 3.测试数据模拟迁移 依据设计数据迁移测试方案测试数据模拟迁移,也就是检验数据模拟迁移后数据和应用软件是否正常,关键包含:数据一致性测试、应用软件实施功效测试、性能测试、数据备份和恢复测试等。 4.准备实施数据迁移 数据模拟迁移测试成功后,在正式实施数据迁移前还需要做好以下多个方面工作:进行完全数据备份、确定数据迁移方案、安装和配置软硬件等。 5.正式实施数据迁移 根据确定数据迁移方案,正式实施数据迁移。 6.测试数据迁移效果 根据数据迁移测试方案测试数据迁移效果,并对数据迁移后数据库参数和性能进行调整,使之满足数据迁移后实际应用系统需要。 7.移植系统应用
7、软件 将实际应用系统应用软件移植到数据迁移后数据库系统上,并使之正常运行。 8.正式运行应用系统 在正式实施数据迁移成功而且数据库参数和性能达成要求后,就能够正式运行应用系统,并投入实际使用。 1.3 Oracle数据迁移方法 Oracle数据库系统本身提供了实现Oracle数据库数据迁移多个工具,我们还能够利用PowerBuilder数据管道功效实现Oracle数据库数据迁移。,以下介绍能够实现数据库数据迁移多个方法:移植实用程序(Migration Utility),Oracle 数据移植助理(Oracle data Migration Assistant),导入/导出工具(Export/
8、Import),SQlLoader工具,SQLPLUS COPY 命令,PowerBuilder数据管道工具(Pipeline)。1:移植实用程序(Migration Utility) MIG是Oracle提供用于Oracle数据库之间数据迁移命令行方法实用程序。使用MIG迁移Oracle7数据到Oracle8i通常步骤为: 设置 Oracle7数据库环境变量,包含运行注册表编辑器(regedit.exe)和控制面板,设置Oracle7主目录、字符集和可实施文件路径等,并在DOS 命令提醒符下设置Oracle_sid=Oracle7_sid,并正常关闭Oracle7数据库。 运行Oracle8
9、iMIG应用程序,生成一个转换文件,用于数据库转换。 从Windows NT控制面板终止Oracle7数据库服务,并使用实例管理器删除Oracle7数据库服务。设置Oracle8i数据库环境变量,包含运行注册表编辑器(regedit.exe)和控制面板,设置Oracle8i主目录、字符集和可实施文件路径等;由oradim 命令使用Oracle7_sid和init.ora文件创建Oracle8i服务;重新命名数据库控制文件;编辑init.ora文件,设置compatible为8.1.5.0.0;删除init.ora文件中不再使用参数;在DOS命令提醒符下设置Oracle_Sid=Oracle8_
10、sid。 实现数据迁移,以内部用户账号连接服务器管理器;以非登录方法开启Oracle8i数据库;由alter database covert命令生成新控制文件,并把文件头转换为Oracle8i数据库文件格式;由alter database open resetlog命令打开数据库而且重新设置日志文件;由spool migscripts.log命令创建输出目标文件,该文件保留前面命令脚本文件运行结果;运行u0703030.sql,当使用数据库高级复制功效选项时,运行Catrep.sql,当使用Oracle Parallel Server选项时,运行catparr.sql;由spool out命令
11、结束结果输出,并关闭数据库和备份数据库。查看migscripts.out spool文件,确定脚本文件实施成功,假如脚本文件没有成功实施,返回到脚本文件,检验可能出现问题。 2:Oracle 数据移植助理(Oracle data Migration Assistant) Oracle数据移植助手用于将Oracle7数据库移植到 Oracle8数据库。升级Oracle8数据库较早版本到Oracle8数据库新版本。Oracle数据移植助手不用于升级较低版本Oracle7数据库到较高版本Oracle7数据库。使用Oracle数据移植助手迁移Oracle7数据库数据到Oracle8i通常步骤是: 关闭
12、Oracle7数据库,终止全部Oracle数据库服务;编辑init.ora文件,设置compatible为8.1.5.0.0;删除init.ora文件中不再使用参数。 运行Oracle数据移植助手,在Database Instance页,选择移植数据库实例,输人internal用户账号密码,并提供init.ora文件位置;在Moving the Database页,指定数据库移植新位置;假如用户还没有进行备份,在Backup the Database 页,许可用户进行数据库备份;在Character Set页,指定移植后数据库使用字符集。 开始移植过程。移植过程需要时间取决于系统内存容量、硬盘
13、速度、CPU速度等原因。 移植完成后,能够查看Migration Report页,检验移植是否成功实施。假如移植没有成功,应该把数据库系统返回到备份Oracle7数据库。 编辑init.ora文件,添加在Oracle8i数据库中会用到参数。删除在移植过程中用到旧控制文件。 当使用数据库高级复制功效选项时,运行catrep.sql;当使用Oracle Parallel Server选项时,运行catparr.sql。 3:导入/导出工具(Export/Import) 当需要从一个非PC系统平台(比如,Unix系统)迁移数据库时,导人导出方法是一个很有用策略,当然相同系统平台数据迁移导人导出方法一
14、样适用。采取导入导出方法迁移Oracle7 Database on Unix到 Oracle8i Database on Windows NT数据库通常步骤是: 以正常方法关闭Unix系统 Oracle7数据库系统,不要立即终止或异常终止,然后冷备份数据库。打开数据库,使用导出工具(Export Utility)进行数据库完全导出。 在Windows NT系统安装Oracle8i数据库软件并创建开启数据库。 使用FTP,将文件传输到Windows NT计算机。必需使用FTPbinary传输模式,不然,可能造成读导出转储文件错误。 确定目标数据库在运行,并在DOS命令提醒符下设置oracle_s
15、id=Oracle8i_SID。 使用导出转储文件,实施到目标数据库完全导人。 查看导入日志文件,确定数据库导入实施成功。 4:SQlLoader工具 SQLLoader能够将ASCII文件中数据装入Oracle数据库。ASCII文件中信息能够来自不一样数据源,比如其它Oracle数据库、非Oracle数据库和电子表格等。 采取SQlLoader工具将数据迁移到Oracle数据库通常步骤有: 使用文本文件编辑器创建控制文件。 在DOS命令行下使用sqlldr命令装载数据文件。 验证数据是否正确装载。 5:SQLPLUS COPY 命令 使用SQLPLUS COPY命令,迁移Oracle7数据库
16、到 Oracle8i和导人导出方法相同,不过,此时需要两个数据库全部在线,其通常步骤是: 首先安装Oracle8i数据库,并创建一个数据库作为目标数据库。 添加所需表空间和用户到目标数据库中;安装所需SQLNet2或Net8软件,并配置用于连接数据库别名。 在DOS命令提醒符下设置oracle_sid=Oracle7_sid。 以Internal用户账号连接SQLPLUS。 创建一个从Oracle7数据库到Oracle8i数据库数据库链接;使用SQLPLUS COPY命令从Oracle7数据库复制表和表内容到Oracle8i数据库。 将视图、同义词、存放过程等添加到目标数据库。 6:Power
17、Builder数据管道工具(Pipeline) PowerBuilder数据管道工具是PowerBuilder提供一个用于转换数据智能对象,它能够在图形方法下实现不一样类型数据库间数据迁移而无需SQL 编程。PowerBuilder数据管道操作是在图形方法下实现,所以比较简单,其通常步骤是: 开启PowerBuilder。 点击工具栏上“DBProfile按钮,经过ODBC或专用接口配置源和目标数据库连接,同时连接到源和目标数据库。 单击工具栏上“Pipeline按钮,建一个新数据管道,确定好源和目标数据库。 选择要传输数据表,并依据需要选中想传输列。 选择数据迁移方法,CreateAddTa
18、ble(在目标库中建立一个新表并复制数据)、ReplaceDrop/AddTable(删除旧表并复制数据)、Refresh DeleteRows(删除表中现有数据并复制数据)、AppendInsertRows(在现有数据基础上增加新数据)、UpdateUpdate/InsertRows(新增数据键值假如和现有数据某行键值一样则覆盖现有数据,不然插入新数据)。 单击“Execute按钮运行定义好数据管道完成数据迁移。第2章 Oracle数据迁移方案为了有效地实现数据集市方法,数据教授必需能将数据快速、有效地放入数据集市中。怎样用数据仓库中数据快速刷新数据集市中数据,而这些数据集市又运行在各个结构
19、不一样平台上。以下是Oracle数据迁移技术多个方案。2.1使用可移动表空间把整个表空间移动到目标系统最快速方法是用FTP(文件传输协议)或rcp(远程复制)来简单地转移表空间基础文件。不过,仅仅复制Oracle数据文件还不够,目标数据库必需识别出并导入文件和对应表空间,最终用户才能使用表空间数据。使用可移动表空间包含复制表空间文件和使它们中数据在目标数据库中可用。 要移动表空间,使用Oracle数据库10g中数据泵导出(Data Pump Export)工具。数据泵是Oracle新一代数据转移工具,它替换了早期Oracle Export (EXP)和Import (IMP)工具。这些老工具使
20、用正则SQL来提取和插入数据,而数据泵则和它们不一样,它使用能绕过SQL缓冲区专用API,从而使操作过程速度变得极快。另外,数据泵能够提取特定对象,如特定存放过程或特定表空间表集合。 数据泵导出和导入能够由作业控制,数据库管理员能够随时暂停、重启或终止这些作业。2.2数据泵导出和导入工具选择可移动表空间限制之一是在转移文件时源表空间必需是只读模式。在现实世界中,并不总是能满足这一要求。比如,在OLTP数据库中,可能对表要常常进行读写操作。 使用Oracle数据库10g中数据泵实用工具来转移表空间。对这种方法进行测试包含移动TS1和TS2表空间内容以下步骤: (1)创建一个目录对象来存放转储文件
21、。CREATE DIRECTORY dump_dir AS /u01/dumps;(2)用数据泵导出工具导出数据。 expdp lora/lora123 TABLESPACES=/(ts1,ts2/) DUMPFILE=ts1_ts2.dmp DIRECTORY=dump_dir这一步创建一个包含TS1和TS2表空间内容文件/u01/dumps/ ts1_ts2.dmp。 (3)将文件ts1_ts2.dmp转移到远程系统中,放在目录/u01/dumps下(用文件传输方法如FTP或rcp)。 (4)在目标数据库中创建一个目录对象。CREATE DIRECTORY dump_dir AS /u01
22、/dumps;(5)使用数据泵导入工具将该文件导入到该数据库中。 impdp lora/lora123 DIRECTORY=dump_dir DUMPFILE=ts1_ts2.dmp假如表空间内数据量相对较小,则Lora能够只用一条命令实施上面全部步骤: impdp lora/lora123 DIRECTORY=dump_dir NETWORK_LINK=srcdb TABLESPACES=/(ts1,ts2/) 这条命令使用数据泵导入工具将经过数据库链接srcdb(在以前章节中已讨论过)检索到数据加载到表中。不过,因为网络带宽通常是受到限制,所以这种方法可能比使用导出/传输/导入周期方法要慢
23、部分。 假如只需将特定表或表集合进行转移,那么能够在expdp命令中使用TABLES=子句来只下载特定表或表集合。2.3拖出表空间使用Oracle数据库10g中新工具,它简化了可移动表空间移动方法,所以只包含实施一个打包过程。在这种方法中,用户利用所提供DBMS_STREAMS_TABLESPACE_ADM包从源系统中拖?quot;表空间。这个包使用数据泵转移表空间并将数据文件转换成目标系统格式。 它还自动实施任何所需字节次序变换。 下面给出在最简单情况下使用这种方法过程-包含单个简单表空间(更复杂情况在下一节介绍)。 假如一个表空间只有一个数据文件,则这个表空间称为简单表空间。DBMS_ST
24、REAMS_TABLESPACE_ADM包中PULL_SIMPLE_TABLESPACE过程使用方法: (1)在存放数据文件目录所在(远程)数据仓库数据库中创建一个目录对象。CREATE DIRECTORY dbf_dir AS /u01/oradata/dw;(2)设置远程数据库中表空间TS1为只读。ALTER TABLESPACE TS1 READ ONLY;剩下部分步骤在当地(数据集市)数据库中完成。 (3)创建一个连接到远程(数据仓库)数据库(在Lora例子中是dwdb)数据库链接。CREATE DATABASE LINK dwdb USING dwdb;(4)创建一个数据文件将被转移
25、到其中目录对象。CREATE DIRECTORY dbf_dir AS /u01/oradata/mart;(5)从远程数据库中拖出表空间。BEGIN DBMS_STREAMS_TABLESPACE_ADM .PULL_SIMPLE_TABLESPACE ( tablespace_name = TS1, database_link = dwdb, directory_object = DBF_DIR, conversion_extension = linux);END;该操作在后台完成了很多步骤:设置源表空间为只读;用数据泵导出工具进行一次表空间元数据转储;用DBMS_FILE_TRANSFE
26、R包移动数据文件和转储文件;把源表空间恢复到其最初读写状态;使用数据泵导入工具将表空间插入到当地数据库中。因为源数据库运行在Linux上,而目标数据库运行在Solaris上,所以这一操作首先复制原始数据文件(Linux文件格式),然后将它转换到目标平台上(Solaris)文件格式。复制过程保持最初被转移文件,而创建一个新文件用于转换。新文件和最初文件同名,但含有CONVERSION_EXTENSION参数指定linux扩展名。在目标数据库中创建表空间为只读表空间。 该操作还在和数据文件相同目录下创建一个名为ts1_01.plg日志文件。假如实施该过程返回错误信息,则检验该文件内容可能有利于找到
27、错误原因。 拖出多个表空间上面例子针正确是单个简单表空间情况。但假如想移动一组表空间,或部分表空间数据文件多于一个,该怎么办呢?在这种情况下,她能够使用同一个包中另一个过程PULL_TABLESPACES。代码清单2给出例子说明Lora怎样转移两个表空间TS7和TS8,而不管它们有多少个数据文件。 该过程要求以VARCHAR2数据类型给出表空间名和目录名。代码清单2中第2行到第5行展示出了这些变量申明,第10行到第13行展示出这些变量被赋值给对应表空间名和目录名。 因为定义了两个目录,所以第一个文件在第一个目录中创建,下一个文件在第二个目录中创建,第三个文件再次在第一个目录中创建,如此等等。这
28、些操作经过数据泵作业来实施,作业名在第17行指定。假如需要话,源系统字节次序数据文件会自动转换为目标系统字节次序。在目标数据库中创建新文件取得linux扩展名,如第21行代码所表示。处理过程统计在由目录对象LOG_DIR指定目录中ts7_ts8.log日志文件中(第14行)。 这种方法优点显而易见。从一个系统把一个表空间转移到另一个系统所需全部操作任务全部封装在一个程序单元中,而且细节对用户完全透明。甚至把文件从源系统转移到目标系统工作也在这个过程中经过所提供DBMS_FILE_TRANSFER包来完成。用户简单地用表空间名调用该过程,表空间就会在当地数据库中被刷新。她们无须操心底层细节(如操
29、作系统),因为文件转移过程自动转换文件。这种方法有什么不好地方吗?它关键缺点就是将各个功效封装在一个单一过程内,这可能会掩盖某一步产生错误,使问题诊疗变得很复杂。手工转移一个表空间方法要求各条命令全部是透明,所以其好处是用户能够看到每一步操作结果。第3章 总结只有当数据实际被写入时,占据了磁盘上空间,自动精简配置才能够帮助保留存放空间。不是容量第一次被应用或用户设置实用就有作用,当应用或用户不需要磁盘空间时,自动精简配置能够消除浪费。不过,很多数据迁移工具在一个目标系统内写入“从block 0到最终一个block”,而不管那一块是使用过,浪费掉了用户设置自动精简配置好处。在决定写入前,文件系统实用程序或基于主机容量管理“足够智能来判定是否block被访问”这么能够帮助遏制这个问题。Block-level迁移技术对于保留数据安全问题是很有效果,不过对于自动精简配置却不是很有效果。在迁移数据后,可能会引发服务器瓦解。在存放阵列上迁移数据也要求从服务器上下载之前供给商软件,把新供给商软件上传上去。这不仅要求时间,假如没有完全卸载旧软件,它会和其它应用发生冲突,从而引发不稳定。