13

最近、再デプロイされた SSIS パッケージに最新の変更が含まれていないように見えることがあるという問題に気づきました...メモ帳を使用して dtsx を検索すると、コードに修正されたスクリプトが表示されるため、変更が確実に存在します。

私の仮定では、SSIS パッケージのスクリプト コンポーネントは、最終的にプロセスのどこかでアセンブリにコンパイルされます。これは、C# コードを最初にコンパイルしないと実行できないと想像するため、非常にありそうです。したがって、理論的には、これらのアセンブリがキャッシュされ、(何らかの理由で) すぐに上書きされない場合、この問題が説明されます。

私の理論が正しいと思わせる唯一の「証拠」は、ある時点でパッケージを実行し続けると、突然新しいコードに移行することです。

しかし、これまでのところ、なぜ、どのようにこれが起こっているのかを見つけていません。

更新: MSDN は次のように述べています。-プリコンパイルとは、実際のパッケージの代わりにプリコンパイルされたバージョンが実行されることを意味する場合 (コードがメモ帳に表示されているため、パッケージ自体がコンパイルされていないように見えるためだと思います)、プリコンパイル済みアセンブリを上書きするエンジン...しかし、どのように?

更新: SSIS の 4 つのコア コンポーネントの 1 つは、Windows サービスであるSQL ServerIntegration Services サービスです。どうやら、このサービスはコンポーネント/タスクのメタデータをキャッシュして、SSIS ランタイム エンジンがキャッシュをポーリングしてインストールされているものを確認できるようにします。これにより、パッケージの読み込み時間が短縮される可能性があります。ただし、パッケージが (SQL Integration Services ではなく) ファイル システムに格納され、エージェント ジョブによって実行される場合、エージェント ジョブは 64 ビット バージョンの DTEXEC を使用してパッケージを実行します。そこにキャッシュが含まれるという証拠はまだ見つかっていませんが、バージョン番号など、実行の検証フェーズでいくつかのパラメーターをチェックするオプションが確かにあり、それが理由である可能性があります。

4

3 に答える 3

4

sysssispackages を見て、msdb のパッケージのバージョン ビルド番号と Visual Studio / SSIS のビルド番号を比較しましたか?

SELECT name, verbuild
FROM msdb.dbo.sysssispackages
WHERE name LIKE '%bla%'

(必要に応じて WHERE 句を調整して、パッケージを見つけます。列の 1 つにパッケージ XML が含まれているため、「SELECT * FROM msdb.dbo.sysssispackages」は絶対に行わないでください。)

Visual Studio でパッケージを開き、パッケージの背景を右クリックして、コンテキスト メニューから[プロパティ] を選択します。フィールド VersionBuild を見てください。上記の SELECT の番号と一致する必要があります。

これが問題の実際の解決策ではないことは承知していますが、問題の原因を特定するのに役立つ場合があります。番号が古い場合は、パッケージの展開が機能していないことを意味します。

于 2013-07-02T13:07:17.740 に答える
4

これは、私がしばらく前に遭遇したものに幾分馴染みがあるように思えます。残念ながら、いつこの問題に遭遇したのか正確は覚えていませ(そのため、確認できません) Build | Build st_5bd541c294054c25b9e7eb55b92bd0e2。ウィンドウを閉じます。(GUID に基づいているため、特定のプロジェクト名はスクリプトごとに異なりますが、Build.

コマンドを明示的に呼び出すBuildと、スクリプトのバイナリ コードが ASCII エンコードされ、結果の .dtsx ファイルの XML に保存されます。私は、スクリプト エディターを閉じるたびに SSIS 2005 が常にビルドしてくれることに慣れていました。どうやら、エディターを閉じたときに SSIS 2008 が常にスクリプト プロジェクトをビルドするとは限らないという奇妙なエッジ ケースがあるようです。

ところで、プリコンパイルされたバイナリは、次のソース XML のタグに格納されているようBinaryItemです。

  <DTS:Executable DTS:ExecutableType="Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask, Microsoft.SqlServer.ScriptTask, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" DTS:ThreadHint="0">
    <DTS:Property DTS:Name="ObjectName">SCR_StepOne</DTS:Property>
    <DTS:ObjectData>
      <ScriptProject Name="ST_5bd541c294054c25b9e7eb55b92bd0e2" VSTAMajorVersion="2" VSTAMinorVersion="1" Language="CSharp" EntryPoint="Main" ReadOnlyVariables="User::FileOneName,User::OutputFolder" ReadWriteVariables="">
        <BinaryItem Name="\bin\release\st_5bd541c294054c25b9e7eb55b92bd0e2.csproj.dll">
          TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
          AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
          ZGUuDQ0KJAAAAAAAAABQRQAATAEDADuOb04AAAAAAAAAAOAAAiELAQgAABAAAAAIAAAAAAAAPi8A
          AAAgAAAAQAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACAAAAAAgAAAAAAAAMAQIUAABAA

ソース コード管理システムの履歴をチェックして、これらの厄介なエラーの一部が更新されているかどうかを確認する価値があるかもしれません。

警告: これに関する Microsoft の公式ドキュメントは見つかりませんでした。

于 2013-07-02T21:14:02.467 に答える