2011-06-21 5 views
0

私は現時点でバッチ処理を行っており、実行には最大1時間かかることがあります。データベース集約的ではありません。ウェブコールのようなものがたくさんあるだけです。ReadOnlyリクエストを許可するトランザクションを作成することはできますか?

私はトランザクション全体が包まれているので、何かがうまくいかない場合、私はロールバックします。

このトランザクションは、データベースに書き込む要求のみをブロックし、読み取り専用ではないようにすることはできますか?そうでない場合は、どうしてですか?これはデータベースの自然な制限ですか?

私は.net 4.0で、このタスクにはTransactionScopeを使用しています。

+2

1時間の取引がありますか?私はそれが正しいことを理解しましたか? –

+0

ええと...中にはdbにアクセスすることはできません。これは本当に悪い考えですか? – Diskdrive

+1

これはひどい考えです。ステージングテーブルにロードして、一括転送します。 – jason

答えて

1

これを行わないでください。ステージングテーブルにロードします。操作が完了したら、実際の表に一括転送します。

0

一般的に、このようなものはまったく成功しません。ほとんどのリソースマネージャーは、デフォルトではトランザクションがその間続くことはありません。もしそうであれば(そして複数のリソースマネージャーが関わっている場合)、更新/変更されているデータの量に応じて、トランザクションをコミットする行為非常にと長くかかることがあります。

プロセス中にデータベースへのアクセスをブロックするだけの場合は、データベースにフラグを設定しておき、フラグが設定されていればアプリケーション内の他の機能を使用しない方がよいでしょう。

フラグが格納されているアプリケーションの範囲が影響を与えることができます。 1つのインスタンスしか実行していない場合は、フラグをメモリに格納できますが、複数のインスタンスがある場合は、たびにデータベースをチェックする必要があります。

関連する問題