0

30個のデータベースと20個のテーブルのデータを統合する必要があります。私の最初の試みは、テーブルごとに1つのデータフローを作成することでした。各データフローには30個のデータベースソースがあり、各データベースから1つのテーブルからデータを取得し、1つの宛先に挿入します。十分なメモリがないため、これは機能しません。使用されないデータを無視するようにデータをフィルタリングしようとしましたが、役に立ちませんでした。これらのタスクは毎日実行する必要があります。統合データベース全体が削除されてから、新しいデータが挿入されます。これは、毎日大量のデータが挿入されることを意味します。誰かがメモリの問題を処理する方法の提案がありますか?

今のところ私が見ている唯一の解決策は、20個のパッケージを作成することです。各パッケージには30のデータフローがあります。各データフローは、1つのデータベースからのみデータを取得します。しかし、繰り返しになりますが、実行の順序はわかりませんか?1つのパッケージのデータフローが同時に実行を開始しますか、それとも1つずつ実行されますか?

編集:

これが私がやった方法です...これが制御フローのスクリーンショットです: ここに画像の説明を入力してください

データフローのスクリーンショット: http://img833.imageshack.us/img833/355/45908206.png

すべてのデータベースから1つのテーブルに対して1つのパッケージを作成しました。この場合、各データフローはテーブルから4年前のデータを取得し、ソースデータベースにインポートします。問題は、1つのデータベースに1つのテーブルがあり、データが多すぎてエラーが返されることです。

バッファマネージャは、10484608バイトのメモリ割り当て呼び出しに失敗しましたが、メモリの負荷を軽減するためにバッファをスワップアウトできませんでした。20個のバッファーが考慮され、20個がロックされました。十分なメモリがインストールされていないか、他のプロセスがそれを使用していたか、またはロックされているバッファが多すぎるために、パイプラインで使用できるメモリが不足しています。

助言がありますか?

4

1 に答える 1

2

SSISでこれを行うことを計画している場合は、次のことをお勧めします。

  1. データベースDB1DB2 ... DB30にテーブルABC ...、RSTがあると仮定します。また、MainDBの統合データベース。

  2. データベースDB1のテーブルからデータベースMainDBのテーブルにデータを転送するための1つ以上のデータフロータスクを含むSSISパッケージを作成します。これを行うには、OLEDBソースを使用してDB1からデータを取得できます。いくつかの変換を適用する必要がある場合は、適切な変換タスクを使用してそれを行うことができます。宛先テーブルにデータを挿入するには、OLEDB宛先を使用できます。

  3. 接続文字列をパッケージ構成ファイル(dtsConfig)に保存します

  4. 所有している30個のデータベースの接続文字列をそれぞれ含む30個の異なる構成ファイルを作成します。

  5. SQL Serverエージェントの下に30個のSQLジョブを作成して、毎日の実行をスケジュールできます。

  6. 各SQLジョブは同じSSISパッケージを実行しますが、対応する構成ファイルを使用して正しいデータベースを指します。

Other options are

  1. SQLServerレプリケーションの使用。2段階のプロセスが必要です。SQLジョブを使用してMainDBのデータを切り捨ててから、データベース間でデータを同期します。

  2. RedgateIderaなどの商用製品を使用する

それがあなたにアイデアを与えることを願っています。

于 2011-08-23T07:55:52.827 に答える