将维护计划复制到不同的服务器

Gre*_*icz 21 sql-server-2012 maintenance-plans

有没有办法将维护计划从一个 SQL Server 2012 复制到另一个?无法同时(在不同网络上)通过相同的 Management Studio 副本访问两台服务器。

Aar*_*and 23

转到作业所在的服务器,在 Management Studio 的对象资源管理器中,转到管理 > SQL Server 代理并突出显示作业文件夹。点击F7(或查看 > 对象资源管理器详细信息)。您应该会在右侧窗格中看到多个作业。突出显示要复制的那些,右键单击,脚本作业为 > 创建到 > 剪贴板。现在连接到另一台服务器,打开一个新的查询窗口,粘贴,然后按 F5。比使用 SSIS 搞砸要容易得多。

您可能需要采取额外的步骤,具体取决于计划的内容。连接到 Integration Services 实例,而不是数据库实例,展开存储包 > MSDB > 维护计划,然后右键单击任何计划并选择导出包。在另一台服务器上,执行相同的步骤,但右键单击维护计划并选择导入包。您必须为每个计划执行此操作。


Ric*_*chi 13

我找到了一种更黑客的方式。

每个执行计划都是msdb.sysssispackages表中的一条记录。

您可以将msdb.sysssispackages源服务器表中的记录复制到msdb.sysssispackages目标服务器表中。

只需在源服务器上创建一个链接服务器,然后从源服务器使用此插入:

INSERT INTO 
    YOUR-DEST-SERVER-NAME.msdb.dbo.sysssispackages
SELECT        
    name, 
    id, 
    description, 
    createdate, 
    folderid, 
    ownersid, 
    cast(
        cast(
            replace(
                cast(
                    CAST(packagedata AS VARBINARY(MAX)) AS varchar(max)
                ), 
            'YOUR-SOURCE-SERVER-NAME', 'YOUR-DEST-SERVER-NAME') 
        as XML) 
    as VARBINARY(MAX)) as packagedata, 
    packageformat, 
    packagetype, 
    vermajor, 
    verminor, 
    verbuild, 
    vercomments, 
    verid, 
    isencrypted, 
    readrolesid, 
    writerolesid

FROM
    msdb.dbo.sysssispackages AS sysssispackages_1
WHERE        
    (name = 'YourMaintenancePlanName')
Run Code Online (Sandbox Code Playgroud)

信息:替换服务器名称对于在维护计划设计器上处理目标连接至关重要。

重要提示:应对记录仅复制维护计划的结构。要重新创建作业,完成副本后,您必须编辑每个维护计划,重置计划并保存。