热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

异构库环境的ETL,oracleVSmssql

1、环境需求描述:用户内网有一台oracle10g库,外网有一台oracle9i。用户通过内网发布人才招聘相关信息,所有的信息在一张表里面,运行一个exportimport脚本把

1、环境需求描述:用户内网有一台oracle10g库,外网有一台oracle9i。用户通过内网发布人才招聘相关信息,所有的信息在一张表里面,运行一个export/import脚本把

1、环境需求描述:

用户内网有一台oracle 10g库,外网有一台oracle 9i。用户通过内网发布人才招聘相关信息,所有的信息在一张表里面,运行一个export/import脚本把内网该表同步到外网表,内网和外网之间应该 是建立了临时表lb_retain,这张表是作为外网应用使用。该用户开发的新CMS系统(ASP.NET),数据库是采用MSSQL SERVER 2005 X64,该数据库也是位于外网环境中。由于用户发布招聘信息不想在新CMS平台上进行,香港虚拟主机,所以不得不对这一信息进行整合。最终要使该招聘信息能在新网站上显 示给最终用户。

2、解决思路:

分析以上需求,网站空间,即源oracle库同 步到目标mssql 2005,为了达到异构库环境的表与表之间的数据同步,本次解决方案是采用了MSSQL商业智能解决方案,美国服务器,用SQL Server Business Intelligence Development Studio工具创建Integration Services 项目创建DTS包,该包可以处理非常复杂的数据挖掘工作(如果源是mssql,目标是oracle的话,可以使用oracle的透明网关)。其中,我建立 从oracle抽取数据并插入到新网站所对应的MSSQL表招聘里面。这样就达到了整合的效果,只要拿到了数据插入到新应用所在的库里面去,就可以整合到 了新应用的所有功能,而不需要二次开发,也不需要写应用层代码来操作oracle库了。

3、解决过程

(1)新建Integration services项目

clip_image001

(2)SSIS导入导出向导--建立基本的数据库连接串以及基本的SQL,选择源

clip_image002

(3)选择目标

clip_image003

(4)编写SQL语句

clip_image004

(5)建立源列到目标表的列的映射

clip_image005

(6)下一步,警告先不管

clip_image006

(7)分别添加“数据转换”、“派生列”、“脚本组件”

“数据转换”把源ORACLE的varchar2列转换为MSSQL所兼容的列

clip_image007

(8)“派生列”

根据你的业务不同配置也是不太一样的,这里所要添加“派生列”是因为源ORACLE库没有与目标库对应的列,所以要在同步的过程中生成新列并赋初值

clip_image008

(9)“脚本组件”

“脚本组件”是为了处理比较复杂的业务流程,比如本方案有一个字段是要自增的,所以要编写脚本

设置输入列

设计脚本:

ScriptMain:

' Microsoft SQL Server Integration Services user script component

' This is your new script component in Microsoft Visual Basic .NET

' ScriptMain is the entrypoint class for script components

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class ScriptMain

Inherits UserComponent

Dim intCounter As Integer = 1 'Set intial value here

Public Overrides Sub 输入0_ProcessInputRow(ByVal Row As 输入0Buffer)

Row.Taxis = intCounter

intCounter = intCounter + 1 ' Set the incremental value here

End Sub

End Class

BufferWrapper

' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

' Microsoft SQL Server Integration Services buffer wrappers

' This module defines classes for accessing data flow buffers

' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System

Imports System.Data

Imports Microsoft.SqlServer.Dts.Pipeline

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Public Class 输入0Buffer

Inherits ScriptBuffer

Public Sub New(ByVal Buffer As PipelineBuffer, ByVal BufferColumnIndexes As Integer())

MyBase.New(Buffer, BufferColumnIndexes)

End Sub

Public Property [Taxis]() As Int32

Get

Return CType(Me(0), Int32)

End Get

Set

Me(0) = Value

End Set

End Property

Public Property [Taxis_IsNull] As Boolean

Get

Return IsNull(0)

End Get

Set

SetNull(0)

End Set

End Property

Public Function NextRow() As Boolean

NextRow = MyBase.NextRow()

End Function

Public Function EndOfRowset() As Boolean

EndOfRowset = MyBase.EndOfRowset

End Function

End Class

ComponentWrapper

' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

' Microsoft SQL Server Integration Services component wrapper

' This module defines the base class for your component

' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System

Imports System.Data

Imports Microsoft.SqlServer.Dts.Pipeline

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper

Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class UserComponent

Inherits ScriptComponent

Public Connections As New Connections(Me)

Public Variables As New Variables(Me)

Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As PipelineBuffer)

If InputID = 1572 Then

输入0_ProcessInput(New 输入0Buffer(Buffer, GetColumnIndexes(InputID)))

End If

End Sub

Public Overridable Sub 输入0_ProcessInput(ByVal Buffer As 输入0Buffer)

While Buffer.NextRow()

输入0_ProcessInputRow(Buffer)

End While

End Sub

Public Overridable Sub 输入0_ProcessInputRow(ByVal Row As 输入0Buffer)

End Sub

End Class

Public Class Connections

Dim ParentComponent As ScriptComponent

Public Sub New(ByVal Component As ScriptComponent)

ParentCompOnent= Component

End Sub

End Class

Public Class Variables

Dim ParentComponent As ScriptComponent

Public Sub New(ByVal Component As ScriptComponent)

ParentCompOnent= Component

End Sub

End Class

(10)打开“目标”的数据流

建立映射关系

clip_image009

(11)设置一下ETL包,不然等下添加JOB的时候有可能出错

“项目属性”-“调试”-“调试选项”-Run64BitRuntime=false(后面讲解释原因)

包的加密方式用-EncryptSensitiveWithPassword

clip_image010

(12)直接执行该包,看结果,没有错误,成功后就开始把它加入到MSSQL的JOB

打开SQL Server Management Studio并开启SQL SERVER代理,新建作业,详细怎么去创建可以做官网去查文档,这里只讲关键步骤:

clip_image011

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文详细介绍了解决全栈跨域问题的方法及步骤,包括添加权限、设置Access-Control-Allow-Origin、白名单等。通过这些操作,可以实现在不同服务器上的数据访问,并解决后台报错问题。同时,还提供了解决second页面访问数据的方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
mobiledu2502927537
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有