日期:2014-05-17  浏览次数:20502 次

数据迁移方案讨论--欢迎大家赐教
本帖最后由 wufeng4552 于 2013-08-05 17:49:30 编辑
场景:
一个7X24运转的logdb每天需要数据迁移
按照规定每个table只保留当天的数据
其它的数据转移到
logbackupdb上去
大概100多张表
也就是每天都要进行数据的转移
大家有好的解决方案
欢迎讨论

我目前有两个方案
方案一:是每天备份数据库,将备份文件拿到目的服务器上还原,然后通过脚本将数据插入到备份库
考虑到表比较多 类似的logdb也比较多,操作起来比较麻烦
方案二:在logdb上建立链接服务器,直接在logdb上删除数据的同时将数据插入logbackupdb中
由于是7X24在线服务,这种方案对db压力会增加,同时安全性也难得到保证
PS:类似的需要需要转移的logdb会有很多(几十个到几百个)
大家有什么其他的方案,不惜赐教 谢谢



------解决方案--------------------
分区表,每天交换分区到历史表,历史表每天重建一张。


其他的就只能从设计上修改方案,避免单表过大了。
------解决方案--------------------
建议方案二,
补充: 
1.删除数据时,为减少对日志文件的冲击,建议分批删除,例如一次删除1000笔记录..
2.转移数据时,为提升速度,建议取消logbackupdb上表约束,如foreign key,check,unique..
------解决方案--------------------
分区表最快,因为只需要改动元数据。
------解决方案--------------------
--#1.分区表想SWITCH切换,需要索引与分区对齐;而且把表全部换成分区表,也不容易;还有就是得维护分区的自动增长。
--#2.SQLSERVER一般提供数据库级(日志传送,镜像等)及对象级(复制)技术。基于每个数据库,几百个的确有点儿多。没有好的办法建议。楼主可以参考下#3.
--#3.利用快照复制,假如有10个数据库,100张表(每个数据库10张表),针对每一个数据库:
1.发布:建立快照复制,加上过滤条件:小于GETDATE,大于当天0点。初始化时截断订阅表数据。
2.订阅:建立一个tempData数据库,对应发布中的100张表。
3.把tempData数据库中的数据写到目标表中:对每张表建立一个触发器,目的是把快照过来的数据INSERT到目标表,当然这儿在创建快照时要启动允许触发器选项。
4.成功后,往自定义的复制历史表中写成功标志,这样,发布端就可以删除这些数据了。
此方法优点:快速,由于原理是BCP,再加上触发器是在备份服务器上执行。对发布服务器影响不大。一次配置,不用再动,只用监控一下复制历史表。
此方法缺点:配置麻烦些。也不知道是否适合楼主的业务需求。

不过,个人觉得日志传送,或手工备份,还原,也是不错的办法。只要能实现自动化,就是好方法。。。
------解决方案--------------------
对IO影响的大小,在于数据COPY量的大小,可以计算出来
如何调度,得综合权衡。。技术是死的,人(设计的方案)是活的
------解决方案--------------------
楼上说的很对 对于IO的大小要看备份量。另外可以考虑用SSIS迁移数据。删除数据的时候每次删除少量,否则容易锁升级影响应用程序使用。