web-dev-qa-db-ja.com

レポートテーブルは、ユーザーの読み取り接続を殺すことなく更新する必要がありますか?

レポートテーブルを更新できるようにするソリューションを調査しています。レポートテーブルを更新する必要があるときに、ユーザーがそのテーブルを読み取る可能性があります。更新時にそのテーブルへのユーザーの接続を強制終了することなく、このようなことをする方法を実装した人はいますか?

3
datadawg2000

承知しました。最も簡単なことは、SNAPSHOT ISOLATIONで、またはデータベースをREAD_COMMITTED_SNAPSHOTに設定して、行のバージョン管理を使用しているレポートユーザーを確認することです。たとえば、 SQL Serverのスナップショット分離 を参照してください。

次に、トランザクションで更新を行います。レポートユーザーはブロックされず、トランザクションをコミットするまで、変更したすべての行の「古い」バージョンが引き続き表示されます。

変更に時間がかかる場合は、新しいテーブルを作成することもできます。変更が完了したら、テーブルを削除して名前を変更するトランザクションを開始するか、ALTER TABLE ... SWITCHを実行してテーブルデータをステージングテーブルに切り替えます。新しいデータをターゲットテーブルに切り替えます。