Ola Hallengren的SQL备份到networking位置不起作用

在过去的几年中,我在几台SQL Express服务器(2008到2012 R2)上build立了Ola Hallengren的SQL Server维护解决scheme 。 我最近已经开始有一个新的networking备份组件的问题。 过去我曾经在几台服务器上工作过,所以我知道它可以工作,但我无法弄清楚是什么阻止了它现在的工作。 作为一个兴趣点,我不是一个DBA,并且几乎不知道SQL,这就是为什么我在这里。

问题

特别是在一台服务器上,我在大约一年半前build立了一个维护计划。 它正在使用UNCpath(和其他几个命令)每晚进行备份到另一个本地服务器。 该脚本的代码如下所示:

sqlcmd -E -S SERVER\INSTANCE -d master -Q "EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = '\\techstore1.domain.local\Backups', @BackupType = 'FULL', @Verify = 'Y', @CheckSum = 'Y', @CleanupTime = 14" -b 

这工作很好,但一个月前停止工作。 我将其设置为在本地备份,然后添加一个string将其复制到远程位置,并在远程服务器上使用脚本清理旧备份。 理想。

我曾尝试在命令行中运行它作为我自己和一个超级权限帐户。 这是我在任何情况下收到的错误:

 Msg 50000, Level 16, State 1, Server SERVER\INSTANCE, Procedure DatabaseBackup, Line 384 The directory \\techstore1.domain.local\Backups does not exist. Msg 50000, Level 16, State 1, Server SERVER\INSTANCE, Procedure DatabaseBackup, Line 611 The documentation is available at http://ola.hallengren.com/sql-server-backup.html. 

我做了什么

显然,SQL认为networking位置不存在,所以我已经试过我可以检查所有networking端的东西是否有序。 我拉了一个脚本的新副本,并重新创build所有的对象和作业。 我已经检查了其他脚本(完整性检查,统计更新等)的工作。 我创build了一个使用相同凭证作为备份脚本的脚本,以将本地备份的xcopy运行到目标服务器,所以我拥有正确的共享/ NTFS凭据。 该帐户是专门为SQL备份创build的域帐户(AD)。 我可以在本地进行备份(使用该帐户),所以我拥有数据库权限。 我可以使用Windows资源pipe理器导航到共享作为备份帐户。 我可以使用Windows资源pipe理器使用备份帐户手动将文件复制到远程位置。

我在其他几个networking上也遇到了同样的问题,这就是我转向SF的原因。 我在2008 R2和2012域,所有服务器都是域成员没有任何相关的错误。 服务器是2008 R2和2012 R2标准机器。 我觉得在SQL方面一定会有所改变,我无法解决这个问题,因为这是在3个不同的networking和几个服务器上发生的。 我使用了超级基本的命令 – 离开validation和清理工作 – 并得到相同的错误。 我也使用了Ola网站上的示例命令作为testing,结果也是一样。 我已经尝试了一个全新的SQL Server与一个基本的testing数据库,没有爱。 我用了几天的黑带,结果非常令人失望(也许我不知道要找什么)。

我希望得到什么

我真的很感谢一种方法来testing连接到SQL命令行内的networking共享,或者一些材料来读取,让我在那里。 我不介意读书; 我是一个能干的系统pipe理员,在这个问题上他不在这个深度。 我已经阅读了Ola网站上的所有内容,而且我实际上正在逐字使用示例命令(而且它们已经工作了好几个月了!)。 我将在这个周末开展工作,任何人可以提供的任何帮助或方向,将大规模赞赏。

谁在做这个工作? 它是否作为有权访问相关股份的域用户运行? 还是以SA的forms运行? 如果它以SA身份运行,则以SQL Server代理帐户运行。 确保运行作业的用户能够访问有问题的networking共享。

另外,该命令特别应该是SERVER\INSTANCE ,而不是SERVER\DATABASE

 sqlcmd -E -S SERVER\INSTANCE -d master -Q "EXECUTE dbo.DatabaseBackup @Databases = 'USER_DATABASES', @Directory = '\\techstore1.domain.local\Backups', @BackupType = 'FULL', @Verify = 'Y', @CheckSum = 'Y', @CleanupTime = 14" -b 

(我不认为这会导致你得到的错误,但仍然。)

我正在诊断一个类似的问题实施奥拉的脚本。 它可以在一些服务器上工作而不是其他的 我会得到:

 "Msg 50000, Level 16, State 1, Procedure DatabaseBackup, Line 395 XXX The directory does not exist." 

在我的情况下,问题是,尽pipeSQL代理运行在具有足够权限的域acct下,但SQL Server本身不是。 在某些情况下,它作为本地服务运行。

一旦我将SQL更改为以具有特权的域名运行。

我希望这对其他人有用。

问题已经解决。 我创build了一个新的networking共享位置,给它非常开放的权限(每个人:完全控制),并且备份适用于该位置。 无论是什么问题,它都必须与目标上的NTFS / Share权限隔离。 我不知道为什么我的几个客户都遇到同样的问题,但是这个问题在所有问题上都有效。 我基本上重新创build了所有的备份位置,并再次分享。 我们可能永远不会知道哪里出了问题。

感谢所有花时间阅读和思考这个问题的人。

解决scheme:仅重新启动您的SQL代理服务 – 它适用于我们。

我最近几天面临同样的问题,存储过程dbo.DatabaseBackup无法识别正确的文件\文件夹属性,这是由于您的备份位置无法通过运行SQL代理服务的域用户访问而引发的错误。

存储过程的代码片段dbo.DatabaseBackup:

如果object_ID(N'tempdb.dbo。#File_Results')不为NULL,则删除表#File_Results;

CREATE TABLE #File_Results(File_Exists int,File_is_a_Directory int,Parent_Directory_Exists int)

DECLARE @FileName varchar(255)SET @FileName ='\ DBLIVEBACKUPS \ Dump $$'

INSERT INTO #File_Results EXEC Master.dbo.xp_fileexist @FileName

SELECT * FROM #File_Results

  • 我们正在为同一服务器上的不同networking位置获取正确的参数

以下应该解决这个问题。 将共享和文件夹中的SQL Server用户和SQL Server代理设置为共享和修改安全性的更改。