知识大全 从ORACLE向SQL SERVER定时迁移作业的设计与实现

Posted

篇首语:宿命论是那些缺乏意志力的弱者的借口。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 从ORACLE向SQL SERVER定时迁移作业的设计与实现相关的知识,希望对你有一定的参考价值。

从ORACLE向SQL SERVER定时迁移作业的设计与实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 问题描述        某事业单位很早以前开发了一套基于Oracle 数据库的管理系统 工作在WINDOWS 下 采用C/S工作模式 数据库的字符集为WE ISO P 由于工作需要 需开发一套在此基础上的查询系统 为保证原系统的安全和完整性 要求查询系统不得直接使用原数据库 影响目前系统的运行 只能通过中间件技术实现查询系统对原数据库的访问 同时由于原系统在使用过程中发现数据存取的速度很慢 要求查询系统使用SQL SERVER 数据库进行查询         二 解决方案分析        根据用户的需求和原系统的工作模式 可采用的方案主要有以下三种           利用SQL SERVER 的作业调度功能 定时执行数据迁移 实现数据同步         DTS(数据转换服务)是微软从SQL SERVER 开始引入的 DTS的主要目的是在系统之间迁移数据和数据库对象 DTS原来是用作SQL SERVER OLAP服务的ETL工具 后来微软意识到DTS 不仅可以作为OLAP 服务的数据抽取和载入工具 还可以实现异种数据库间的迁移 因此扩充了DTS的功能 在SQL SERVER 中提供了简单易用的DTS 设计器 利用DTS设计器可以很方便地解决本文涉及的问题 但是 如果要迁移的对象比较多 利用DTS设计器的工作量就相当大了 因此 提出了第二种解决方案           利用DTS 编程实现数据的定时迁移         该方法原理简单 但需要对 DTS 有一定的了解 性能也比较好 熟悉VB VC DELPHI等任一种编程语言 均可以利用SQL Server 提供的 DTS 接口实现数据的迁移         DTS 迁移规范保存在一个称为包的实体中 DTS包是基本的DTS组件的容器 这些组件包括连接 任务 转换 工作流 不同的组件完成不同的功能 它们共同构成数据迁移的实现主体 要通过DTS编程实现数据库的迁移 至少需要两个连接对象 其中 一个提供数据 一个接收数据 至少需要一个转换对象 完成数据从源到目的服务器的转换 至少需要两个任务对象 完成迁移之前的目的服务器上的数据表的删除和重建 至少需要三个工作流对象 为迁移工作设计执行的步骤         为了实现定时执行 程序还要完成对SQL SERVER AGENT 进行编程实现迁移作业的提交和调度 由于SQL SERVER 的作业调度是通过 SQL SERVER AGENT 来管理的 因此需要在启动SQL SERVER 时同时启动SQL SERVER AGENT           采用中间件技术        前面两种方案都是利用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 不一致 因此必须进行类型转换 它们之间的对应关系和转换要求如下表       (三)程序设计      界面设计 如图所示        编码        ( ) 在整个程序运行过程中 需要两个全局变量 DTS 包 oPackage 和Oracle 服务器连接 oraCon         当设置好连接参数后 单击 连接Oracle服务器 将与 ORACLE 服务器连接 并取出所有表 然后填充第一个列表框 并在下面表格中显示相应的数据(如果选中了 显示数据 )        Private Sub Command _Click()        Dim rst As New ADODB Recordset        With oraCon          Provider = OraOLEDB Oracle           Properties( User ID ) = Text ( ) Text          Properties( Password ) = Text ( ) Text          Properties( Data Source ) = Text ( ) Text          Properties( Persist Security Info ) = True          Open        End With                      With rst          Source = select * from all_tables where tablespace_name<> SYSTEM order by owner table_name           ActiveConnection = oraCon          CursorType = adOpenKeyset          LockType = adLockOptimistic          Open        End With        RefreshGrid rst        FillTabList rst        rst Close        Command Enabled = False        End Sub        ( ) 在第一个列表框中双击数据表列表 将选中的表加入第二个列表 如果 显示数据 被选中 将显示相应表的数据 同时显示表的结构信息 在第二个列表框中双击数据表将选中项移出该列表框     Private Sub List _DblClick()  Dim rst As New ADODB Recordset  Dim strSQL As String  Dim tmpStr As String  List AddItem (List List(List ListIndex))    If Check Value = Then   With rst     Source = select * from & List List(List ListIndex)     ActiveConnection = oraCon     CursorType = adOpenKeyset     LockType = adLockOptimistic     Open   End With     RefreshGrid rst   rst Close  End If    tmpStr = List List(List ListIndex)  strSQL = SELECT COLUMN_ID COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE   strSQL = strSQL & FROM SYS ALL_TAB_COLUMNS WHERE TABLE_NAME=   strSQL = strSQL & & Mid(tmpStr InStr( tmpStr vbTextCompare) + ) &   strSQL = strSQL & and OWNER= & Mid(tmpStr InStr( tmpStr vbTextCompare) ) &   With rst    Source = strSQL    ActiveConnection = oraCon    CursorType = adOpenKeyset    LockType = adLockOptimistic    Open  End With    rst MoveFirst  RefreshPropGrid rst    rst Close    PropGrid Visible = True  SQLScriptList Visible = False    End Sub  Private Sub RefreshGrid(rst As ADODB Recordset)    Dim fld As ADODB Field    On Error Resum cha138/Article/program/SQLServer/201311/21974

相关参考

知识大全 Oracle 数据库向 MS SQL Server 7.0 的迁移(4)

Oracle数据库向MSSQLServer7.0的迁移(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 .NET框架下从Oracle到SQL Server的迁移

.NET框架下从Oracle到SQLServer的迁移  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 SQL Server是如何定时作业的

SQLServer是如何定时作业的  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果在SQLS

知识大全 SQL SERVER定时作业的设置方法[2]

SQLSERVER定时作业的设置方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 SQL SERVER定时作业的设置方法[1]

SQLSERVER定时作业的设置方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 MS Access 数据库向 MS SQL Server 7.0 的迁移

MSAccess数据库向MSSQLServer7.0的迁移  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 PHP将数据从Oracle向Mysql数据迁移实例

PHP将数据从Oracle向Mysql数据迁移实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 UNIX下让ORACLE定时执行*.sql文件

UNIX下让ORACLE定时执行*.sql文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  O

知识大全 在unix下定时执行oracle的sql方法

  在linux有多种方式可以实现定时运行使用最灵活的应该是crontab  在使用crontab必须特别注意环境变量问题在此以执行oracle的sqlplus为例  说明crontab的使用方法  

知识大全 oracle中怎样从sql*plus向shell传递变量

很多人在实际的工作和学习中都遇到了无法通过sqlplus向shell传递变量下面我们来介绍一个实例脚本来进行折中处理  >  下面我们再来介绍另一个实例方法  >>>cha138/Artic