- PR -

【バグ】リンクサーバーから嘘の結果が返ってくる【SQL SERVER 2005】

投稿者投稿内容
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-17 00:41
私の記憶に間違いがなければ、
フィードバックって日本語でできたような気がするのですが…。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-17 07:12
リンクサーバーは詳しくないですが。

分離レベルが低くて、ファントム等が発生しているのではないでしょうか?

分離レベルを高くしてみてはどうですか

(リンクサーバーでできるの?)

ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2008-03-17 23:41
ファントムの意味わかって言ってますか?
一つのステートメントでファントムっていったい…

[ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2008-03-17 23:46 ]
アグリッパ
会議室デビュー日: 2005/08/11
投稿数: 5
投稿日時: 2008-03-18 00:52
こんばんは

Microsoftで再現できなかったということで、照合順序が関係しているのではないかと考え、テストしてみました。

その結果ですが、テーブルを作成する際に個々のフィールドの照合順序としてJapanese_CI_ASを指定すると現象が発生するようです。
ほかの照合順序、たとえば英語圏のLatin1_General_CS_ASを指定してテーブルを作成すると発生しないようなので、Microsoftでも再現不可となったのではないでしょうか。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-18 08:33
引用:

ファントムの意味わかって言ってますか?
一つのステートメントでファントムっていったい…



[解説からの引用]

....「シリアライザブル」分離レベルを実現するのは少し面倒です。例えば
SELECT * FROM emp
WHERE empno BETWEEN 10 AND 100
といったSQL文に対してファントムが起こらないようにするためには,10から100の間のempnoフィールドを持つレコードを追加したり,削除させないようにしなければなりません。SQL Serverでは,empnoが10〜100に対してキー範囲ロック*4をかけて,ほかのトランザクションがこの間のempnoを持つレコードを追加したり削除できないようにします。....

http://itpro.nikkeibp.co.jp/article/COLUMN/20060118/227489/
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-18 09:44
引用:

indigo-xさんの書き込み (2008-03-18 08:33) より:



ファントムってのは、複数のトランザクションが同じデータにアクセスすることによって
発生するものですので、再現手順にあるように、1人が1つのトランザクションだけを
実行する状況では起こりえない、ということだと思います。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-18 10:08
すいません。そうですね。
ファントムではなく→ダーティリードですね。

(リンクサーバーの値がローカルにキャッシュされていて
ダーティリードのような動作をしているように見えます)

(言いわけですが、Select文1つでもファントムは発生します。並行であれば)
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-03-19 10:39
引用:

Microsoftで再現できなかったということで、照合順序が関係しているのではないかと考え、テストしてみました。その結果ですが、テーブルを作成する際に個々のフィールドの照合順序としてJapanese_CI_ASを指定すると現象が発生するようです。



なるほど。すばらしい洞察です。

マイクロソフト株式会社(日本)にはサービスリクエスト投げました。事象の確認はできたとのことです。それと、SQL Server 2008 では事象が確認できないようなことを言っていました。SQL Server 2008 では、この不具合が根本的に発生しないのか、別のデータなどでは発生する可能性があるのかなど詳細は分かっていません。

引用:

(言いわけですが、Select文1つでもファントムは発生します。並行であれば)


あまり恥ずかしい発言を繰り返さないほうがいい。とりあえず、select だけでファントムを発生させる方法を教えください。select だけなら 1つと言わず、いくつ使ってもらっても構いません。

スキルアップ/キャリアアップ(JOB@IT)