我们需要备份 MS SQL Server 2005 数据库。数据库所在的计算机位于其自己的工作组中,不在我们的域中。供应商似乎也不支持我们将 PC 添加到域中。所以我们需要找到一种方法来将 SQL 备份保存到我们的域中。
我不是 SQL 专家,但我可以看到我们为其他数据库运行的 SQL 维护计划允许我们指定希望将备份放在何处。但我们使用的数据库、用户和共享都在我们的域中。我们的难题似乎是 SQL 维护计划必须以非域 PC 上的本地管理员身份运行,但我没有很好的方法将网络共享的权限授予该用户。
我能想到的唯一其他选择是在我们的域上实现一个具有所有人读/写访问权限的隐藏共享,这让我毛骨悚然。
我确信我们可以在 SQL 维护计划本地运行后编写文件复制脚本。我们只需在脚本中嵌入凭据即可。但我们认为,如果维护计划可以自行处理此事,那就更好了——在我看来,移动部件更少。
我感觉自己周一做事有点笨拙,这应该比我做的要简单。我漏掉了什么?
谢谢你的帮助!CC
答案1
如果您想继续使用维护计划,即使我认识的大多数 DBA 都非常讨厌它们。您可以将复制脚本作为维护计划中的一个步骤。这样,备份和复制将保持同步。请按照以下步骤操作:
- 使用您选择的脚本语言创建复制脚本。这很简单,只需使用 dos 批处理即可。
- 创建 SQL Server 代理作业,创建作业并添加以下类型的步骤:
操作系统 (CmdExec)并指定要运行的批处理文件的路径,例如
X:\mssql\backup\copy_db.cmd
。。 不要制定时间表。 - 修改维护计划并添加执行 SQL Server 代理作业任务. 通过将此任务从工具箱拖到设计窗口来执行此操作。
- 获取执行 SQL Server 代理作业任务运行您刚刚创建的作业。
- 选择现有的备份数据库任务然后拖动绿色箭头并将其连接到您刚刚创建的代理作业任务。这将确保在备份成功完成后启动复制作业。
答案2
您必须将凭据存储在某处,因为托管数据库的计算机不是域的成员(因此不能仅使用其计算机帐户)。
就我个人而言,我会编写一个脚本,在 SQL Server 计算机上作为“计划任务”运行,该脚本将使用 SQLCMD 触发备份。备份完成后,我会使用该脚本中嵌入的凭据将其复制到远程计算机。对我来说,在维护计划运行后尝试捕获备份是有问题的,因为维护计划与复制数据库的脚本是异步的。我会保留维护计划,但要么删除备份步骤,要么不使用它创建的备份。在单个脚本中执行备份和复制很好,因为它是同步的。