- PR -

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

投稿者投稿内容
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-19 12:46
文章だけで伝えるのはむずかしいですね。(反省しています)

(。。。。並行であればて書いているのに)

(最初に書いた内容もよく読んでほしいですね。私が言いたいのは
 ファントムではなく分離レベルが低いじゃないですか?分離レベルは
 ステートメントではなくACIDレベルで低いじゃないか?リンクサーバー
 が特に低いんじゃないかと言っているんです)
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-03-19 13:29
引用:

ACIDレベルで低いじゃないか?リンクサーバーが特に低いんじゃないかと言っているんです


ええっと、私もデータベースに詳しくないので良くわからないのですが、SQL Server には ACID つまり完全性を持たせずに稼働させる高速モードがあるんですか? それで、そのモードだと古いキャッシュを読んだり、適当なデータを返すことによってパフォーマンスを向上させているということでしょうか。さらに不幸なことに、リンクサーバーについては、その「いい加減だけど速いよモード」がデフォルトで有効になっているということなんですね?

それは非常に危険ですね。ぜひ、リンクサーバーの「いい加減だけど速いよモード」を解除する方法を教えてください。私は、ACID がないデータベースなんてデータベースとして使えませんので。よろしくお願いします。

# まさか分離レベルのことじゃないですよね?
# 今回の事象は SERIALIZABLE でも発生するので分離レベルは関係ないし。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-19 13:41
だから、可能性を言っているだけです。

だがら「低いんじゃないか?」と言っているのです。

原因は全ての可能性を見ることからわかるのです。

貴方の論理なら
 「Japanese_CI_ASを指定すると現象がでる」なんて見つけようがないです!!!
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-03-19 13:57
引用:

だから、可能性を言っているだけです。だがら「低いんじゃないか?」と言っているのです。
原因は全ての可能性を見ることからわかるのです。


そんなことは分かっています。何をムキになっているんですか? 私はあなたの推測を否定していないのですよ。むしろ、あなたを信じているような文章に仕上がっているはずです。

あなたの推測が正しいかどうか確認したいと思っていますので、「いい加減だけど速いよモード」を解除する方法を教えてください。解除方法が分からないことには、今回の事象が発生しなくなるかどうか確認することすらできませんよね?

設定が難しく説明するのが面倒ということであれば、google で検索して自分で調べてみますので、検索キーワードだけでも教えてください。よろしくお願いします。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-19 19:42
ハニワ祭りさん解決済みでしょうか?

下記のURLを参照してください。
 分散クエリに関する重大な記述があります。

 [照合順序互換]

http://msdn2.microsoft.com/ja-jp/library/ms186839.aspx

環境が無いので確認できないですが(原因はこれかと思います)
参考になればと思います。
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2008-03-20 11:35
引用:


下記のURLを参照してください。
 分散クエリに関する重大な記述があります。

 [照合順序互換]

http://msdn2.microsoft.com/ja-jp/library/ms186839.aspx

環境が無いので確認できないですが(原因はこれかと思います)
参考になればと思います。



「照合順序互換」をTrueに設定しても、Falseに設定しても状況は変化しませんでした。
なので、仮にそれが原因だとしても問題の回避手段は用意されていないようです。
つまりマイクロソフトは問題が発生する可能性があることを知りつつも、
問題の対策をせず放置しているという状況なのかもしれません。

それと照合順序についてJapanese_CI_ASだけでなく、
Japanese_BIN でも問題は再現しました。


[ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2008-03-20 11:44 ]
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-20 12:32
そうですか、残念です。

あと気になる点があったので書きます。

リンクサーバーの低レベルはDBプロバイダにの実装に依存するらしい記述
があったので、DBプロバイダを変更してはどうでしょうか?
またはOLE DBプロバイダオプションがあるのでそちらも確認してはどうでしょうか?

(NestedQueries と IndexAsAccessPathあたり?)

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/adminsql/ad_1_server_8ib7.asp

(多分、今はこれですよね。Microsoft OLE DB Provider for SQL Server)


追加です。

 OpenQueryとOpenRowSetを使用してSelect文を書き直してはどうでしょうか?
 もしこれでうまく行けば。ローカルでキャッシュのようなものが動作して
 変な結果が出ていると思います。


[ メッセージ編集済み 編集者: indigo-x 編集日時 2008-03-20 16:04 ]
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-05-04 23:35
マイクロソフトから回答がありました。

・SQL Server 2005 の不具合である。
・主キーとUNIQUE制約をはずすと回避できる。
・SQL Server 2008 では当該不具合は発生しない。
・不具合ではあるが修正について(時期や次のサービスパックに含まれるかどうかなど)約束できることはない。
・QFE(Quick Fix Engineering)の作成を要求することもできる。

ということでした。QFEの要求には、当該不具合で実際にどのような影響が出るか(ビジネスインパクト)を報告する必要があるため、私のほうではQFEの要求まではおこないませんでした。

間違った結果を返すってデータベースエンジンとして致命的だと思うんですけどね。実際のビジネスインパクトを報告しないと、すぐには対応しないんですって。マイクロソフトのサポートなんてこんなもんです。

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