數據庫同時備份到兩台服務器上(並自動刪除過期文件)
舉例 :(本地)服務器A: IP :192.168.1.1
(遠程)服務器B: IP :192.168.1.2
數據庫版本:SqlServer2008R2
一. 兩台服務器分別創建共享文件夾(能互相訪問,同屬一個局域網)
A: E: IWFSBACKUP(文件夾)
B: E: IWFSBACKUP(文件夾)
二. 在master數據庫下建立存儲過程 dbo.iwfsbackup
USE [master] GO /****** Object: StoredProcedure [dbo].[iwfsbackup] Script Date: 07/17/2018 09:57:27 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE proc [dbo].[iwfsbackup] as Declare @strPsw varchar(50) Declare @strUsr varchar(50) Declare @strCmdShell varchar(300) Declare @strDataBaseName varchar(20) Declare @FullFileName Varchar(200) Declare @FullFileName1 Varchar(200) Declare @FullFileName2 Varchar(200) Declare @FileFlag varchar(50) Declare @FileFlag2 varchar(50) DECLARE @FileFlag3 varchar(50) Declare @ToFileName varchar(200) Declare @SQLStr varchar(500) Declare @SQLStr2 varchar(500) Declare @SQLStr3 varchar(500) Declare @FlagDel varchar(20) --定義備份的數據庫名稱 Set @strDataBaseName='db_iwfs' --定義本地備份文件的名稱 Set @FileFlag=@strDataBaseName + '_db_' + replace(convert(char(20),getdate(),112),' ','') --定義本地3天前的備份文件名稱 Set @FileFlag3=@strDataBaseName + '_db_' + replace(convert(char(20),getdate()-3,112),' ','') --定義遠程服務器3天前的備份文件名稱 Set @FileFlag2=@strDataBaseName + '_db_' + replace(convert(char(20),getdate()-3,112),' ','') --設置遠程服務器的登錄域和用戶名 Set @strUsr='B\administrator' --設置遠程服務器登錄密碼 Set @strPsw='123' --設置遠程服務器連接 Set @strCmdShell= 'net use \\192.168.1.2\e$ ' + @strPsw + ' /user:' +@strUsr --設置本地備份文件名稱 Set @FullFileName='E:\IWFSBACKUP\'+@FileFlag+'.BAK' --設置本地3天前的備份文件名稱 set @FullFileName1='E:\IWFSBACKUP\'+@FileFlag3+'.BAK' --設置遠程服務器3天前的備份文件名稱 set @FullFileName2='\\192.168.1.2\e$\IWFSBACKUP\'+@FileFlag2+'.BAK' --設置遠程服務器保存備份文件目錄 Set @ToFileName='\\192.168.1.2\e$\IWFSBACKUP\' --設置為True時,即刪除備份,設置為False時,即不刪除備份文件 Set @FlagDel='True' --設置從本地復制備份文件至遠程服務器的語句 Set @SQLStr='copy '+@FullFileName+' '+@ToFileName --設置刪除本地3天前的備份文件 Set @SQLStr2='del ' +@FullFileName1 --設置刪除遠程服務器3天前的備份文件 Set @SQLStr3='del ' +@FullFileName2 --備份EliteUC數據庫 BackUp DataBase @strDataBaseName To Disk= @FullFileName with init --連接遠程服務器 exec master..xp_cmdshell @strCmdShell --復制備份文件至遠程服務器 exec Master..xp_cmdshell @SQLStr --刪除3天前本地的備份文件 if (@FlagDel ='True') exec master.. xp_cmdshell @SQLStr2 --刪除3天前遠程服務器備份文件 if (@FlagDel ='True') exec master.. xp_cmdshell @SQLStr3
--作業調用該存儲過程
execute master.dbo.iwfsbackup
--DOS拷貝文件到別的服務器
copy E:\IWFS\1.txt \\192.168.1.2\IWFSBACKUP
三. 新建SqlServer作業,調用存儲過程,執行備份作業
1.新建作業

2.新建步驟


3.新建計划


若執行存儲過程報錯:execute master.dbo.iwfsbackup
“消息 15281,級別 16,狀態 1,過程 xp_cmdshell,第 1 行
SQL Server 阻止了對組件 'xp_cmdshell' 的 過程'sys.xp_cmdshell' 的訪問,因為此組件已作為此服務器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'xp_cmdshell'。有關啟用 'xp_cmdshell' 的詳細信息,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器". ”
解決辦法:
在master 數據庫下執行以下語句:
sp_configure 'show advanced options',1 reconfigure go sp_configure 'xp_cmdshell',1 reconfigure go
