在多租户环境中部署 SQL Server 备份维护计划

Gee*_*man 5 sql-server-2008 sql-server backup maintenance-plans

我们有一个多租户环境,我一直在尝试在所有服务器上部署标准化的维护计划。我一直在遇到正确导入维护计划的问题,以及设置正确的最小权限来运行作业的问题。

任何人都可以就如何在异构多租户环境(例如我们的环境)中部署此类备份维护计划提供一些指导。我在下面详细介绍了我的尝试,鉴于复杂程度正在迅速上升,我想知道我是否正朝着完全不正确的方向前进。

有没有更好的办法?

我正在寻找一种可以通过脚本/SQLCMD 轻松部署的解决方案,因此我可以通过 Puppet 推出它。我也希望坚持维护计划,因为我们团队中的 SQL 知识很少,并且未来对备份计划的编辑需要深入的 T-SQL 知识将是有问题的(尽管它看起来像一个 T-SQL 脚本或为了运行备份可能是最简单的方法)。

环境

  • 现在我们主要运行 Windows 2008 R2 和 SQL Server 2008 R2 Standard
  • 但是,支持 Windows 2012 和 SQL Server 2012/2014 的解决方案将是目标
  • 我们为多个客户支持许多 SQL Server,所有这些都是隔离的。
  • 一些客户在他们自己的 Active Directory 林中运行,而其他客户则运行没有 AD 的独立 SQL Server。因此,在 AD 身份验证方面没有共同因素。
  • 所有客户都被隔离在他们自己的网段中,但我们可以在防火墙中打孔以进行备份。
  • 现在,我们使用 Puppet 进行跨服务器的基本配置管理。基本上,这转化为以标准方式在服务器上部署新文件、运行脚本、SQL(通过 SQLCMD)和设置权限/用户的简单能力。

我试过的

目前,我的主要尝试包括通过集成服务将我的维护计划导出到 DTSX 文件,以及作业子计划的相关 T-SQL。然后将这些导入到目标服务器中,以相同的用户名/密码运行。

一些粗略的步骤:

  1. 照常在服务器上创建维护计划。设置时间表。

  2. 在计划中配置本地服务器连接以作为我的标准化“备份”用户进行连接。

  3. 将 subplan1 作业配置为由“backup”用户拥有,并将 Subplan_1 Step 1 配置为通过相同的备份 SQL 用户进行连接。

  4. 本地连接到集成服务并将存储在 MSDB 中的维护计划导出到 DTSX 文件,指定自定义加密密码。还将 Job subplan_1 T-SQL 导出到新的 SQL 文件。

  5. 在所有数据库上授予backup用户db_backupoperator

  6. 授予backup用户SQLAgentOperatorRole, SQLAgentReaderRole,SQLAgentUserRole

  7. backup在目标服务器上创建一个具有相同权限的SQL 用户

  8. 将 DTSX 和 SQL 文件部署到目标服务器,

  9. 编辑 DTSX 文件,使本地连接指向 (local) 而不是源服务器的主机名。

  10. 执行:

    dtutil.exe /FILE "C:\backups\Backup Plan.dtsx" /DestServer . 
               /Decrypt  MyEncryptionPassword 
               /COPY SQL;"\Maintenance Plans\Backup Plan"
    
    sqlcmd -E -S . -i "C:\backups\Backup Job.sql"
    
    Run Code Online (Sandbox Code Playgroud)

这种方法的问题

  1. “备份”用户的密码以纯文本形式存在于 SQL 作业文件中。我可以通过指示 Puppet 在执行后立即删除文件来解决这个问题,但这是一个风险。

  2. 到目前为止,除非我授予sysadmin服务器角色,否则我一直无法在我的“备份”用户上下文下成功运行该作业。我得到以下信息:

    非系统管理员已被拒绝在没有代理帐户的情况下运行 DTS 执行作业步骤的权限。步骤失败。

    这已在不同 地方记录,但我希望找到一组权限,以避免为了运行作业而必须创建 Windows 用户帐户。

  3. 即使在我暂时启用 sysadmin 后,为了解决上述问题,我仍然无法右键单击并从我导入 DTSX 的目标服务器修改或执行维护计划(或者我应该说,当我执行时,作业运行“成功”但似乎实际上并没有做任何事情)。

  4. 如果我转到 Job subplan_1 文件,然后单击“Start Job at Step”,它似乎实际上尝试并运行,但由于连接错误而失败:

    无法获取连接“本地服务器连接”。连接可能未正确配置,或者您可能没有此连接的正确权限。

这是我的故障排除仍在进行的地方。

但是,由于我必须进行大量研究,以及我遇到的各种复杂性和问题的数量,让我认为在多租户环境中必须有更聪明的方法来解决这个问题吗?

Kin*_*hah 5

同意乔恩。

与其经历设置维护计划的痛苦,我强烈建议您使用

Ola Hallengren 的 SQL Server 维护解决方案

该解决方案灵活(可根据您的需要进行调整),支持 SQL Server 2005、SQL Server 2008、SQL Server 2008 R2 和 SQL Server 2012,并在 SQL Server 社区中广泛使用

我们有一个更复杂的环境,我们使用来自 Ola 站点的备份和维护解决方案。