none
SQLSERVER 中利用SSIS增量提取数据的解决方案 RRS feed

  • 问题

  • 目前的问题:
    数据库A中有一批表(A1,A2,A3.......),现在需要将其转移到数据库B中,由于A库中 表的数据在不停的增加,现在想做增量将A库中的数据导入到B库中,就需要判断哪些数据时新增的,目前想到的解决方法有一下三种:
    1、直接在数据库A的表中增加一个标记字段,如果已经转移了的数据就标记一下,由于A库中表的数据量很大(至少千万级以上),这种更新会很慢,效率太低
    2、根据数据库中的时间字段来查找,按时间戳来判断哪些数据已经被转移,但是这种数据过程如果遇到表中没有时间字段的表,就需要人为加一个时间字段,另外还要添加一个起止时间的维护表,记录哪次取了哪个时间区间的数据
    3、利用SQLSERVER2008企业版中的CDC功能将变更的数据存在cdc创建的中间表,然后从这个表中去取增量数据,虽然依然是要时间段来取,但是它会自动保存上一次取之后的最大序号

    目前来说,最好的方法好像是第三种,利用SQLSERVER2008企业版中的CDC功能,但是企业版太贵啊,有没有sqlserver标准版就能解决此问题的方法,请各位指教,谢谢
    2012年6月5日 15:11

答案

  • 看楼主的描述,是直接的数据同步,所以Replication的方案更优

    CDC的方案,适用于那种需要知道数据变更,并且需要根据这个变更的数据去进行比较复杂的处理,而不是简单的同步,比如 数据仓库的数据抽取,很多时候并不是原样的把变更的数据抽取到数据仓库,而是有一系列的清理转换,这种情况Replication就不适用了

    2012年6月6日 1:09

全部回复

  • How about replication?
    2012年6月5日 16:51
  • 那就用 replicaton 好了,事务复制就可以了,这也是增量的

    2012年6月6日 1:05
  • 看楼主的描述,是直接的数据同步,所以Replication的方案更优

    CDC的方案,适用于那种需要知道数据变更,并且需要根据这个变更的数据去进行比较复杂的处理,而不是简单的同步,比如 数据仓库的数据抽取,很多时候并不是原样的把变更的数据抽取到数据仓库,而是有一系列的清理转换,这种情况Replication就不适用了

    2012年6月6日 1:09
  • 关于版本的问题,按楼主的描述,使用更改跟踪(Change Tracking)就行了(你关注的是变更了的行是那些(主键,基于是那些列有更改),而不是关心具体变化的内容),这个在各个版本都是支持的

    2012年6月6日 1:17
  • 目前的问题:
    数据库A中有一批表(A1,A2,A3.......),现在需要将其转移到数据库B中,由于A库中 表的数据在不停的增加,现在想做增量将A库中的数据导入到B库中,就需要判断哪些数据时新增的,目前想到的解决方法有一下三种:
    1、直接在数据库A的表中增加一个标记字段,如果已经转移了的数据就标记一下,由于A库中表的数据量很大(至少千万级以上),这种更新会很慢,效率太低
    2、根据数据库中的时间字段来查找,按时间戳来判断哪些数据已经被转移,但是这种数据过程如果遇到表中没有时间字段的表,就需要人为加一个时间字段,另外还要添加一个起止时间的维护表,记录哪次取了哪个时间区间的数据
    3、利用SQLSERVER2008企业版中的CDC功能将变更的数据存在cdc创建的中间表,然后从这个表中去取增量数据,虽然依然是要时间段来取,但是它会自动保存上一次取之后的最大序号

    目前来说,最好的方法好像是第三种,利用SQLSERVER2008企业版中的CDC功能,但是企业版太贵啊,有没有sqlserver标准版就能解决此问题的方法,请各位指教,谢谢

     Hi flymolgee,如果你用ssis来导增量的话,那么你可以为原表加个rowversion类型的列,根据它来做数据同步。

    2012年6月6日 1:37