SqlServer數據庫同時備份到兩台服務器上(並自動刪除過期文件)


數據庫同時備份到兩台服務器上(並自動刪除過期文件)

舉例 :(本地)服務器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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM