我在SQL Server 2005服务器上创建了一个维护计划。应将备份写入另一台服务器。我正在使用UNC路径。运行SQL代理作业的用户具有对其他服务器的完全访问权限。它是两台服务器上的管理员。
问题是此语句失败(具有正确的服务器名称):
EXECUTE master.dbo.xp_create_subdir N '\\服务器\ C $ \ SqlServerBackup \测试'
我得到的错误是: Msg 22048,Level 16,State 1,Line 0 xp_create_subdir()返回错误123,'文件名,目录名或卷标语法不正确。'
有谁知道可能是什么问题?
答案 0 :(得分:23)
在我自己遇到这个问题后,上述解决方案都不够清楚,我想我会发布更明确的回复。该错误实际上与语法无关 - 它完全与权限有关。这里重要的是,它是SQL Server服务帐户,而不是SQL Server代理帐户,它尝试登录以创建目录。您可以检查目标服务器上的事件查看器并查看安全日志,以查看其他计算机上的SQL Server帐户的失败登录(我的本地管理员正在运行)。
要解决此问题,请将SQL Server服务帐户设置为允许写入远程共享的域用户。我原以为SQL Server Agent能够使用自己的凭据来执行这些备份操作,但显然不是!
答案 1 :(得分:3)
SQL Agent实际上不运行备份,它能够在执行备份的SQL Server中执行命令。因此,SQL Server服务帐户是需要UNC共享权限的帐户。
但是,我认为xp_create_subdir过程存在实际问题。我将停止使用维护计划,因为我偶尔会得到同样的错误。没有权限正在改变,它“通常”有效,但“通常”不会削减它。
答案 2 :(得分:2)
如果您将SQL Server和/或SQL Server代理服务作为“LocalSystem”运行,但又无法将SQL Server和SQL Server代理帐户更改为域帐户,请尝试以下操作:
如果您使用SQL Server代理代理帐户/凭据执行部分任务并使用SQL代理进行备份,则在共享和NTFS权限下的UNC备份目标上,分别授予完全/修改权限(分别)因为他们确实在建立连接的过程中使用过,或者至少在我尝试过的SQL备份工作中使用过(至少根据安全日志)。不幸的是,有一种方法或者我没有找到通过使用代理帐户执行某些SQL Server服务任务的方法,您可以使用纯SQL代理任务(如User55852和ZaDDaZ的早期帖子中所述)。
在共享和NTFS权限下的UNC备份目标服务器上,分别向SQL服务器(源服务器)的计算机帐户授予完全/修改权限。
这适用于SQL Services作为“LocalSystem”运行但需要访问另一台服务器以删除备份的情况。
当然,最佳实践表明,对于每个SQL服务,他们应该拥有自己的域帐户,其中包含最少的特权,而不是添加服务器的计算机帐户,该帐户会暴露对共享的更多访问权限。被允许 - 基本上是作为计算机帐户或'LocalSystem'执行的任何事情。
答案 3 :(得分:2)
我在维护计划历史记录中看到此错误。
操作系统错误3(系统找不到指定的路径。)。 BACKUP DATABASE异常终止。“。可能的失败原因:查询问题,”ResultSet“属性设置不正确,参数设置不正确或连接未正确建立。
我尝试运行第一个备份步骤,它在共享上创建目录。我得到了访问拒绝错误。
最后,我授予了运行SQL Agent并维护计划成功运行的服务帐户的完全权限。
答案 4 :(得分:1)
检查他的帐户是否正在运行SqlAgent。通常它是system \ NetworkService,它在其他计算机上没有访问权限。
向UNC路径上的每个人提供临时写入权限,或者在“控制面板/服务”中更改用于SqlAgent的帐户。
答案 5 :(得分:0)
是不是服务器名称之前没有双反斜杠?
答案 6 :(得分:0)
我已经支持了UNC的时代。确保它不是sql server和sql agent正在运行的帐户的权限问题。我不会支持隐藏的管理员共享,也许这就是造成问题的$。创建共享并备份到该共享。 \ server \ share 不 \ server \ c $ \ folder