2016-07-29 3 views
0

大量のデータ(約1100万行)を含み、このデータをSQL Serverデータベースに毎日抽出するOracleデータウェアハウスがあります。SSIS 2008経由でOracleデータウェアハウスからSQL Serverにデータをインポート

SSIS Package

私はそれは毎秒約600行を処理しているが緩やかに変化するディメンションを使用してSQL ServerへのOracleからデータをインポートするパッケージを作成しました。

データが巨大であるため、新しいレコードを更新せずに挿入するか、古いレコードに何もしないでください。

他のデータフローアイテムを使って非常に速く行う方法はありますか?

+0

標準のOleDbではなくSSISのAttunity Oracleコネクタを使用してください。パフォーマンスを向上させるかどうかを確認してください。https://www.microsoft.com/en-us/download/details.aspx?id = 44582 – vercelli

+0

また、おそらく、MSSQL宛先テーブルで 'lookup'を実行し、一致する行を宛先テーブルにリダイレクトする必要があります – vercelli

+0

または、OracleからMSSQLのステージングテーブルにすべての行をコピーし、そのステージングテーブルから挿入できます。 – vercelli

答えて

0

SSISでマージ結合を利用しようとすると、新しいレコードのみが挿入された比較が可能になります。また、私はちょうどdatetimeを使用するのは好きではないデータを決定すると挿入されません、私はあなたのソースデータにもよると思います。 OracleソースデータのIDフィールドが連続していないように思えますか?もしあれば、私はそのデータと組み合わせて、どのデータを挿入するのかを考えてみましょう。これは、SQLまたはSSISで実行できます。

+0

はい私はプライマリキーでユニークなキー列を持ち、親切にいくつかのステップを提供しています –

0

600 /秒はあなたのケースではあまりにも悪くありません。 1年間に11百万個が収集されたと仮定すると、つまり、新しいレコードの数は1日あたりわずか30Kです。実行するのに約1分かかります。

最大の問題は、挿入するレコードを特定することです。
最新の挿入されたレコードを識別するために、タイムスタンプまたはシーケンシャルIDが必要な場合。

IDがシーケンシャルでない場合は、Oracle表のSSIS ONLY IDフィールドに抽出して既存のデータセットと比較し、Oracleから最新のレコードのみを要求できます。

これらのフィールドがない場合は、1100万レコードをすべて抽出し、両側でハッシュを生成してこれらのハッシュ値を比較して、挿入する新しい内容を知ることができます。

+0

私はタイムスタンプをソース側に提出していますので、最初のロード後に特定のデータを取得するためのクエリを書く必要がありますか? –

+0

データをアップロードし、古い値と新しい値との間のレコードのみを抽出するたびに、MAXのタイムスタンプ値を抽出する必要があります。次に新しい値を保存します。 –

関連する問題