web-dev-qa-db-ja.com

SSISパッケージを新しいサーバーに移動する

SQL Server 2008R2のMSDB SSISの多数のフォルダーに多数のSSISパッケージがあります。新しいサーバーHostに移行していますが、SQL Server 2008R2のままです。

これらのSSISパッケージを新しいサーバーにコピー/移行するにはどうすればよいですか? Dtutilは最良のオプションですか?

2
K09

はい、DTutilは依然として最良の選択肢です。ディスクにエクスポートするコールを生成するためにdtutil +パッケージテーブルのデータを使用する方法についての投稿 MSDBからのSSISパッケージ抽出 があります。 file宛先の代わりに、sourceserverを代わりに使用します。フォルダーを使用してパッケージを整理した場合は、事前に作成する必要があります。

後世のためにスクリプトがここに投稿されました。これは、パッケージ展開モデルを使用した2008+パッケージまたは2012/2014パッケージに適用されます。 2005年には、sysssispackagefoldersysdtspackages90に、sysssispackagefolderssysdtspackagefolders90に置き換えられます

;
WITH FOLDERS AS
(
    -- Capture root node
    SELECT
        cast(PF.foldername AS varchar(max)) AS FolderPath
    ,   PF.folderid
    ,   PF.parentfolderid
    ,   PF.foldername
    FROM
        msdb.dbo.sysssispackagefolders PF
    WHERE
        PF.parentfolderid IS NULL

    -- build recursive hierarchy
    UNION ALL
    SELECT
        cast(F.FolderPath + '\' + PF.foldername AS varchar(max)) AS FolderPath
    ,   PF.folderid
    ,   PF.parentfolderid
    ,   PF.foldername
    FROM
        msdb.dbo.sysssispackagefolders PF
        INNER JOIN
            FOLDERS F
            ON F.folderid = PF.parentfolderid
)
,   PACKAGES AS
(
    -- pull information about stored SSIS packages
    SELECT
        P.name AS PackageName
    ,   P.id AS PackageId
    ,   P.description as PackageDescription
    ,   P.folderid
    ,   P.packageFormat
    ,   P.packageType
    ,   P.vermajor
    ,   P.verminor
    ,   P.verbuild
    ,   suser_sname(P.ownersid) AS ownername
    FROM
        msdb.dbo.sysssispackages P
)
SELECT 
    -- assumes default instance and localhost
    -- use serverproperty('servername') and serverproperty('instancename') 
    -- if you need to really make this generic
    -- File extraction command line
    'dtutil /sourceserver localhost /SQL "'+ F.FolderPath + '\' + P.PackageName + '" /copy file;".\' + P.PackageName +'.dtsx"' AS cmd
    -- Move Package command line
    -- 'dtutil /SQL "'+ F.FolderPath + '\' + P.PackageName + '" /SOURCEUSER srcUserName /SOURCEPASSWORD $Hj45jhd@X /DestServer <servername> /MOVE SQL;"'+ F.FolderPath + '\' + P.PackageName + '" /DESTUSER destUserName /DESTPASSWORD !38dsFH@v' AS cmd
FROM 
    FOLDERS F
    INNER JOIN
        PACKAGES P
        ON P.folderid = F.folderid
 WHERE
     F.FolderPath <> '\Data Collector'
6
billinkc