我有一张超级巨大的桌子(3亿多行),我需要经常备份。我用了一个备份表来做到这一点。目前,备份表几乎落后于主表,所以我想更新我的备份表。我想复制主表上存在的行,但尚未存在于备份表中。 (此表的目的是进行一些报告)。我意识到,如果我做这样的事情将需要永远:
insert into backuptable select all from uptodatetable where not in select all from backuptable
所以,我想在一批行中做这个是个好主意。但是我之前从未使用过批次,所以你们可以帮助我吗?谢谢
答案 0 :(得分:0)
您的“超级巨额”牌桌会发生多少变化?你有很多插入和删除?很多更新?备份表的目的是什么?你需要能够查询吗?你真的想要更改一个变更日志吗?
假设您的数据很重要,您应该在SQL Server实例上运行一个备份计划,例如,每晚都会对数据库进行完整备份,并在当天定期进行增量备份。
期限的长短取决于您在失败时可以承受的损失数据(就交易而言)。如果你每60分钟采用一次增量,那么如果你必须从备份中恢复,理论上你可能会失去一小时的交易。
如果您希望备份表是一个准确的镜像,无论出于何种原因,请考虑在您的表上插入一个镜像备份表上事务的插入/删除/更新触发器。
如果您希望备份表基本上是更改的审核日志,请创建一个镜像源表的备份表,但是有一些额外的列 - 操作的日期/时间,执行操作的用户,操作type(插入/删除:将更新记录为删除后跟插入)。这样做意味着您可以通过回滚执行逆操作的审计日志来恢复到您想要的任何点。或者你可以识别有罪的一方,并在头部和肩膀上击败他们。 :D这种方法需要一点思考,但它显然是可行的。
您还可以将其他解决方案(例如log shipping)查看到单独的SQL Server实例以进行灾难恢复。