使用前,必須在目標機上開通一個可寫訪問的共用資料夾。
預存程序內容如下:
CREATE PROCEDURE Sp_Backup_To_Remote
(
@Database VARCHAR(128), -- 要備份的資料庫名
@RemoteIP VARCHAR(15), -- 備份到目標機的IP地址
@ShareName VARCHAR(128), -- 目標機的共用名稱
@SharePath VARCHAR(128), -- 目標機的共用中的路徑,將備份到這裡
@UserName VARCHAR(20), -- 串連目標機共用的使用者,此使用者必須具有對該共用的寫入權限
@Password VARCHAR(20), -- 串連目標機共用的密碼
@BackupFile VARCHAR(128) -- 備份到目標機的檔案名稱
)
AS
DECLARE @Result INT
DECLARE @ErrorMessage VARCHAR(512)
/** 添加使用的備份裝置 */
-- 備份裝置名稱
DECLARE @DeviceName VARCHAR(128)
SET @DeviceName = @UserName + '@' + @RemoteIP + '\' + @ShareName + '\' + @SharePath + '\'
-- 備份裝置路徑
DECLARE @DevicePath VARCHAR(512)
SET @DevicePath = '\\' + @RemoteIP + '\' + @ShareName + '\' + @SharePath + '\' + @BackupFile
-- 添加備份裝置
EXEC @Result = Sp_AddumpDevice 'Disk' , @DeviceName, @DevicePath
IF @Result = 1
BEGIN
SET @ErrorMessage = '添加備份裝置失敗。名為 ' + '''' + @DevicePath + '''' + ' 的物理裝置已經存在,為保證成功備份,請手工刪除 master.dbo.sysdevices 表中列phyname值為 ' + '''' + @DevicePath + '''' + ' 的裝置。'
RAISERROR (@ErrorMessage, 16, 1)
RETURN 0
END
/** 添加共用串連 */
-- 添加共用串連命令
DECLARE @AddShare VARCHAR(512)
SET @AddShare = 'NET USE \\' + @RemoteIP + '\' + @ShareName + ' ' + @Password + ' /USER:' + @UserName + '@' + @RemoteIP
-- 執行添加共用串連
EXEC @Result = xp_cmdshell @AddShare
IF @Result = 1
BEGIN
SET @ErrorMessage = '添加共用串連失敗,備份失敗。'
RAISERROR (@ErrorMessage, 16, 1)
RETURN 0
END
/** 備份資料庫 */
BACKUP DATABASE @Database TO @DeviceName
/** 刪除共用串連 */
-- 刪除共用串連命令
DECLARE @DeleteShare VARCHAR(512)
SET @DeleteShare = 'NET USE \\' + @RemoteIP + '\' + @ShareName + ' /DELETE'
-- 執行刪除共用串連
EXEC @Result = xp_cmdshell @DeleteShare
IF @Result = 1
BEGIN
SET @ErrorMessage = '刪除共用串連失敗。'
RAISERROR (@ErrorMessage, 16, 1)
RETURN 0
END
/** 刪除使用的備份裝置 */
EXEC @Result = Sp_DropDevice @DeviceName
IF @Result = 1
BEGIN
SET @ErrorMessage = '刪除備份裝置失敗。請手工刪除 master.dbo.sysdevices 表中列phyname值為 ' + '''' + @DevicePath + '''' + ' 的裝置。'
RAISERROR (@ErrorMessage, 16, 1)
RETURN 0
END
PRINT '命令完成。'
RETURN 1
GO
調用這個預存程序,那就很方便了,可以在目標機上(可以是本地),也可以在遠程伺服器上,當然也可以是別的機子,只不過,在目標機或本地或別的機子上調用這個預存程序時,要為遠程伺服器添加一個SQL Server註冊,然後使用<這個註冊名>.master.dbo.Sp_Backup_To_Remote就可以了。