Sql-Server

連結伺服器上的備份數據庫

  • June 15, 2020

我正在嘗試通過 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 $$ $ for a local service accounts to have access to network resources. In your case it will be [DomainName]\ServerA $ 帳戶,並且此帳戶將需要有權訪問網路共享。

引用自:https://dba.stackexchange.com/questions/269191