我正在尝试通过 ServerB 在 ServerA 上备份一个数据库。
我有:
DECLARE @SQL NVARCHAR(100)
SET @SQL = 'BACKUP DATABASE DBname to disk=''\\ServerB\E$\folder\DBname.bak'''
EXECUTE ServerA.master.dbo.sp_executesql @SQL
我在 ServerB 上执行此操作,但出现错误:
消息 3013,级别 16,状态 1,第 9 行备份数据库异常终止。消息 3201,级别 16,状态 1,第 9 行无法打开备份设备 '\ServerB\E$\folder\DBname.bak'。操作系统错误 5(拒绝访问。)。
我已经让 NT SERVICE\MSSQLSERVER 完全控制该文件夹,但这没有用。
我正在尝试做的事情可能吗?我究竟做错了什么?
编辑
我也试过:
EXEC ServerA.master.dbo.sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC ServerA.master.dbo.sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
EXEC ServerA.master.dbo.XP_CMDSHELL 'net use G: \\ServerB\E$\folder /user:user password'
EXEC ServerA.master.dbo.XP_CMDSHELL 'Dir G:'
GO
DECLARE @SQL NVARCHAR(100)
SET @SQL = 'BACKUP DATABASE DBname to disk=''G:/DBname.bak'' WITH INIT, FORMAT, COPY_ONLY'
EXECUTE ServerA.master.dbo.sp_executesql @SQL
GO
EXEC ServerA.master.dbo.XP_CMDSHELL 'net use G: /delete'
GO
EXEC ServerA.master.dbo.sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC ServerA.master.dbo.sp_configure 'xp_cmdshell', 0
GO
RECONFIGURE
GO
它报告它已启用 xp_cmdshell 等,但是当我运行映射部分时,它错误地说它已关闭。如果我直接在 ServerA 上启用 xp_cmdshell,则映射部分通过 ServerB 工作?
您写道“我已经给予 NT SERVICE\MSSQLSERVER 完全控制权”,所以看起来您的 SQL Server 正在“本地系统帐户”下运行。
如果您在第二台服务器上授予 NT SERVICE\MSSQLSERVER 完全控制权,它将不起作用,因为 NT SERVICE\MSSQLSERVER 是每台计算机上的不同帐户。
您需要向帐户 [DomainName]\[ServerName]$ 授予所有网络权限,本地服务帐户才能访问网络资源。
在您的情况下,它将是 [DomainName]\ServerA$ 帐户,并且该帐户需要有权访问网络共享。