sql >> データベース >  >> RDS >> Oracle

SSISがパッケージの保存に失敗し、VisualStudioを再起動します

    データをチャンクで読み取ることをお勧めします:

    テーブル全体をロードする代わりに、データをチャンクに分割してSQLServerにインポートしてみてください。しばらくして、SQLiteに関連する同様の回答に答えました。これを、Oracleの構文に合うように再現しようと思います。

    ステップバイステップガイド

    この例では、各チャンクに10000行が含まれています。

    1. タイプInt32の2つの変数を宣言します (@[User::RowCount] および@[User::IncrementValue]
    2. Execute SQL Taskを追加します select Count(*)を実行します コマンドを実行し、結果セットを変数@[User::RowCount]に保存します。

    1. 次の設定でForループを追加します:

    1. forループコンテナ内にData flow taskを追加します
    2. データフロータスク内にODBC Sourceを追加します およびOLEDB Destination
    3. ODBCソースでSQL Commandを選択します オプションを選択し、SELECT * FROM TABLEを記述します クエリ*(メタデータのみを取得するには `
    4. ソースと宛先の間の列をマッピングします
    5. Control flowに戻ります Data flow taskをクリックします F4を押します プロパティウィンドウを表示するには
    6. プロパティウィンドウで式に移動し、次の式を[ODBC Source].[SQLCommand]に割り当てます。 プロパティ:(詳細については、ODBC SQLCommand式でSSIS変数を渡す方法を参照してください)

      "SELECT * FROM MYTABLE ORDER BY ID_COLUMN
      OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + "FETCH NEXT 10000 ROWS ONLY;"
      

    MYTABLEの場所 はソーステーブル名であり、IDCOLUMN 主キーまたはID列です。

    制御フローのスクリーンショット

    参照

    • ODBCソース-SQLServer
    • ODBC SQLCommand式でSSIS変数を渡す方法は?
    • SSIS ODBCソースを使用する方法とOLEDBとODBCの違いは?
    • 注文後にOracleクエリによって返される行数を制限するにはどうすればよいですか?
    • db2から上位n行からn行を取得する

    更新1-その他の考えられる回避策

    同様の問題を検索しているときに、試すことができるいくつかの追加の回避策を見つけました:

    (1)SQLServerの最大メモリを変更する

    • SSIS:バッファマネージャがメモリ割り当て呼び出しに失敗しました

      sp_configure 'show advanced options', 1;
      GO
      RECONFIGURE;
      GO
      sp_configure 'max server memory', 4096;
      GO
      RECONFIGURE;
      GO
      

    (2)名前付きパイプを有効にする

    • [修正済み]バッファマネージャーは、システムの仮想メモリが不足していることを検出しましたが、バッファをスワップアウトできませんでした

      1. [コントロールパネル]–>[管理ツール]->[コンピューターの管理]に移動します
      2. SQLインスタンスのプロトコル->名前付きパイプの設定=Enabled
      3. SQLインスタンスサービスを再起動します
      4. その後、データをインポートしようとすると、一度にすべてをフェッチするのではなく、データをチャンクでフェッチします。それがあなたたちのために働き、あなたの時間を節約することを願っています。

    (3)SQLServer2008インストールホットフィックスを使用している場合

    • メモリ不足の状態でSSIS2008パッケージを実行すると、SSIS2008ランタイムプロセスがクラッシュします

    更新2-エラーを理解する

    次のMSDNリンクでは、エラーの原因は次のように説明されています。

    仮想メモリは、物理メモリのスーパーセットです。 Windowsのプロセスは通常、使用するプロセスを指定しません。これは、Windowsがマルチタスクを実行する方法を(大幅に)阻害するためです。 SSISは仮想メモリを割り当てます。 Windowsが可能な場合、これらの割り当てはすべて物理メモリに保持され、アクセスが高速になります。ただし、SSISが物理的に使用可能なメモリよりも多くのメモリを要求すると、その仮想メモリがディスクに流出し、パッケージの動作が桁違いに遅くなります。また、最悪の場合、システムに十分な仮想メモリがない場合、パッケージは失敗します。



    1. BadImageFormatException。これは、32ビットのOracleクライアントコンポーネントがインストールされた64ビットモードで実行している場合に発生します。

    2. Alembicを使用して列挙型フィールドを変更する

    3. 2つの別々のデータベースからの結果の結合

    4. Oracle Forms andReports11gリリース2のインストール