我有一台 SQL Server(2000、2005 和 2008),我想使用 SQL Agent(甚至是简单的备份数据库“xxx”到磁盘 =“yyy”),来备份到远程驱动器。
即:我在 SQL 机器中有一个映射驱动器,例如:“M:”映射到 \\otherbox\someshare
默认情况下,SQL Server 不允许您备份到此类驱动器,但我认为有一种方法可以启用此功能。有人可以给我提供文档吗?
提前致谢。
答案1
指定目标时使用 UNC 路径——SQL 代理没有“映射”的“驱动器”的概念。
此外,SQL Agent 通常作为“本地服务”或“本地系统”运行,因此没有权限访问其他计算机上的远程共享。
您有以下几种选择:
以域中的角色帐户运行 SQL Agent。授予该帐户对要存储备份的目录/共享的写入权限。
以“网络服务”身份运行 SQL Agent。它将使用运行该服务的计算机的域计算机帐户向共享服务器进行身份验证。授予该帐户对要存储备份的目录/共享的写入权限。
如果您没有域,请在托管 SQL Agent 的计算机和托管备份文件的计算机上创建一个具有相同用户名和密码的帐户。将 SQL Agent 更改为以此“角色”帐户运行,并授予该帐户写入您希望存储备份的目录/共享的权限。(“穷人的域”……)
答案2
我完全同意关于 UNC 路径的两个答案。
我还想补充一点,即使使用映射驱动器,您也有一个简单的解决方法。您可以对服务器的任何正常驱动器执行备份。然后您可以添加
xp_cmdshell 'XCOPY [source] [destination] \flags'
您运行的作业或 SQL 脚本的 SQL 命令。
使用 xp_cmdshell 您可以做更多的事情 - 例如运行外部存档命令行工具,如 7z 来压缩文件,然后将其复制到映射驱动器(当远程连接太慢时......)
PS:忘记提到,可以使用表面区域配置工具并执行 sp_configure 来启用和禁用 xp_cmdshell(默认情况下它是禁用的)
答案3
如果 SQL Server 未在域帐户下运行,您可以按照此处所述为 sqlserver 帐户(不是您的帐户)映射网络驱动器stackoverflow 答案
首先你需要启用 xp_cmdshell
-- allow changes to advanced options
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
然后您可以使用以下方式映射驱动器:
EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'
最后,您可以备份到该映射驱动器:
BACKUP DATABASE myDB TO DISK = 'z:\file.bak'
答案4
请记住,SQL Server 对网络延迟非常不容忍。如果发生这种情况(而且这种情况很常见),备份将失败。我根本不建议在生产环境中采用这种做法。
最好先本地备份,然后复制。