使SQL Server能够在远程计算机/驱动器上备份


8

我有一个SQL Server(2000、2005和2008),我想使用SQL Agent(甚至将简单的备份数据库'xxx'到disk ='yyy')备份到远程驱动器。

即:我在SQL机器中有一个映射的驱动器,例如:“ M:”,它映射到\\ otherbox \ someshare

默认情况下,SQL Server不允许您备份到此类驱动器,但是我认为有一种方法可以启用它。有人可以指出我的文档吗?

提前致谢。


1
您可以简单地使用第三方工具(例如SQLBackupAndFTP)远程备份SQL Server?sqlbackupandftp.com/blog/...
尼克·泰勒

Answers:


8

指定目标位置时,请使用UNC路径-SQL Agent没有“映射”“驱动器”的概念。

另外,SQL Agent通常以“本地服务”或“本地系统”运行,因此,没有其他计算机上远程共享的权限。

您有两种选择:

  • 将SQL Agent作为域中的角色帐户运行。授予该帐户许可权,将其写入要存储备份的目录/共享。

  • 以“网络服务”身份运行SQL Agent。它将使用运行该服务的计算机的域计算机帐户向共享服务器进行身份验证。授予该帐户写入您要存储备份的目录/共享的权限。

  • 如果您没有域,请在托管SQL Agent的计算机和托管备份文件的计算机上使用相同的用户名和密码创建一个帐户。将SQL Agent更改为以该“角色”帐户运行,并授予该帐户写入您要存储备份的目录/共享的权限。(“穷人的领域” ...)


除了提及UNC路径外,我建议用户实际连接到UNC路径。快速/简便的方法是打开一个网络浏览器并键入它。将提示您输入用户名/密码,并且通常可以说您想记住该用户/密码以备将来使用。我见过太多的人,他们占了99%,无法弄清楚为什么事情不起作用。测试您的连接!大声笑!:-)
KPWINC

那就是我想要的(“穷人的领域”部分);)谢谢!
Martin Marconcini

4

我完全同意关于UNC路径的两个答案。

我还要补充一点,即使使用映射的驱动器,您也可以采用简单的解决方法。您可以对服务器的任何普通驱动器执行备份。然后您可以添加

xp_cmdshell 'XCOPY [source] [destination] \flags'

对作业或运行的SQL脚本的SQL命令。

使用xp_cmdshell,您可以做更多的事情-例如,运行外部存档命令行工具(例如7z),在将文件复制到映射的驱动器之前将其压缩(当远程连接太慢时...)。

PS:忘记提及可以通过使用“外围应用配置器”工具和执行sp_configure来启用和禁用xp_cmdshell(默认情况下,它被禁用)


Win2003资源工具包中的ROBOCOPY实用程序比XCOPY提供了一些额外的选项,这些选项在此类操作中很有用。就我而言,无需覆盖以前的脚本就可以轻松实现不覆盖以前复制的备份或镜像两个备份目录的功能。
kermatt

1

您的代理需要访问网络共享。它们不需要预先映射。

您可以这样做:

BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'

我认为,如果拥有该作业的用户是sql sysadmin,则它将在代理下运行,否则它将以非sysadmin用户身份运行。


1

如果SQL Server不在域帐户下运行,则可以按照此stackoverflow答案中的描述为sqlserver帐户(而不是您的帐户)映射网络驱动器

首先,您需要启用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'

0

请记住,SQL Server对网络延迟非常宽容。如果发生并且很可能发生,备份将失败。我完全不建议在生产环境中使用此做法。

最好先在本地备份然后再复制。


0

最简单的方法是通过磁盘管理在网络共享上创建.vhd驱动器,并为其分配驱动器号。SQL无需任何修改即可访问该驱动器。

只需在启动时将diskpart.exe脚本添加到调度程序即可在重新启动时自动附加。

示例select vdisk file =“ \ {ip地址/服务器} {networkshare} {filenamep.vhd}” attach vdisk //记住分配给的最后一个驱动器号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.