Gee*_*man 5 sql-server-2008 sql-server backup maintenance-plans
我们有一个多租户环境,我一直在尝试在所有服务器上部署标准化的维护计划。我一直在遇到正确导入维护计划的问题,以及设置正确的最小权限来运行作业的问题。
任何人都可以就如何在异构多租户环境(例如我们的环境)中部署此类备份维护计划提供一些指导。我在下面详细介绍了我的尝试,鉴于复杂程度正在迅速上升,我想知道我是否正朝着完全不正确的方向前进。
有没有更好的办法?
我正在寻找一种可以通过脚本/SQLCMD 轻松部署的解决方案,因此我可以通过 Puppet 推出它。我也希望坚持维护计划,因为我们团队中的 SQL 知识很少,并且未来对备份计划的编辑需要深入的 T-SQL 知识将是有问题的(尽管它看起来像一个 T-SQL 脚本或为了运行备份可能是最简单的方法)。
环境
我试过的
目前,我的主要尝试包括通过集成服务将我的维护计划导出到 DTSX 文件,以及作业子计划的相关 T-SQL。然后将这些导入到目标服务器中,以相同的用户名/密码运行。
一些粗略的步骤:
照常在服务器上创建维护计划。设置时间表。
在计划中配置本地服务器连接以作为我的标准化“备份”用户进行连接。
将 subplan1 作业配置为由“backup”用户拥有,并将 Subplan_1 Step 1 配置为通过相同的备份 SQL 用户进行连接。
本地连接到集成服务并将存储在 MSDB 中的维护计划导出到 DTSX 文件,指定自定义加密密码。还将 Job subplan_1 T-SQL 导出到新的 SQL 文件。
在所有数据库上授予backup用户db_backupoperator。
授予backup用户SQLAgentOperatorRole, SQLAgentReaderRole,SQLAgentUserRole
backup在目标服务器上创建一个具有相同权限的SQL 用户
将 DTSX 和 SQL 文件部署到目标服务器,
编辑 DTSX 文件,使本地连接指向 (local) 而不是源服务器的主机名。
执行:
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)这种方法的问题
“备份”用户的密码以纯文本形式存在于 SQL 作业文件中。我可以通过指示 Puppet 在执行后立即删除文件来解决这个问题,但这是一个风险。
到目前为止,除非我授予sysadmin服务器角色,否则我一直无法在我的“备份”用户上下文下成功运行该作业。我得到以下信息:
非系统管理员已被拒绝在没有代理帐户的情况下运行 DTS 执行作业步骤的权限。步骤失败。
即使在我暂时启用 sysadmin 后,为了解决上述问题,我仍然无法右键单击并从我导入 DTSX 的目标服务器修改或执行维护计划(或者我应该说,当我执行时,作业运行“成功”但似乎实际上并没有做任何事情)。
如果我转到 Job subplan_1 文件,然后单击“Start Job at Step”,它似乎实际上尝试并运行,但由于连接错误而失败:
无法获取连接“本地服务器连接”。连接可能未正确配置,或者您可能没有此连接的正确权限。
这是我的故障排除仍在进行的地方。
但是,由于我必须进行大量研究,以及我遇到的各种复杂性和问题的数量,让我认为在多租户环境中必须有更聪明的方法来解决这个问题吗?
同意乔恩。
与其经历设置维护计划的痛苦,我强烈建议您使用
Ola Hallengren 的 SQL Server 维护解决方案
该解决方案灵活(可根据您的需要进行调整),支持 SQL Server 2005、SQL Server 2008、SQL Server 2008 R2 和 SQL Server 2012,并在 SQL Server 社区中广泛使用。
我们有一个更复杂的环境,我们使用来自 Ola 站点的备份和维护解决方案。
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |