2

古いシステム (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 プロバイダー: 指定されたネットワーク名は使用できなくなりました。

理由になる可能性のあるアイデアは非常に高く評価されます

ありがとうございました、

サイフ

4

1 に答える 1

0

「指定されたネットワーク名は利用できなくなりました」と言うでしょう。エラーは、リモート サーバーからの応答がないことを示します。SQL Server はしばらくの間リモート サーバーから「受信」していないため、あきらめます。バッチサイズを非常に小さいものに削減し、成功すると増加します (その逆ではありません)。そうすれば、うまくいくバッチサイズを見つけることができます。また、これは「顧客」への接続 (回線の種類とサイズ、回線上のトラフィックなど) に応じて「顧客」間で異なる場合があります。

個人的には、BCP OUT/BCP IN オプションが機能することはわかっているので気に入っていますが、リモート サーバーからのデータの転送方法を考慮する必要があります。専用の T1 以上の堅牢なエンタープライズ MFT を使用している場合は、おそらく問題はありません。

SSIS はより直接的な転送を提供しますが、現在抱えているのと同じネットワークの問題に遭遇することになると思います。つまり、SSIS 内で一般的な BCP ソリューションを作成できます。

于 2012-06-16T17:48:18.493 に答える