这与What’s your #1 way to be careful with a live database
的已接受答案有关假设您创建临时表以进行备份,并对原始表进行更改。这些更改会破坏系统,您希望还原备份。与此同时,原始表中的其他一些记录也发生了变化(它是一个实时数据库)。现在,如果还原备份,系统将处于不一致状态。
什么是解决这个问题的最佳方式
答案 0 :(得分:1)
我不认为这是可取的,在将表格投入生产之前我会更加努力,但无论如何,假设它发生了,你有两种选择:
1.-创建一个ON INSERT触发器,用于插入新表中的行来更新临时备份表,按摩数据以适应旧表
或
2.-找到这样的数据差异
SELECT * FROM faultyTable
EXCEPT
SELECT * FROM backupTable
您必须将要选择的列调整为当然的公共子集。除了有时也称为MINUS。
之后,您可以将差异插入备份表并恢复组合。表格越多,关系越多越难......根据恢复表格的方式,您可能会删除相关数据,因此您也必须选择它。
答案 1 :(得分:1)
我经常做
BEGIN TRANSACTION
-- SQL CODE
最后,如果一切正常,请选择我的SELECT和
COMMIT
,否则
ROLLBACK
答案 2 :(得分:0)
您的数据库可能会提供此功能。例如在Oracle中:
Export (Your options) consistent = y
当然,在生产在线环境中进行一致的备份会对系统造成性能损失。