代码之家  ›  专栏  ›  技术社区  ›  Karl

Sql Server备份到UNC

  •  13
  • Karl  · 技术社区  · 18 年前

    我已经在我的SQLServer2005服务器上创建了一个维护计划。备份应写入另一台服务器。我用的是UNC路径。运行SQL代理作业的用户可以完全访问另一台服务器。这是两台服务器上的管理员。

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

    执行大师。dbo。xp_创建_子目录 N'\\servername\c$\SqlServerBackup\Test'

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

    有人知道可能是什么问题吗?

    7 回复  |  直到 18 年前
        1
  •  23
  •   user55852    17 年前

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

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

        2
  •  3
  •   ZaDDaZ    16 年前

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

    然而,我认为xp_create_subdir过程存在实际问题。我将停止使用维护计划,因为我每隔一段时间就会遇到完全相同的错误。没有权限在改变,它“通常”起作用,但“通常”并不能阻止它。

        3
  •  2
  •   ThatOneAdmin    15 年前

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

    1. 如果您使用SQL Server Agent代理帐户/凭据在UNC备份目标上的share和NTFS权限下,使用SQL Agent执行部分任务和备份,请授予完整/修改权限(分别),因为它们在建立连接的过程中或至少在我尝试过的SQL备份作业中(至少根据安全日志)使用过一次。不幸的是,要么没有一种方法,要么我还没有找到一种方法来通过使用代理帐户来执行某些SQL Server服务任务,而这可以通过纯SQL代理任务来完成(正如User55852和ZaDDaZ在之前的文章中指出的)。

    2. 在共享和NTFS权限下的UNC备份目标服务器上,分别向 计算机 SQL server(源服务器)的帐户。


    对于SQL服务作为“LocalSystem”运行,但需要连接到另一台服务器以删除备份的情况,这确实有效。

    当然,最佳实践表明,对于每个SQL服务,它们都应该拥有自己的域帐户,拥有最少的权限,而不是添加服务器的计算机帐户,该服务器的计算机帐户暴露了对共享的更多访问权限,而不是应该允许的权限——本质上是任何作为计算机帐户或“LocalSystem”执行的内容。

        4
  •  2
  •   DBA    14 年前

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

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

    我试着运行备份的第一步,在共享上创建目录。我被拒绝访问错误。

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

        5
  •  1
  •   Tomas Tintera    18 年前

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

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

        6
  •  0
  •   Dane    18 年前

    这不是因为服务器名称前没有双反斜杠吗?

        7
  •  0
  •   Booji Boy    18 年前

    我已经备份了UNC的很多次。确保这不是sql server和sql agent作为运行的帐户的权限问题。我不会像那样支持隐藏的管理共享,也许是美元造成了问题。创建共享并备份。\服务器\共享 不 \服务器\c$\文件夹