积极答复者
SQLSERVER 中利用SSIS增量提取数据的解决方案

问题
-
目前的问题:
数据库A中有一批表(A1,A2,A3.......),现在需要将其转移到数据库B中,由于A库中 表的数据在不停的增加,现在想做增量将A库中的数据导入到B库中,就需要判断哪些数据时新增的,目前想到的解决方法有一下三种:
1、直接在数据库A的表中增加一个标记字段,如果已经转移了的数据就标记一下,由于A库中表的数据量很大(至少千万级以上),这种更新会很慢,效率太低
2、根据数据库中的时间字段来查找,按时间戳来判断哪些数据已经被转移,但是这种数据过程如果遇到表中没有时间字段的表,就需要人为加一个时间字段,另外还要添加一个起止时间的维护表,记录哪次取了哪个时间区间的数据
3、利用SQLSERVER2008企业版中的CDC功能将变更的数据存在cdc创建的中间表,然后从这个表中去取增量数据,虽然依然是要时间段来取,但是它会自动保存上一次取之后的最大序号
目前来说,最好的方法好像是第三种,利用SQLSERVER2008企业版中的CDC功能,但是企业版太贵啊,有没有sqlserver标准版就能解决此问题的方法,请各位指教,谢谢
答案
-
看楼主的描述,是直接的数据同步,所以Replication的方案更优
CDC的方案,适用于那种需要知道数据变更,并且需要根据这个变更的数据去进行比较复杂的处理,而不是简单的同步,比如 数据仓库的数据抽取,很多时候并不是原样的把变更的数据抽取到数据仓库,而是有一系列的清理转换,这种情况Replication就不适用了
- 已建议为答案 Molly Chen_Moderator 2012年6月7日 6:42
- 已标记为答案 Molly Chen_Moderator 2012年6月12日 2:29
全部回复
-
看楼主的描述,是直接的数据同步,所以Replication的方案更优
CDC的方案,适用于那种需要知道数据变更,并且需要根据这个变更的数据去进行比较复杂的处理,而不是简单的同步,比如 数据仓库的数据抽取,很多时候并不是原样的把变更的数据抽取到数据仓库,而是有一系列的清理转换,这种情况Replication就不适用了
- 已建议为答案 Molly Chen_Moderator 2012年6月7日 6:42
- 已标记为答案 Molly Chen_Moderator 2012年6月12日 2:29
-
目前的问题:
数据库A中有一批表(A1,A2,A3.......),现在需要将其转移到数据库B中,由于A库中 表的数据在不停的增加,现在想做增量将A库中的数据导入到B库中,就需要判断哪些数据时新增的,目前想到的解决方法有一下三种:
1、直接在数据库A的表中增加一个标记字段,如果已经转移了的数据就标记一下,由于A库中表的数据量很大(至少千万级以上),这种更新会很慢,效率太低
2、根据数据库中的时间字段来查找,按时间戳来判断哪些数据已经被转移,但是这种数据过程如果遇到表中没有时间字段的表,就需要人为加一个时间字段,另外还要添加一个起止时间的维护表,记录哪次取了哪个时间区间的数据
3、利用SQLSERVER2008企业版中的CDC功能将变更的数据存在cdc创建的中间表,然后从这个表中去取增量数据,虽然依然是要时间段来取,但是它会自动保存上一次取之后的最大序号
目前来说,最好的方法好像是第三种,利用SQLSERVER2008企业版中的CDC功能,但是企业版太贵啊,有没有sqlserver标准版就能解决此问题的方法,请各位指教,谢谢Hi flymolgee,如果你用ssis来导增量的话,那么你可以为原表加个rowversion类型的列,根据它来做数据同步。