使用SSIS创建同步数据库数据任务的方法

这些包可以独立使用,也可以与其他包一起使用以满足复杂的业务需求。Integration Services 可以提取和转换来自多种源(如 XML 数据文件、平面文件和关系数据源)的数据,然后将这些数据加载到一个或多个目标。(摘自MSDN,更多详细信息可参考:http://technet.microsoft.com/zh-cn/library/ms141026(v=sql.105).aspx

下面我使用SSIS来演示一个实际例子。比如我有一个数据库,出于备份数据或者其它的目的,会定期的对这个数据库的数据迁移到其它的数据库去。迁移的时候,有些新增的字段会被插入备份数据库,而有些被修改过的字段也会在备份数据库被修改。现在我们就用SSIS来完成这项任务。

首先在我源数据库db_source和目标数据库db_destination中运行以下SQL创建好需要的表,就以这一个表test_1来进行示范。

代码如下:

CREATE TABLE [dbo].[test_1](
[Id] [int] IDENTITY(1,1) NOT NULL primary key,
[Name] [varchar](50) NULL,
[Age] [int] NULL
)

建好表好在源数据表中可以随便加几条记录,目标数据库暂时留空。

现在我们打开VS,创建一个Intergration Services Project。(注意:如果SQL Server 装的是Express版的话是没有这个项目工程模板的)

创建好工程后,在Control Flow这个Tab下拖入一个Data Flow Task,如下图:

双击这个Data Flow Task,我们就会进入Data Flow这个Tab标签中。

然后我们在左边工具栏里找到OLE DB Source,继续拖两个OLE DB Source出来。分别给它们命名为Source DB和Destination DB。

将数据源拖出来后,双击它,可以对它进行一些设置,主要就是链接数据库及选择你要进行迁移的表或者视图等设置,这里我就不详细说明了。注意一点的是就像上图所示,如果一个图形上出现一个红X的话说明设置有错误。

再来就是拖两个Sort及一个Merge Join出来,将之前的数据源箭头分别指向两个Sort,最后两个Sort出来的数据同时输入Merge Join中。

分别双击两个Sort,钩选表中的ID,对ID这个字段进行一次排序。因为Merge Join这个流程要求输入的数据是已排序好的。这个排序也可以直接在数据源中对它们的输出字段设置SortKeyPosition这个属性来排序。(详见:http://msdn.microsoft.com/zh-cn/library/ms137653.aspx

这里我们第一次从Sort拉箭头到Merge Join的时候,会让我们选择这个输入的数据是作为左输入还是右输入,我们按照图示的那样,左边的作为左输入,右边的作为右输入。然后我们双击Merge Join,按照如下图所示设置:

这里打钩的是这个流程之后输出的数据,Join Type需要选择为Left outer join,因为左边是我们的原始数据表,右边是我们备份的表,右表可以看成是一个左表的一个子集,如果左表有的数据,右表没有的,那些就是需要新插入备份数据库的数据。

现在我们需要一个分支,即新的数据需要插入备份数据库中,而已有的数据需要更新为新的值。我们从工具栏中拖入一个Conditional Split来进行这样的分支处理。我们将Merge Sort中的输出指向Conditional Split,然后双击Conditional Split,如下图所示设置(注意条件一个是ISNULL,一个是非ISNULL)。

这时它们的输入值就被分成两种条件输出,最后我们再拖入一个OLE DB Destination来插入数据和一个OLE DB Command来更新数据库,最终流程如下图:

双击设置OLE DB Destionation,选择好数据导入的目标数据库中的表,这里需要注意的就是要钩选Keep identity这个选项,因为我创建表的时候对ID字段使用了自增属性。

双击设置OLE DB Command,首先在Connection Managers这个Tab中选择好链接对象,然后在Component Properties这个选项卡中,设置你的SqlCommand属性。如下图:

这里的参数值都是用?号来代替,之后在Column Mappings这个Tab中设置代替值实际代替的列,如下图:

至此,任务就创建完毕了,没有编写任何代码,直接拖拉完成了。现在可以直接在VS中按F5运行看下效果,我们的目标数据表将插入源数据表中的值。然后我们修改一下原数据表,再来运行一下上面这个任务,就可以在目标数据库中看到更改了。

那么如何去定时完成任务哩?这里可以用SQL Server Agent去调用上面我们写好的包, 或者在Windows计划任务中使用DTExec.exe去执行上面的任务。

(0)

相关推荐

  • 使用SSIS创建同步数据库数据任务的方法

    这些包可以独立使用,也可以与其他包一起使用以满足复杂的业务需求.Integration Services 可以提取和转换来自多种源(如 XML 数据文件.平面文件和关系数据源)的数据,然后将这些数据加载到一个或多个目标.(摘自MSDN,更多详细信息可参考:http://technet.microsoft.com/zh-cn/library/ms141026(v=sql.105).aspx) 下面我使用SSIS来演示一个实际例子.比如我有一个数据库,出于备份数据或者其它的目的,会定期的对这个数据库

  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库.使用以下方法,可以非常简单地实现. 假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb.步骤如下: 1. 首先创建新的数据库newdb #mysql -u root -ppassword mysql>CREATE DATABASE `newdb` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI; 2. 使用mysqldump及mysql的

  • redis-shake同步redis数据的实现方法

    目录 前言 redis shake 简介 基本功能 基本原理 环境准备 一.安装redis 二.redis shake使用步骤 前言 和很多同步工具一样,redis shake为同步redis数据而存在.在很多场景下,如果不使用同步工具,如果需要同步redis数据是一件相对繁琐的事情,可能需要编写代码,专门来做同步这件事,这就对开发提出了较高的要求,需要考虑到各种场景, 有了redis shake 之后,同步redis数据库数据变得容易了很多,其实我们可以猜想,它应该利用了解析redis的rdb

  • C#动态创建Access数据库及表的方法

    本文实例讲述了C#动态创建Access数据库及表的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: //添加两个com组件引用 //Microsoft ADO Ext. 2.8 for DDL and Security //Microsoft ActiveX Data Objects 2.8 Library using System; using System.Collections.Generic; using System.Linq; using System.Text

  • C#动态创建Access数据库及密码的方法

    以前工作中需要全新的Access数据库,可以复制数据库,也可以把新的数据库放到资源里面,用新数据库的时候释放出来,都感觉不爽,还是动态生成心理舒服. 生成数据库要使用ADO,首先添加引用. using System.IO; using System.Data.OleDb; //连接Access数据库 using ADOX; //引用COM:Microsoft ADO Ext. 2.8 for DDL and Security //添加引用:Microsoft ActioveX Data Obje

  • Oracle 创建用户及数据表的方法

    一.概念 1. 数据库 (Database) 什么是数据库? 数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合.这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增.删.改和检索由统一软件进行管理和控制.从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的. 什么是数据库系统? 数据库系统是一个实际可运行的存储.维护和应用系统提供数据的软件系统,是存储介质.处理对象和管理系统的集合体.它通常由

  • Java插入修改删除数据库数据的基本方法

    Java数据库之插入记录 插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,--)value (字段值1,字段值2,--) 例如: insert into ksInfo(考号,姓名,成绩,地址,简历)value('200701','张大卫'534,'上海欧阳路218弄4-1202','') 实现同样功能的Java程序代码是: sql = "insert intoksIno(考号,姓名,成绩,地址,

  • 浅谈入门级oracle数据库数据导入导出步骤

    oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp命令导入导出,避免第三方工具版本差异引起的问题,同时效率更高,但特别注意:采用命令时要注意所使用的用户及其权限等细节. 3.在目标数据库导入时需要创建与导出时相同的用户名(尽量一致),并赋予不低于导出时用户的权限:同时还需创建与原数据库相同的表空间名,若本地数据库已存在相同的表空间,则只能进行表空间

  • Linux下指定mysql数据库数据配置主主同步的实例

    一. 概念: ① 数据库同步  (主从同步 --- 主数据库写的同时 往从服务器写数据)② 数据库同步  (主主同步 --- 两台数据库服务器互相写数据) 二. 举例主主数据库同步服务器配置数据库服务器(A) 主数据库   IP:192.168.1.134数据库服务器(B) 主数据库   IP:192.168.1.138两台服务器同步的用户名为: bravedu    密码: brave123 一.主数据库操作设置(A): ① 创建同步用户名   允许连接的 用户IP地址  (非本机IP) 复制

  • 解决django同步数据库的时候app models表没有成功创建的问题

    问题描述: 在django中创建了一个app,而且在app中自定义创建了几个数据表,在同步的时候系统自带的表可以成功,但是models中的没有生效,而且进入对应app下的migrations目录,发现为空,应该如何解决呢! 解决方式: python3 manage.py makemigrations --empty managerbook  # managerbook就是你的app名字,此处要写成自己的app名字 python3 manage.py makemigrations   # 再次正常

随机推荐