Sql Server 备份到 UNC

Posted

技术标签:

【中文标题】Sql Server 备份到 UNC【英文标题】:Sql Server Backup to UNC 【发布时间】:2008-10-19 07:11:58 【问题描述】:

我已经在我的 SQL Server 2005 服务器上创建了一个维护计划。备份应写入另一台服务器。我为此使用了 UNC 路径。运行 SQL 代理作业的用户对另一台服务器具有完全访问权限。它在两台服务器上都是管理员。

问题是这个语句失败(当然有正确的服务器名称):

执行 master.dbo.xp_create_subdir N'\\servername\c$\SqlServerBackup\Test'

我得到的错误是: 消息 22048,第 16 级,状态 1,第 0 行 xp_create_subdir() 返回错误 123,“文件名、目录名或卷标语法不正确。”

有谁知道可能是什么问题?

【问题讨论】:

我怀疑这是权限问题。此服务器上的 SQL 代理是否能够将备份写入到已存在文件夹中的同一目标服务器? 【参考方案1】:

在我自己遇到这个问题之后,上述解决方案都不够清楚,我想我会发布一个更清晰的回复。该错误实际上与语法无关 - 它完全与权限有关。这里重要的是,尝试登录以创建目录的是 SQL Server 服务帐户,而不是 SQL Server 代理帐户。您可以检查目标服务器上的事件查看器并查看安全日志以查看来自另一台计算机上的 SQL Server 帐户的失败登录(我的是以本地管理员身份运行的)。

要解决此问题,请将您的 SQL Server 服务帐户设置为允许写入远程共享的域用户。我本来希望 SQL Server 代理能够使用自己的凭据来执行这些备份操作,但显然不是!

【讨论】:

你让我很开心 :-) 谢谢【参考方案2】:

SQL 代理实际上并不运行备份,它能够在执行备份的 SQL Server 中执行命令。因此,SQL Server 服务帐户是需要 UNC 共享权限的帐户。

但是,我认为 xp_create_subdir 过程存在实际问题。我将停止使用维护计划,因为我每隔一段时间就会遇到同样的错误。没有权限发生变化,它“通常”有效,但“通常”不会削减它。

【讨论】:

【参考方案3】:

如果您将 SQL Server 和/或 SQL Server 代理服务作为“LocalSystem”运行,但不愿意将 SQL Server 和 SQL Server 代理帐户更改为域帐户,请尝试以下操作:

    如果您使用 SQL Server 代理代理帐户/凭据执行部分任务并使用 SQL 代理进行备份,则在共享和 NTFS 权限下的 UNC 备份目标上,分别授予完整/修改权限因为它们确实在建立连接的过程中或至少在我尝试过的 SQL 备份作业中使用过(至少根据安全日志)。不幸的是,要么没有办法,要么我还没有找到一种方法来使用代理帐户来执行某些 SQL Server 服务任务,而您可以使用纯粹的 SQL 代理任务来完成(如 User55852 和 ZaDDaZ 之前的帖子中所述)。

    在共享和 NTFS 权限下的 UNC 备份目标服务器上,分别向 SQL 服务器(源服务器)的计算机帐户授予完全/修改权限。


这适用于 SQL 服务作为“LocalSystem”运行但需要访问另一台服务器以删除备份的情况。

当然,最佳实践表明,对于每个 SQL 服务,它们应该拥有自己的域帐户,并且权限最少,而不是添加服务器的计算机帐户,这会比应有的公开更多访问共享的权限被允许 - 基本上任何作为计算机帐户或“本地系统”执行的东西。

【讨论】:

如果您必须使用内置帐户而不是创建自己的用户帐户,请使用 LOCAL SERVICE 或 NETWORK SERVICE 而不是 LocalSystem。 LocalSystem 的权限太高了,可以在 Windows 系统上做任何事情。要备份到远程共享,您需要使用 NETWORK SERVICE,因为 LOCAL SERVICE 没有任何网络权限,并且将以匿名身份进行身份验证。【参考方案4】:

我在维护计划历史记录中看到了这个错误。

操作系统错误3(系统找不到指定的路径。)。 BACKUP DATABASE 异常终止。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或连接未正确建立。

我尝试运行第一个备份步骤,它在共享上创建目录。我收到拒绝访问错误。

最后,我为运行 SQL 代理且维护计划成功运行的服务帐户授予了完全权限。

【讨论】:

【参考方案5】:

检查运行 SqlAgent 的帐户。通常它 system\NetworkService 蚂蚁在其他计算机上没有访问权限。

在 UNC 路径或控制面板/服务中为每个人提供临时写入权限,更改用于 SqlAgent 的帐户。

【讨论】:

【参考方案6】:

是不是服务器名前少了一个双反斜杠?

【讨论】:

不,这个网站没有正确显示双反斜杠。我现在已经更正了...【参考方案7】:

我已经多次备份到 UNC 的数据。确保这不是与运行 sql server 和 sql agent 的帐户有关的权限问题。我不会像那样备份到隐藏的管理员共享,也许是导致问题的 $。创建一个共享和备份。 \server\share \server\c$\folder

【讨论】:

以上是关于Sql Server 备份到 UNC的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER2008远程备份数据库到本地

如何设置将SQL SERVER2012数据库备份还原到SQL SERVER2008上

备份SQL Server数据库到Azure Storage

如何备份sqlserver数据

sql server 备份与恢复系列一 必备知识

SQL Server 2008怎么自动备份数据库