0

大量のデータを定期的にプルする必要があるリモート SQL サーバーがいくつかあります (サーバーあたり 5,000,000 行など)。このデータもフォーマットして別のサーバーに FTP 送信する必要があります。ダイヤルアップ部分は問題なく、サーバーに接続して通信できますが、接続が遅く、19Kbps しかない場合があります。

接続したら、System.Data.SqlClient.SqlBulkCopy を使用しようとしましたが、タイムアウト エラーが発生するだけです。一括コピーのタイムアウトを 7200 秒に設定し、各データベースへの接続文字列のタイムアウトを 900 秒に設定しましたが、それでも約 30 秒でタイムアウトします。

DataReader を使用して SqlCommand.ExecuteNonQuery() を実行して各行を挿入しようとしましたが、これは正常に機能しますが、速度が遅く、接続が失われることがあります。

また、リモート サーバーに DTS パッケージをセットアップし、テキスト送信に必要なデータをダンプするようにスケジュールしてから、ファイルのダウンロードを試みました。ただし、数百 MB (一部のサーバーでは GB になることもあります) になる可能性があり、通常、ダイヤルアップ接続はある時点で切断されます。

4

7 に答える 7

2

オプションの場合は、圧縮して ftp し、自分で一括挿入を行ってください。

于 2009-01-13T20:09:35.153 に答える
1

このトピックに関するいくつかの考え:

  • ソースでルーチンを作成してデータを抽出し、それをいくつかの小さなファイルに分割します。ファイルを個別に FTP で送信し、すべてのファイルが到着したことを確認するためのチェック機構を用意します。

  • ソースで変更されたデータまたは新しいデータを識別できる場合は、何らかの変更されたデータ キャプチャ機能をソースに配置し、デルタのみを出荷します (既に行っている場合は申し訳ありません)。

  • チャンク ファイルを圧縮して、出荷するデータ サイズを減らします。

于 2009-01-13T20:17:29.550 に答える
1

何マイル離れていますか?DVDをスニーカーネットできますか?

于 2009-01-13T20:07:57.557 に答える
0

私がやったことは、Cで小さなアプリを作成することでした(これらのいくつかはWINNTであり、これが最も簡単な方法でした。必要に応じて、ソースを変更することなく、他の人が手動でデータを取得することもできます)。必要なクエリを作成します。次に、クエリを実行し、結果を必要なCSV形式でダンプします。次に、最高の圧縮レベルで7zipを呼び出して、データを可能な限り小さく圧縮します(これにより、500MBのファイルが約20MBに削減されます)。

データを必要な場所にFTPで転送する前にデータを戻す必要があり、リモートサーバーにはインターネットアクセスがないため、ファイルをWindows共有にコピーしてから、ローカルで解凍して圧縮されていないデータを(要求に応じて)宛先にFTPで転送します。

これは最善のアプローチではないかもしれませんが、機能しています。ありがとう

于 2009-01-14T16:15:58.697 に答える
0

bcp.exeは、SQLステートメントの出力をフラットテキストファイルにダンプできる「out」パラメータをサポートしています。

  • ソース側:ファイルをダンプ、zip、および小さな部分に分割し、アップロードします
  • 宛先側:ファイルがすべて揃ったら、ファイルをダウンロード、解凍、再結合し、bcpを実行します。

それはエレガントな解決策ではありません。プログラムで実行したい場合は、プロセス呼び出しを行います。しかし、それは仕事を成し遂げます。

ただし、質問したいのは、ブロードバンド接続がない場合と接続する場合(可能な場合)の制限を回避するソリューションを作成することで、費用対効果がどれほど高いかということです。決定したソリューションに関係なく、ダイヤルアップの使用に関して継続的なメンテナンスの問題が発生することを期待しています。

于 2009-01-13T20:46:05.547 に答える
0

おそらく、組み合わせアプローチを使用する必要があります。

  • テーブルをネイティブ形式で BCP OUT します。

  • 一連のファイルを作成するツールでファイルを圧縮します。

  • 個々のファイルを ftp します。送信を続行できます。

私は、7Zip (無料のオープンソース) が最高の圧縮率を持ち、指定したサイズの一連の番号付きファイルを作成することを発見しました。コマンドラインから実行できると思います。

HTH アンディ

于 2009-01-14T00:33:09.613 に答える
0

.NET に組み込まれている ZIP 形式を使用してデータを圧縮します。

http://www.windowsdevcenter.com/pub/a/windows/2006/09/12/using-data-compression-in-net-20.html

それでもデータが大きすぎる場合は、外部ライブラリ/実行可能ファイルを使用して RAR または 7Zip でデータを圧縮すると、ZIP コピーの半分のサイズになります。

于 2009-01-13T20:09:19.443 に答える