MS Access DB を使用することは、ほとんど常に苦痛です。本当に痛いのは、MS Access ファイルにアクセスする OLE-DB 接続を利用している場合、SSIS で分散トランザクションを使用することさえできないことです。読むだけのつもりでも!なんてこと?それはどのようなトランザクション サポートですか。この場合、SSIS パッケージをトランザクション対応にする方法を誰か教えてもらえますか? 通常のトランザクション モードを使用すると、The Acquire Connection manager failed with error code 0xC0202009
2 に答える
私はこのようなシナリオ(古代のMySQLインスタンスとDB2がトランザクション権限の作成を拒否した)に遭遇しました。効果的な解決策であることがわかったのは、トランザクションをサポートしないソースをrawファイルにキャッシュすることです。接続をキャッシュします。マネージャー、またはレコードセットの宛先。単純にするために、生のファイルが私の「行き先」になりますが、コンポーネントの要件に基づいて他のファイルが必要になる場合があります。
パッケージの一般的な外観は次のようになります。トランザクションが必須に設定されたパッケージ(またはコンテナーを囲む)。これにより、タスクが参加できるトランザクションが作成されます。次に、トランザクションを明示的にオプトアウトする「スターター」コンテナーを作成します(トランザクションオプション:サポートされていません)。ここで、トランザクションをサポートしていないリソースにアクセスします。デフォルトのトランザクションオプションであるSupportedは、オープントランザクションが利用可能な場合に参加することを意味します。トランザクションを必要とするすべてのタスクをサポートされているコンテナーに入れます。
トランザクション外のデータフローで、RAWファイルにダンプします。「通常の」トランザクションでサポートされているソースで使用するのと同じクエリを使用します。
キャッシュ出力を消費するデータフローでは、最初のステップで生成されたファイルを使用します。トランザクションは宛先に対して意図されたとおりに機能し、それをサポートしていないソースでトランザクションは試行されませんでした。
ここに示すように、たとえば SQL Server に書き込む場合RetainSameConnection
、OLE DB 接続マネージャーのプロパティを に設定できます。これにより、1 つのSQL 実行タスクにa を記述してから、別の実行タスクにorを選択できます。True
BEGIN TRANSACTION
COMMIT
ROLLBACK
ただし、タスクを並行して実行するときに複数の接続が作成されるため、ルーズエンドは避けてください。BEGIN TRAN から COMMIT へのチェーンを作成する必要があります。そうしないと失敗します。
http://www.morrenth.com/transaction-and-retainsameconnection-in-ssis-ole-db-connection-manager.aspxを参照してください。