公司在A城市有一个服务器,其中有几张表需要每5分钟备份一次到B城市。由于备份的跨地域性和频率比较高,没有采用SQL Server 2005自带的数据备份方案。您觉得什么样的方案比较合适呢?考虑到A城市的服务器容错能力有限,所以有这种需求~
单表数据量是几万条记录,可能会有多张表
如果数据量大,且远程传输,那么高频率的全数据备份我认为不可取。
只能是差分备份——传输5分钟内的数据变化,到备份服务器,更新差分到备份数据库。
但是这样绕了一圈,又回到SQL Server自带的功能上了......
你又说
[quote]没有采用SQL Server 2005自带的数据备份方案[/quote]
但是备份日志总会有吧。主服务器生成处理后,自己用程序压缩,传输到备份服务器,解压,恢复。不知道这样算不算用了“自带的数据备份方案”。
话说回来,用SQL Server2005这种付费的东西,又不去使用它的功能,很奇怪哈。
差分备份不放心的话,再加个定时(比如每日)的全备份。
我不大赞成在表级别上做文章,少的时候还好说,多了的话比较麻烦。
1.window 任务 整个 bat
2.自己写个代码,比如:定时任务类似功能的代码。。。
数据不做delete操作,增加一个标志位,标识知否可用,每张表加个timestamp时间戳字段,每隔5分钟去库中查询时间戳在5分钟内的数据,用replace into 到备份的数据库,我公司的报表库就是这样同步数据的。
[b]A、B城市服务器各一个程序[/b]
写个程序放A城市的服务器(程序A),同时写一个程序放B城市服务器(程序B)。
程序A每次备份几张表的数据以后,稍做封装,以减小网络传输的代价,通过Socket方式传给程序B,程序B对数据进行处理和存储。
[b]备份的数据如何传递到另一城市[/b]
个人觉得最好不要通过程序A备份数据后直接存入到B城市的数据库中,也不要通过程序B直接访问A城市的数据库备份数据。这样远程访问数据库代价很大,会很慢的,而且很多阻塞的时间纯粹是浪费青春。还是把数据通过Socket的方式自己传递比较好,自己也好优化。这里Socket的方式最好选择TCP,毕竟是在备份数据,安全第一。
[b]每次备份任务完成后等5分钟执行下一次任务[/b]
每次备份任务完成后,程序A就等5分钟再执行下次任务。之所以不是每隔5分钟就开始执行,是因为备份数据的时间有时可能会比较长,不要这次备份刚完成没多久,下次备份又开始了。
[b]备份的数据远程传递中的问题[/b]
1、涉及到数据如何封装,尽量简短,以减小网络传输的代价。
2、还有如何保证数据库完整性的问题,特别是这一块需要好好设计一番。每次任务当中,B要知道A传递过来了多少数据包,哪些数据包丢失了,要通知A重新传,然后需要重新传的数据包,A要知道怎么再次去数据库里取出来(比如每个数据包就是某时间字段在某时间范围内的数据)。