DEV、UAT、PRODの3つのシステムがあり、すべてSQL 2012 Enterpriseを実行しています。これらのシステムでオブジェクトにヒットする既存のパッケージがあります。メタデータに影響を与える変更を行う必要があるたびに、ターゲットシステムのオブジェクトを更新し、システムを指すSSISパッケージを更新して、システムにパッケージを再展開するだけでは不十分です。新しいメタデータを処理するために再展開する前にパッケージが更新されている場合でも、新しいメタデータを認識する前に、各システムにアクセスしてパッケージを更新する必要があります。
この動作は私にとって新しいものです。 BIDS 2008では、1つのシステムでのメタデータの更新は、展開先のすべてのシステムに保持されます。展開する前に接続マネージャーを変更した場合は、メタデータを更新する前に、戻ってメタデータの更新をやり直す必要があります。接続ごとのメタデータ設定は保持され、パッケージの更新時に更新されないようです。
これを明確にするための例:3つのシステムすべての宛先テーブルに列を追加します。 DEVをポイントしている間にパッケージを更新して変更を反映し、次にデプロイします。ここまでは順調ですね。次に、UATを指すように接続マネージャーを更新し、変更されたパッケージをそこに展開します。この時点では、UATの宛先テーブルのスキーマは、パッケージが最後に更新されたときにポイントされたDEVのスキーマと一致するため、メタデータの更新は必要ないはずです。ただし、パッケージは更新されていないかのように動作し、機能するためには、そのシステムを明示的に指している間にメタデータを更新する必要があります。
この問題に対処するために、System :: MachineNameによって決定される接続マネージャーのServerNameプロパティの式を追加しました。問題は、開発中のマシンで接続マネージャーを変更するとすぐにチェックがトリガーされることであると考えました遅延検証がオンになっていても、そこにあるオブジェクトの数。そのような運はありません。それでも同じ動作を示します。
SSDT 2012で予想される動作なのか、私が誤って行っていることなのか、それとも本物のバグなのかを判断するために、オンラインでこれに関する情報をあまり見つけることができません。
誰もがこの問題について何か洞察を持っていますか?
正直なところ、パッケージを展開する前に、別の環境を指すようにパッケージを編集しないでください。パッケージ自体を編集せずにパッケージをデプロイする方法については、 パッケージ構成 を参照してください。
おそらく、接続文字列やその他の設定は、構成ファイルから読み取られた変数でなければなりません。
SQL 2012を使用しているため、おそらく environments を使用する必要があります(@MartinSmithに感謝)
SQL Server 2012 Enterprise Editionプロダクションボックスで以前に同様の問題がありました。プロダクションボックスに展開する前に、SSISパッケージですべてが更新されることを確認しましたが、プロダクションボックスで実行すると、オブジェクトが存在しないと言って機能しません。また、すべての検証をオンにしましたが、それは役に立ちませんでした。
そこで、試してみるために、プロジェクト全体を運用ボックスから削除し(変更にはSVNを使用して、そのリビジョンに戻すことができるようにします)、プロジェクトを再デプロイしました。私がそれを行ったので、SSISが更新されるたびに、SSISは常に動作し、変更を正しく見ています。
SSISDB内にバグまたは何かがあり、プロジェクト自体のメタデータが更新されていない可能性があると思いますが、削除および再読み込みはうまくいきました。うまくいけばうまくいくでしょう。
データツールでパッケージを開き、データフローを開き、すべての非同期コントロールを開き、[OK]をクリックしてパッケージを閉じます。
ソリューションを再構築して展開する