トランザクションが正常にコミットされた場合、データベースとログファイルに書き込まれたことを100%確認できますか?データが保存されていることを確認できますか?
今日、ログファイルはドライブの制限に達し、多くのエラーが発生しました。さらに、他のいくつかのサービスがクラッシュしました。ディスクを増やし、サーバーを再起動しました。
起動時に、サーバーは「データベースの回復」を行いました。すべてが再び正常に動作することを確認できますか?
2
リカバリの完了後にエラーログをチェックして、コミットされたトランザクションの数とロールバックされたトランザクションの数を確認できます。これに対する魔法の答えはありません。ディスクがクラッシュした場合、その時点でのトランザクションの状態にすべて依存します。
—
アーロンバートランド
@AaronBertrandしかし、トランザクションが「コミット」状態にある(つまり、コミットが成功した)場合、回復中に失われたままになる可能性はありますか?
—
SQLポリス
@Giosco:できません。「コミット」とは、データベースのログファイルにあることを意味します。それを失う唯一の方法は、1)データファイルに保存される前にログファイルを失うか、2)ログファイルとデータファイルの両方を失うか、3)人的エラーのいずれかです。通常、(3)が最も可能性が高いことに注意してください。
—
–RBarryYoung
@Gioscoは、フルドライブの時点でのすべてのトランザクションが正常にコミットされたことをどのように知っていますか?
—
アーロンバートランド
ストアドプロシージャ<>トランザクション-ストアドプロシージャに複数の明示的なトランザクションを含めることができます。または暗黙的にのみ、try / catchロジック、C#レイヤーでのトランザクション処理などを行うことができます。全面的な声明としては少し危険すぎるかもしれません。
—
アーロンバートランド