使用临时备份表时保持一致性

时间:2008-10-04 15:57:00

标签: database

这与What’s your #1 way to be careful with a live database

的已接受答案有关

假设您创建临时表以进行备份,并对原始表进行更改。这些更改会破坏系统,您希望还原备份。与此同时,原始表中的其他一些记录也发生了变化(它是一个实时数据库)。现在,如果还原备份,系统将处于不一致状态。

什么是解决这个问题的最佳方式

3 个答案:

答案 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

当然,在生产在线环境中进行一致的备份会对系统造成性能损失。