どのような状況で、SQL Server 上のテーブル内の異なる行が異なるユーザーに表示されるでしょうか?
-
01-07-2019 - |
質問
SQL サーバー バージョン 2000。
多数のデスクトップが MSSQL Server と通信しています。特定のレコードを検索すると、正しいデータを返すデスクトップもあれば、そうでないデスクトップもあります。
SQLコマンドは、1つまたは2つのデスクトップで「[no] = 6141)から[podordh from podordh from podordh where]です。これはレコードを返します。サーバー上および他のすべてのデスクトップ上では、レコードは返されません。
どの領域に注目する必要がありますか?何が原因でこのようなことが起こるのでしょうか?
解決
このエラーはおそらく、トランザクション内でそのレコードを削除または挿入したが、そのトランザクションをまだコミットしていないユーザーから発生します。
他のヒント
各マシンでどのデータベースとサーバーに接続しているかを確認します。クエリは非常に単純なので、別のデータベースまたはサーバーに接続している場合を除き、どこでも同じ答えが得られます。
行を返すワークステーションが 1 つだけの場合、そのワークステーションにはコミットされていないオープン トランザクションがあるように見えます。
そうでない場合、ワークステーションごとに分離レベルが異なる可能性はありますか。コミットされていないデータが表示されるものもあれば、表示されないものもありますか?
各マシンから異なるユーザーとしてサーバーに接続している場合は、選択しているテーブルの権限を確認することをお勧めします。
一部のユーザーがそのテーブルを読み取るアクセス権を持っているが、他のユーザーがアクセス権を持っていない場合は、説明した結果が得られる可能性があります。
上記のオプションをすべて実行したら、行ロックとテーブル ロックを検討します。この場合、ロックが発生したことを示すエラーが返されるはずです。エラーを飲み込む可能性のあるアプリケーションを実行していますか?
おそらく、レコードを見つけた 1 人または 2 人のユーザーが別のスキーマ名を使用し、したがって別のテーブルを使用している可能性があります。つまり、ほとんどのユーザーは dbo.PODORDH を使用していますが、1 人か 2 人のユーザーが otheruser.PODORDH を使用しています。