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

ネットワーク外の SSIS (SQL Server 2012) プロジェクトの配置

    .ispac ファイルを SSISDB カタログにデプロイするための 3 つのツールがあります。

    <オール>
  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. TSQL
  4. すでにウィザードを使用していますが、認証の問題が原因で機能していません。あなたのMOMアプローチでも、認証の問題が発生すると思います。これで TSQL アプローチが終了します。有効なログオンがあるため、うまくいけばうまくいくでしょう。

    次のコードは、.ispac をシリアル化し、展開フォルダーがまだ存在しない場合は作成し、プロジェクトを展開して、パラメーター値を割り当てます。

    SSMS では、モードを [クエリ] メニューで使用できる SQLCMD モードに変更する必要があります。その後、Ctrl-Shift-M を押してマクロを起動すると、.ispac ファイルの場所を指定できます。

    USE SSISDB
    GO
    
    IF ('$(isPacPath)' = '$' + '(isPacPath)')
    BEGIN
        THROW 50000, N'This script must be run in SQLCMD mode.', 1;
    END
    GO
    
    -- You must be in SQLCMD mode
    -- setvar isPacPath "C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac"
    :setvar isPacPath "<isPacFilePath, nvarchar(4000), C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac>"
    
    
    
    DECLARE
        @folder_name nvarchar(128) = 'TSQLDeploy'
    ,   @folder_id bigint = NULL
        -- this must match the ispac
    ,   @project_name nvarchar(128) = 'TSQLDeploy'
    ,   @project_stream varbinary(max)
    ,   @operation_id bigint = NULL;
    
    -- Read the zip (ispac) data in from the source file
    SELECT
        @project_stream = T.stream
    FROM
    (
        SELECT 
            *
        FROM 
            OPENROWSET(BULK N'$(isPacPath)', SINGLE_BLOB ) AS B
    ) AS T (stream);
    
    -- Test for catalog existences
    IF NOT EXISTS
    (
        SELECT
            CF.name
        FROM
            catalog.folders AS CF
        WHERE
            CF.name = @folder_name
    )
    BEGIN
        -- Create the folder for our project
        EXECUTE [catalog].[create_folder] 
            @folder_name
        ,   @folder_id OUTPUT;
    END
    
    -- Actually deploy the project
    EXECUTE [catalog].[deploy_project] 
        @folder_name
    ,   @project_name
    ,   @project_stream
    ,   @operation_id OUTPUT;
    
    -- Check to see if something went awry
    SELECT
        OM.* 
    FROM
        catalog.operation_messages AS OM;
    
    -- Use this to set parameters
    -- http://msdn.microsoft.com/en-us/library/ff878162.aspx
    EXECUTE catalog.set_object_parameter_value 
        -- Use the value 20 to indicate a project parameter 
        -- or the value 30 to indicate a package parameter
        @object_type = 20 
    ,   @folder_name = @folder_name
    ,   @project_name = @project_name
    ,   @parameter_name = N'' -- nvarchar(128)
    ,   @parameter_value = NULL -- sql_variant
    ,   @object_name = N'' -- nvarchar(260)
    ,   @value_type = '' -- char(1)
    --  Use the character V to indicate that parameter_value is a literal value 
    -- that will be used by default if no other values are assigned prior 
    -- to execution. 
    -- Use the character R to indicate that parameter_value is a referenced value 
    -- and has been set to the name of an environment variable. 
    -- This argument is optional, the character V is used by default
    

    SQL Pass Summit 2012 カンファレンスに参加した場合は、 2012 導入モデル パラメータ については説明しませんでした 部。最後の呼び出しは正しいと思いますが、確認していません。特定のニーズに合わせて調整できるように、プロシージャ コールのドキュメントにリンクしています。

    サンプル PowerShell 実装

    2013 年 8 月更新

    現在のクライアントで学んだことがあります。ホームドメインに参加しているラップトップがあります。クライアントの AD ネットワークにアカウントがあります。クライアントの世界で何かを「実行」する必要があるときはいつでも、自分のプロセスを起動して、自分の「外部」資格情報を提示するように指示する必要があります。これを可能にするのは、RunAs です。 .代替 リファレンス

    必要なすべてのプロセスを起動する一連のバッチ ファイルを作成しました。それらは

    の形を取ります
    runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"
    

    コマンド プロンプト (上記)、Visual Studio、SSMS、PowerShell、PowerShell ISE、およびドメインで動作する必要があるその他の特殊なアプリ用に 1 つ持っています。

    runas アプローチを使用して、上記のすべての方法を使用してパッケージを展開できました (また、外部の資格情報で実行されている Visual Studio インスタンスから直接展開することもできます)。



    1. 特定のデータベースから接頭辞 bkp を持つすべてのテーブルを削除するには?

    2. PowerShellを使用して異なる2つの列と類似している2つのテーブルを組み合わせる

    3. 複数の列で分散

    4. 19列を5列に減らします