一种基于Oracle数据库的在线数据迁移方法技术

技术编号:2825022 阅读:532 留言:0更新日期:2012-04-11 18:40
本发明专利技术揭示了基于Oracle数据库实现在线数据迁移的方法,主要包括prebuiltmv、trigger+procedure和trigger+sql*loader+程序。上述三种方式均采用记录源表的操作日志、完全刷新和增量刷新同步日志和迁移切换以完成数据迁移。采用本发明专利技术的prebuilt  mv和trigger+procedure可以实现跨平台、跨版本的数据迁移,而采用trigger+sql*loader+程序可以利用文本文件或者进程间的通信实现不同字符集的数据库之间的转换,因而可实现跨字符集的数据迁移。

【技术实现步骤摘要】

本专利技术涉及数据库应用技术,尤其涉及Oracle数据库的应用技术。
技术介绍
随着数据库管理系统和操作系统平台更新换代的速度不断加快,数据库工程师经常需要在两个不同的数据库之间或在两种不同的操作系统平台之间进行数据迁移。数据迁移是指将数据从一台机器迁移到另一台机器,或者将数据从一个数据库迁移到另一个数据库,并且这些数据(包括结构定义)在转移后能正常运行。在现有技术中,常用的数据迁移方法主要包括:采用导出/导入(export/import)或者Oracle 10g版本提供的导出/导入(expdp/impdp)方式、insert/*+append*/into...from db_link+nologging、standby迁移方式、利用stream与相关工具进行的数据迁移和基于表空间传输以及Oracle 10g的跨平台数据文件转换结合的方式。但是,上述的这些迁移方式有的停机时间过长,有的难以确定完全同步开始时的SCN点,有的则不能跨平台、跨版本和跨字符集进行数据迁移。
技术实现思路
针对基于Oracle数据库而进行数据迁移时所存在的上述技术缺陷,本专利技术提供了可实现跨平台、跨版本且高效快速的在线数据迁移方法。按照本专利技术的一个方面,提供了一种采用prebuilt mv(materialized view:物化视图)方式进行数据迁移的方法。该方法是指在预先创建好的表上面建立物化视图,当该物化视图被删除的时候,原来已创建好的表仍予以保留,同时同步过来的数据也被保留。该方法采用表对象作为数据迁移的单个对象,并针对该表对象用一个主键刷新mv。首先在源表上创建mv日志,并在目标数据库上创建结构一样的目标表;然后在目标表上采用prebuilt方式创建mv,并进行完全刷新;在以后的创建过程中采用增量刷新方式,当需要进行数据库切换时只需刷新增量-->的日志,删除mv和保留目标表。该方法所实现的数据迁移可采用下列步骤:(1)依照预定的容量大小对表对象进行分级,将超过所述预定容量的表对象作为大表,将低于所述预定容量的表对象作为小表;(2)将所述大表作为源表,在源数据库上创建物化视图日志;(3)在目标数据库上创建与所述源表的结构相同的目标表,并在所述目标表上采用prebuilt方式创建物化视图;(4)对同步日志进行完全刷新;(5)对所述同步日志进行增量刷新;(6)创建可实现自动增量刷新的程序代码;(7)按上述步骤(2)-(6)依次处理所有的大表;(8)对采用insert/*+append*/into...from db_link处理的小表,整理好insertinto的脚本;(9)运行所述的insert into脚本,对所述小表进行数据迁移;以及(10)迁移切换。更具体地,在进行迁移切换时,包括如下的一系列操作:停止源数据库的一切活动、等待最后一批日志完成增量刷新、运行小表脚本并insert into小表数据、等待所有的大表完成刷新、删除源表中的mvlog和目标表中的mv并保留目标表和数据、创建与目标表有依赖关系的对象(如自增长的序列)。按照本专利技术的又一个方面,提供了一种使用创建触发器和创建过程相结合的方式(trigger+procedure)进行数据迁移的方法。该方法采用表对象作为数据迁移的单个对象,并要求该表对象有一个主键。首先利用触发器记录该表的DML(DataManipulation Language:数据操纵语言)日志,然后通过用户自定义的过程与该DML日志同步。鉴于该方法主要弥补了采用prebuilt mv方式进行数据迁移时难以刷新大表的缺点,下列步骤主要用来完全刷新大表:(1)依照预定的容量大小对表对象进行分级,将超过所述预定容量的表对象作为大表,将低于所述预定容量的表对象作为小表;(2)将所述大表作为源表,在所述源表上创建数据操纵语言的触发器;(3)在目标数据库上创建与所述源表结构相同的目标表;(4)所述触发器开始工作后,分批载入所述源表中的数据至所述目标数据库的所述目标表中;-->(5)在所述目标数据库上创建用户自定义的过程;(6)完全刷新由所述触发器产生的同步日志;(7)对所述同步日志进行增量刷新;以及(8)迁移切换。更具体地,在进行迁移切换时,包括如下的一系列操作:通过用户自定义的过程完成日志的刷新、删除触发器与该过程以及调度的作业、完成目标表的同步刷新。按照本专利技术的又一个方面,提供了一种创建触发器和自定义程序与使用sql*loader工具相结合(trigger+sql*loader+程序)进行数据迁移的方法。该方法主要利用文本文件或者进程通信进行中间转换,通过sql*loader载入数据,并依据数据库工程师自定义的程序分析同步日志。需要指出的是,利用sql*loader工具可以将一些以文本文件格式存放的数据顺利地导入到Oracle数据库中,是一种在不同数据库之间进行数据迁移非常便捷和常用的手段。该方法可通过下列的步骤进行数据迁移:(1)依照预定的容量大小对表对象进行分级,将超过所述预定容量的表对象作为大表,将低于所述预定容量的表对象作为小表;(2)将所述大表作为源表,在所述源表上创建数据操纵语言的触发器;(3)在目标数据库上创建与所述源表结构相同的目标表;(4)所述触发器开始工作后,分批载入所述源表中的数据至所述目标数据库的所述目标表中;(5)在中间层利用两个进程分别连接不同字符集的数据库;(6)完全刷新由所述触发器产生的同步日志;(7)对所述同步日志进行增量刷新;以及(8)迁移切换。更具体地,步骤(1)中的小表载入包括两种方式:利用select或者程序生成文本文件,通过Sql*loader载入;直接生成insert into的脚本到文本文件,然后执行。更具体地,步骤(6)中同步日志可采用两种方案,一是在源上根据日志直接生成DML语句,采用文本方式发送到目标执行;一是在中间层利用两个进程,分-->别连接不同字符集的数据库,其中的一个进程用于分析日志,另一个进程用于同步日志。更具体地,步骤(8)中的迁移切换包括同步完最后的日志、停止同步程序。采用本专利技术中基于Oracle数据库的prebuilt mv方式、trigger+Procedure方式和trigger+sql*loader+程序方式进行的迁移方法,均能实现跨平台和跨数据库版本的数据迁移,并可完成数据的重组优化,其中trigger+Sql*loader+程序方式还能实现跨字符集的数据迁移,极大了提高了数据迁移的效率,减少了停机切换时间。附图说明读者在参照附图阅读了本专利技术的具体实施方式以后,将会更清楚地了解本专利技术的各个方面。其中,图1示出了现有技术中常用的几种数据迁移的方法;图2示出了本专利技术中实现在线数据迁移的三种方式;图3示出了本专利技术中基于prebuilt mv方式的在线数据迁移方法;图4示出了本专利技术中基于trigger+procedure方式的在线数据迁移方法;而图5示出了本专利技术中基于trigger+sql*loader+程序方式的在线数据迁移方法。具体实施方式下面参照附图,对本专利技术的具体实施方式作进一步的详细描述。图1示出了现有技术中常用的几种数据迁移的方法,其中,可进行在线数据迁移的方式包括standby、stream和相关本文档来自技高网...

【技术保护点】
一种基于Oracle数据库的在线数据迁移方法,其特征在于,该方法采用下列步骤实现:    (1)依照预定的容量大小对表对象进行分级,将超过所述预定容量的表对象作为大表,将低于所述预定容量的表对象作为小表;    (2)将所述大表作为源表,在源数据库上创建物化视图日志;    (3)在目标数据库上创建与所述源表的结构相同的目标表,并在所述目标表上采用prebuilt方式创建物化视图;    (4)对同步日志进行完全刷新;    (5)对所述同步日志进行增量刷新;    (6)创建可实现自动增量刷新的程序代码;    (7)按上述步骤(2)-(6)依次处理所有的大表;    (8)对采用insert/↑[*]+append↑[*]/into…from  db_link处理的小表,整理好insertinto的脚本;    (9)运行所述的insert  into脚本,对所述小表进行数据迁移;以及    (10)迁移切换。

【技术特征摘要】
1. 一种基于Oracle数据库的在线数据迁移方法,其特征在于,该方法采用下列步骤实现:(1)依照预定的容量大小对表对象进行分级,将超过所述预定容量的表对象作为大表,将低于所述预定容量的表对象作为小表;(2)将所述大表作为源表,在源数据库上创建物化视图日志;(3)在目标数据库上创建与所述源表的结构相同的目标表,并在所述目标表上采用prebuilt方式创建物化视图;(4)对同步日志进行完全刷新;(5)对所述同步日志进行增量刷新;(6)创建可实现自动增量刷新的程序代码;(7)按上述步骤(2)-(6)依次处理所有的大表;(8)对采用insert/*+append*/into...from db_link处理的小表,整理好insertinto的脚本;(9)运行所述的insert into脚本,对所述小表进行数据迁移;以及(10)迁移切换。2. 如权利要求1所述的方法,其特征在于,在执行步骤(3)时,所述源表的结构在所述日志创建完成之后且在迁移数据的复制完成之前保持不变。3. 如权利要求1所述的方法,其特征在于,所述完全刷新仅在第一次同步所述日志时执行。4. 一种基于Oracle数据库的在线数据迁移方法,其特征在于,该方法采用下列步骤实现:(1)依照预定的容量大小对表对象进行分级,将超过所述预定容量的表对象作为大表,将低于所述预定容量的表对象作为小表;(2)将所述大表作为源表,在所述源表上创建数据操纵语言的触发器;(3)在目标数据库上创建与所述源表结构相同的目标表;(4)所述触发器开始工作后,分批载入所述源表中的数据至所述目标数据库的所述目标表中;(5)在所述目标数据库上创建用户自定义的过程;(6)完全刷新由所述触发器产生的同步日志;(7)对所述同步日志进行增量刷新;以及(8)迁移切换。5. 如权利要求4所述的方法,其特征在于,在执行步骤(1)时,对低于所述预定容量的表对象,采用insert/*+append*/into...from db_link进行数据迁移。6. 如权利要求4所述的方法,其特征在于,所述日志的REP_KEY用于存放所述源表的主键,字段类型取决于所述源表的字段类型...

【专利技术属性】
技术研发人员:陈吉平
申请(专利权)人:阿里巴巴公司
类型:发明
国别省市:VG[英属维尔京群岛]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1