将 SSIS 包移动到新服务器

K09*_*K09 2 sql-server migration ssis sql-server-2008-r2

我在 SQL Server 2008R2 上的 MSDB SSIS 上的许多文件夹中有许多 SSIS 包。我们正在迁移到新的服务器主机,但仍保留在 SQL Server 2008R2 上。

如何将这些 SSIS 包复制/迁移到新服务器?Dtutil 是最佳选择吗?

bil*_*nkc 6

是的,DTutil 仍然是最好的选择。我有一篇关于如何使用 dtutil + 包表中的数据生成导出到磁盘的调用的帖子,MSDB 中的 SSIS 包提取。代替file目标,您将替换源服务器。如果您使用文件夹来组织您的包,那么您需要事先创建它们。

脚本张贴在这里供后代使用。这适用于使用包部署模型的 2008+ 包或 2012/2014 包。随着2005年,sysssispackagefolder将被替换sysdtspackages90,并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'
Run Code Online (Sandbox Code Playgroud)