2011-08-23 12 views
2

トランザクションを開始してもCOMMITを呼び出すことはできません。データはどうなりますか? 私は小さなデータベースを持っています(例えば、100万程度のSKU)。私はそれを小さな偶数1024桁のチャンクにエクスポートしています。
エクスポートされたレコードにフラグを立てる必要があります。SQLはコミットのないトランザクションを開始します

例:エクスポートされたセットを更新する= 1 sku = '1234';

今や、私はサードパーティのファイル書き込みツールをクラッシュさせる問題があります。 これは、指定されたレコードのファイルが作成される前に発生します。

私はレコードを更新する前にトランザクションを開始し、ファイルが作成されたことを確認した後にコミットすると思っていました。

これにより、双子を持たないいくつかの開始取引が発生する可能性があります。

2つの質問..良い方法がありますか? (バグのあるサードパーティを取り除くことは別として) 決して決してコミットされなかったトランザクションの一部だったレコードはどうなりますか?

答えて

4

トランザクションは、接続プールが完全に閉じられるまで(接続プールに戻るだけでなく)、ロック付きで開いたままになります。これは、明示的なトランザクションなしでUPDATEを行い、1024行のチャンクを管理し、あなたがこれを「処理」、「エクスポート」を持っているステータスカラムを使用するように変更することができ、この

UPDATE TOP (1024) 
    Products 
SET 
    exported = 1 
OUTPUT 
    INSERTED.* 
WHERE 
    exported = 0; 

ような何かを行うには悪い

ですあなたが物事が読み込まれたが、エクスポートされていないときを知っているので、

+0

私がこれを持っている唯一の問題は、私はファイルが書き込まれるまでレコードをエクスポートしたことを知らないということです。私は "宣言された"テーブルを作成し、最後の段階でデータをHDに宣言したものにプッシュすることができます。取引に関する情報をありがとう。 – baash05

関連する問題