我有一个 SQL Server(2000、2005 和 2008),我想使用 SQL 代理(甚至是一个简单的备份数据库 'xxx' 到磁盘 = 'yyy')来备份到远程驱动器。
即:我在 SQL 机器中有一个映射驱动器,例如:“M:”映射到 \\otherbox\someshare
默认情况下,SQL Server 不允许您备份到此类驱动器,但我认为有一种方法可以启用它。有人可以指出我的文档吗?
提前致谢。
我有一个 SQL Server(2000、2005 和 2008),我想使用 SQL 代理(甚至是一个简单的备份数据库 'xxx' 到磁盘 = 'yyy')来备份到远程驱动器。
即:我在 SQL 机器中有一个映射驱动器,例如:“M:”映射到 \\otherbox\someshare
默认情况下,SQL Server 不允许您备份到此类驱动器,但我认为有一种方法可以启用它。有人可以指出我的文档吗?
提前致谢。
指定目标时使用 UNC 路径——SQL 代理没有“映射”“驱动器”的概念。
此外,SQL 代理通常作为“本地服务”或“本地系统”运行,因此无权访问其他计算机上的远程共享。
你有几个选择:
将 SQL 代理作为域中的角色帐户运行。授予该帐户写入您希望存储备份的目录/共享的权限。
将 SQL 代理作为“网络服务”运行。它将使用运行服务的计算机的域计算机帐户向共享服务器进行身份验证。授予该帐户写入您希望存储备份的目录/共享的权限。
如果您没有域,请在托管 SQL 代理的计算机和托管备份文件的计算机上创建一个具有相同用户名和密码的帐户。将 SQL 代理更改为作为此“角色”帐户运行,并授予该帐户写入您希望存储备份的目录/共享的权限。(“穷人的领域”……)
我完全同意关于 UNC 路径的两个答案。
我还想补充一点,即使使用映射驱动器,您也有一个简单的解决方法。您可以对服务器的任何正常驱动器执行备份。然后你可以添加
您运行的作业或 SQL 脚本的 SQL 命令。
使用 xp_cmdshell 您可以做更多事情 - 例如运行外部存档命令行工具,如 7z 以在将文件复制到映射驱动器之前压缩文件(当远程连接太慢时......)
PS:忘了说 xp_cmdshell 可以通过使用外围配置工具和执行 sp_configure 来启用和禁用(默认情况下它是禁用的)
如果 SQL Server 不在域帐户下运行,您可以按照此stackoverflow 答案中的描述为 sqlserver 帐户(不是您的帐户)映射网络驱动器
首先你需要启用 xp_cmdshell
然后,您可以使用以下方法映射驱动器:
最后,您可以备份到该映射驱动器:
您的代理需要访问网络共享。它们不需要事先映射。
你这样做:
我相信,如果拥有该作业的用户是 sql sysadmin,它会在代理下运行,否则它会以非 sysadmin 用户身份运行。
请记住,SQL Server 非常不能容忍网络延迟。如果它们发生并且它们倾向于发生,则备份将失败。对于生产环境,我完全不推荐这种做法。
最好在本地备份,然后复制。
最简单的方法是通过磁盘管理在网络共享上创建一个 .vhd 驱动器并为其分配驱动器号。SQL 无需任何修改即可访问此驱动器。
只需在启动时将 diskpart.exe 脚本添加到调度程序,以便在重新启动时自动附加。
示例 select vdisk file="\{ip address/server}{networkshare}{filenamep.vhd}" attach vdisk // 记住分配给的最后一个驱动器号。