- - PR -
【バグ】リンクサーバーから嘘の結果が返ってくる【SQL SERVER 2005】
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-03-17 00:41
私の記憶に間違いがなければ、
フィードバックって日本語でできたような気がするのですが…。 | ||||||||
|
投稿日時: 2008-03-17 07:12
リンクサーバーは詳しくないですが。
分離レベルが低くて、ファントム等が発生しているのではないでしょうか? 分離レベルを高くしてみてはどうですか (リンクサーバーでできるの?) | ||||||||
|
投稿日時: 2008-03-17 23:41
ファントムの意味わかって言ってますか?
一つのステートメントでファントムっていったい… [ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2008-03-17 23:46 ] | ||||||||
|
投稿日時: 2008-03-18 00:52
こんばんは
Microsoftで再現できなかったということで、照合順序が関係しているのではないかと考え、テストしてみました。 その結果ですが、テーブルを作成する際に個々のフィールドの照合順序としてJapanese_CI_ASを指定すると現象が発生するようです。 ほかの照合順序、たとえば英語圏のLatin1_General_CS_ASを指定してテーブルを作成すると発生しないようなので、Microsoftでも再現不可となったのではないでしょうか。 | ||||||||
|
投稿日時: 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/ | ||||||||
|
投稿日時: 2008-03-18 09:44
ファントムってのは、複数のトランザクションが同じデータにアクセスすることによって 発生するものですので、再現手順にあるように、1人が1つのトランザクションだけを 実行する状況では起こりえない、ということだと思います。 | ||||||||
|
投稿日時: 2008-03-18 10:08
すいません。そうですね。
ファントムではなく→ダーティリードですね。 (リンクサーバーの値がローカルにキャッシュされていて ダーティリードのような動作をしているように見えます) (言いわけですが、Select文1つでもファントムは発生します。並行であれば) | ||||||||
|
投稿日時: 2008-03-19 10:39
なるほど。すばらしい洞察です。 マイクロソフト株式会社(日本)にはサービスリクエスト投げました。事象の確認はできたとのことです。それと、SQL Server 2008 では事象が確認できないようなことを言っていました。SQL Server 2008 では、この不具合が根本的に発生しないのか、別のデータなどでは発生する可能性があるのかなど詳細は分かっていません。
あまり恥ずかしい発言を繰り返さないほうがいい。とりあえず、select だけでファントムを発生させる方法を教えください。select だけなら 1つと言わず、いくつ使ってもらっても構いません。 |