三九宝宝网宝宝百科宝宝知识

如何从ORACLE向SQLSERVER定时迁移实现

01月02日 编辑 39baobao.com

[vb中如何用pcomm pro实现多串口通信]在VB中有提供一个串口通信控件,为何还需要要用Pcomm pro呢?此控件需要在“工程---组件 ”里面添加。下面给你说说VB中的MSCOMM 控件 MSComm 控件通过串行端口传输和接收数据,为...+阅读

一、问题描述 某事业单位很早以前开发了一套基于Oracle7。03数据库的管理系统,工作在WINDOWS 下,采用C/S工作模式,数据库的字符集为WE8ISO8859P1。由于工作需要,需开发一套在此基础上的查询系统。为保证原系统的安全和完整性,要求查询系统不得直接使用原数据库,影响目前系统的运行。 只能通过中间件技术实现查询系统对原数据库的访问,同时由于原系统在使用过程中发现数据存取的速度很慢,要求查询系统使用SQL SERVER 2000数据库进行查询。

二、解决方案分析 根据用户的需求和原系统的工作模式,可采用的方案主要有以下三种:

1、 利用SQL SERVER 的作业调度功能,定时执行数据迁移,实现数据同步。 DTS(数据转换服务)是微软从SQL SERVER 7。0 开始引入的。DTS的主要目的是在系统之间迁移数据和数据库对象。DTS原来是用作SQL SERVER OLAP服务的ETL工具。后来微软意识到DTS 不仅可以作为OLAP 服务的数据抽取和载入工具,还可以实现异种数据库间的迁移,因此扩充了DTS的功能。

在SQL SERVER 2000中提供了简单易用的DTS 设计器。利用DTS设计器可以很方便地解决本文涉及的问题。但是,如果要迁移的对象比较多,利用DTS设计器的工作量就相当大了。因此,提出了第二种解决方案。

2、 利用DTS 编程实现数据的定时迁移。 该方法原理简单,但需要对 DTS 有一定的了解,性能也比较好。熟悉VB、VC、DELPHI等任一种编程语言,均可以利用SQL Server 提供的 DTS COM接口实现数据的迁移。

DTS 迁移规范保存在一个称为包的实体中,DTS包是基本的DTS组件的容器,这些组件包括连接、任务、转换、工作流,不同的组件完成不同的功能,它们共同构成数据迁移的实现主体。 要通过DTS编程实现数据库的迁移,至少需要两个连接对象。其中,一个提供数据,一个接收数据;至少需要一个转换对象,完成数据从源到目的服务器的转换;至少需要两个任务对象,完成迁移之前的目的服务器上的数据表的删除和重建;至少需要三个工作流对象,为迁移工作设计执行的步骤。

为了实现定时执行,程序还要完成对SQL SERVER AGENT 进行编程实现迁移作业的提交和调度。由于SQL SERVER 的作业调度是通过 SQL SERVER AGENT 来管理的,因此需要在启动SQL SERVER 时同时启动SQL SERVER AGENT。

3、 采用中间件技术 前面两种方案都是利用DTS,离不开SQL Server 的DTS。利用中间件技术,可以通过实现一服务程序,定时将数据从ORACLE服务器取出然后转换成SQL SERVER 数据库的数据格式,传入SQL SERVER。

其工作原理如下图: 该技术可以通过通过ODBC 或OLE DB技术编程实现数据的定时获取和转换传出。对于编程的工作量较大,原因在于ORACLE 和SQL SERVER的数据类型的不一致必须通过类型转换实现数据的一致。同时效率也比较低。由于作为一种服务程序长驻内存,对程序的质量要求至少不得出现内存泄露,否则,可能使服务器瘫痪。 不过这种方案的好处在于可以脱离SQL SERVER ,维护的工作量相对要轻一些。

比较上述的三种方案,从实现的难度上比较,第一种最低,最后一种最高。从效率上比较,最后一种最低,第一种与第二种最高。从可维护性来比较,第一种最低,最后一种最高。 综合三种方案,笔者认为第二中方案较好。发布到目标系统上,只需在现场运行一次数据迁移的任务安装程序,就能实现SQL Server 定时从Oracle服务器迁移数据。

同时,所有的工作量也只是选择要迁移的数据表。该工作,如果要迁移的表是已知的,甚至可以从文件中直接读入,就能实现任务的安装。 下面介绍采用第二种方案用VB编写在SQL SERVER上能定时自动进行数据迁移任务的安装程序的方法。

三、数据迁移的实现 为了能在目标机上顺利实现数据迁移,将DTS包存储到SQL SERVER,在SQL SEVRE AGENT 的作业调度中采用DTSRUN 来加载和执行DTS包。

这样,所有的工作只需作一次,就可将整个数据迁移的DTS包和SQL SERVER的作业发布到目标机上。

(一)算法设计 程序的流程图如下:

(二)关键技术说明 要实现数据的迁移,必须考虑两个问题,第

一、数据的迁移要求目标系统上的数据与ORACLE 数据库中的数据要一致,因此,目标数据库中的相应表必须在迁移之前被删除。 所以迁移任务的第一个是对相应表执行删除的SQL 任务;第

二、由于目标表被删除,迁移的数据失去寄托,因此迁移任务的第二步必须在目标系统上重建相应的表。

在建表时,由于ORACLE 数据库的数据类型与SQL SERVER 不一致,因此必须进行类型转换。 它们之间的对应关系和转换要求如下表: Oracle Microsoft SQL Server CHAR 建议使用CHAR 类型。这种类型的数据由于采用固定长度存储,其存取速度在某些情况下要比使用 VARCHAR 类型快。 VARCHAR2 和 LONG VARCHAR 或 TEXT。 (如果在ORACLE 中的长度超过8000字节应在SQL SERVER 中使用 TEXT 类型,否则使用 VARCHAR 数据类型。

) RAW 和 LONG RAW VARBINARY 或 IMAGE。 (如果在ORACLE 中...

以下为关联文档:

如何实现小班化教学的高效课堂为了更好地践行高效课堂的教学理念,我校结合班级的实际,实施小班化教学。我们打算从课堂教学组织形式,课堂教学活动设计,课堂教学评价等方面,总结出小班化教学的必备环节,促进我校...

要求使用matlab实现求助>>sym(pi/3)ans =pi/3>>sym(pi/3,'d')ans =1.047197551196597631317786181171>>sym('pi/3')ans =pi/3>>sym(exp(2))ans =4159668786720471/562949953421312>>sym(exp(2),'d'...

关于如何实现word中数字大小写转换word好像不能输入公式的,要辛苦一点复制一下 用excel将数字金额变成大写的有元角分的,(如:“123.45”转成“壹佰贰拾叁元肆角伍分”)可以用公式:=IF((A1-INT(A1))=0,TEXT(A1,"[DBNU...

Unity3D中如何用代码实现物体的左右循环移动最好是C JS也可以初1、新建一个Cube,在Cube X轴的正方向放置一个空物体或者其他GameObject,Cube和空物体的Y值一致,确保2者在同一水平线上; 2、把下列代码保存为C#,赋给Cube,并在Inspector视图中,把...

在unity3d中要实现点击按钮物体会上下移动应当怎样设置C代码MoveGameObject.transform.rotation = Quaternion.RotateTowards(transform.rotation, Terget.rotation,Time.deltaTime*speed); 或者 float posx = Mathf.Clamp(transform....

如何在Cocos2d中实现两个不同的动画精灵呢NSMutableArray *smileFrames = [NSMutableArray array];[smileFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:"character_smile.png"]]...

如何在cocos2d中实现多点触摸放大缩小精灵呢iOS下默认是不开启多点触控的,要想要使用需要做如下的内容:iOS文件夹下:AppController.mm 需要加一行代码:// 只需要新增这样一行代码就可以使用多点触控啦。 [eaglView setMult...

求电脑达人指教我如何安装混合硬盘实现英特尔智能响应技术!1.主板bios设硬盘模式raid,为避免盘符错乱,固态暂不分区。 2.安装操作系统到机械硬盘。 3.装驱动,一定要安装最新版intel 磁盘管理驱动RST... 4.进系统(win7)为固态硬盘分区并格...

Oracle数据库的数据迁移方法有哪些呢Windows中oracle服务启动 关闭脚本 oracle控制文件的管理 随着数据库管理系统和操作系统平台的更新换代的速度的加快,数据库管理员经常需要在两个不同的数据库之间或在两种不...

推荐阅读
图文推荐