大規模な(数千万レコードの)データベースがあり、データベースの完全バックアップを実行します。
ただし、データベースは十分に大きいため、バックアップの実行前および実行中にトランザクションを開始できるだけでなく、バックアップの実行中および実行後にコミットすることもできます。
例えば:
T0 = Transaction A start
T1 = Full database backup start
T2 = Transaction B start (will not deadlock with A)
T3 = Transaction A commit/rollback (does not matter, does it?)
T4 = Full database backup end
T5 = Transaction B commit/rollback (again, does not matter, does it?)
T0 T1 T2 T3 T4 T6
||----------||----------||----------||----------||----------||---------->
私の理解では、バックアップ中にロックは使用されません(ただし、I / Oが高いために他のパフォーマンスの問題が発生する可能性があります)が、何がコミットされるかどうかは保証できません。
また、私の懸念は、データベースが一貫性のない状態になることではなく、その状態がどのようになるか(たとえそれが確定的ではなくても、一貫して適用できる一連のルールがある場合)と、そこに到達する方法(たとえば、バックアップファイルを作成するためにトランザクションログと一緒にどのくらいのデータファイルが使用されますか?