以下の場合の SQL Server の動作を理解しようとしています。
SQL Server で作成されたリンク サーバーを使用して、Oracle から SQL Server 2005 データベースに約 50 万行をフェッチしています。クエリに約 50 の奇数列を使用していInsert Into select
ます。
クエリが終了せず、手動で停止するまで無期限に実行されていたことがわかりました。しかし、宛先テーブルを確認すると、約1時間後にテーブル内の行を見つけることができました。ただし、クエリの実行は停止せず、宛先テーブルの排他ロックも解除されませんでした。
Oracle リンク サーバーで単純なクエリを実行したとき、Oracle と SQL Server のデータ型の一部を明示的に変換する必要があることがわかりました (特に Oraclenumeric
から SQL Server へVarchar
)。
この問題が発生したすべてのデータ型が明示的に変換された後、クエリが正常に停止し、テーブルの排他ロックが解放されるなど、問題なくフェッチ全体を完了することができました。
私が持っている質問は、クエリでデータ型変換の問題があるにもかかわらず、クエリがすべてのデータをフェッチしたのはなぜですか?また、すべてのデータをフェッチした後でもロックを保持したのはなぜですか? これに対する説明は非常に高く評価されます(問題は解決されていますが:))