古いシステム (SQL サーバー 2008) から新しいシステム (SQL サーバー 2012) への移行を行っています。使用しているデータ ソースはリモートであるため、リンク サーバーとして構成されており、ソースのデータは移行しています。特別なデータ(地理タイプ) があり、顧客ごとにデータを移行しているため、一部の顧客は他の顧客よりも多くのデータを持っています。データをバッチ処理し、OPENQUERYを使用して空間データを取得しています。データが少ない顧客の場合、移行はスムーズに進み、正常に完了しますが、1 つのテーブルに数百万件を超えるレコードがある顧客の場合、移行は停止し、主に 2 つのエラーが発生します。
これはエラーがどのようになるかです:
リンク サーバー "xxx" の OLE DB プロバイダー "yyy" から、"クエリ タイムアウトの期限が切れました" というメッセージが返されました。メッセージ 7399、レベル 16、状態 1、サーバー nnn、行 1 リンク サーバー "xxx" の OLE DB プロバイダー "yyy" がエラーを報告しました。リソース制限に達したため、プロバイダーによって実行が終了されました。メッセージ 7320、レベル 16、状態 2、サーバー ttt、行 1 クエリを実行できません "
select top (200000)
[row] = row_number () over ( order by t.[x])
, .....
, [Spatial] = cast(ts.[Spatial] as varbinary(max))
from [..].[..].[..] t
join [...].[..].[… ] s
on t.[..] = s.[...]
where (t.[x] > '00000000-0000-0000-0000-000000000000')
and v.[x] = x
order by t.[x]
" リンク サーバー "xxx" の OLE DB プロバイダー "yyy" に対して。ビルド ステップ 'Windows バッチ コマンドの実行' でビルドが失敗としてマークされました
また、この問題は、空間データが含まれていない別のテーブルでも発生しました。
私たちが従おうとしたアプローチ. クエリのタイムアウトを増やしました. バッチサイズをバッチごとに 200,000 に落としました. プロバイダは「プロセスモード」です. カップルのリンクサーバーしかないので, バッファサイズは許容範囲を超えています.権限の問題ではないことを確認するために、管理者ロールを使用して移行を実行しようとしました これはネットワークの問題である可能性があると考えていますが、ロード バランサーの問題ではありません。多分それは別の何か、
頻繁に発生する他のエラーは
HResult 0x40、レベル 16、状態 1 TCP プロバイダー: 指定されたネットワーク名は使用できなくなりました。
理由になる可能性のあるアイデアは非常に高く評価されます
ありがとうございました、
サイフ