SQL SERVER 數據庫跨服務器備份


原文:https://www.cnblogs.com/jaday/p/6088200.html

需求介紹:每天備份線上正式庫並且把備份文件復制到測試服務器,測試服務器自動把數據庫備份文件還原。

方案介紹:

第1步:在正式庫上創建存儲過程用來備份數據庫和復制到測試服務器,然后新建作業每天定時執行創建的存儲過程。

第2步:在測試服務器數據庫上創建存儲過程用來還原數據庫,然后新建作業每天定時執行創建的存儲過程。

准備:

在正式服務器上共享備份文件的文件夾,並且給文件夾everyone的權限。

在測試服務器上創建共享文件夾,並且給文件夾everyone的權限。

 

正式庫備份數據庫和復制數據庫代碼:

復制代碼
--開啟 xp_cmdshell
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
復制代碼

 

復制代碼
USE [master]
GO
/****** Object:  StoredProcedure [dbo].[backup_db_ksedu]    Script Date: 11/22/2016 08:41:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--備份數據庫
Create proc [dbo].[backup_db_ksedu]

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='數據庫名'

--定義本地備份文件的名稱

Set @FileFlag=@strDataBaseName + '_db_' + replace(convert(char(20),getdate(),112),' ','')

--定義本地1天前的備份文件名稱

--Set @FileFlag3=@strDataBaseName + '_db_' + replace(convert(char(20),getdate()-1,112),' ','')

--定義遠程服務器3天前的備份文件名稱

--Set @FileFlag2=@strDataBaseName + '_db_' + replace(convert(char(20),getdate()-3,112),' ','')

--設置遠程服務器的登錄域和用戶名

Set @strUsr='ZONGHEGUANLI-SQ\Administrator'

--設置遠程服務器登錄密碼

Set @strPsw='abc123'

--設置遠程服務器連接

Set @strCmdShell= 'net use \\xx.xxx.x.xxx\db_backup ' + @strPsw + ' /user:' +@strUsr

--設置本地備份文件名稱

Set @FullFileName='e:\bak\'+@FileFlag+'.bak'

--設置本地1天前的備份文件名稱

--set @FullFileName1='D:\Backup\'+@FileFlag3+'.bak'

--設置遠程服務器3天前的備份文件名稱

--set @FullFileName2='\\172.17.1.10\j$\db_backup\'+@FileFlag2+'.BAK'

--設置遠程服務器保存備份文件目錄

Set @ToFileName='\\xx.xxx.x.xxx\db_backup\'

--Set @ToFileName='e:\Backup\'

--設置為True時,即刪除備份,設置為False時,即不刪除備份文件

--Set @FlagDel='False'

--設置從本地復制備份文件至遠程服務器的語句

Set @SQLStr='copy '+@FullFileName+' '+@ToFileName

--設置刪除本地1天前的備份文件

--Set @SQLStr2='del ' +@FullFileName1 

--設置刪除遠程服務器3天前的備份文件

--Set @SQLStr3='del ' +@FullFileName2

--備份數據庫 壓縮備份 

BACKUP DATABASE @strDataBaseName  TO DISK = @FullFileName  WITH INIT, STATS = 20  

--連接遠程服務器 

exec master..xp_cmdshell @strCmdShell

--復制備份文件至遠程服務器

exec Master..xp_cmdshell @SQLStr   

--刪除1天前本地的備份文件

--if (@FlagDel ='True')

--exec master.. xp_cmdshell @SQLStr2 

----刪除3天前遠程服務器備份文件

--if (@FlagDel ='True')

--exec master.. xp_cmdshell @SQLStr3
復制代碼

 

測試庫還原數據庫代碼:

復制代碼
USE [master]
GO
/****** Object:  StoredProcedure [dbo].[restore_db_ksedu]    Script Date: 11/22/2016 08:40:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[restore_db_ksedu]
AS

Declare @strDataBaseName varchar(50)
Declare @FileFlag varchar(50) 

--定義備份的數據庫名稱
Set @strDataBaseName='數據庫名'

Set @FileFlag='d:\db_backup\'+@strDataBaseName + '_db_' + replace(convert(char(20),getdate(),112),' ','')+'.bak'

--加上這句防止數據庫正在使用導致執行不成功
ALTER DATABASE [數據庫名] SET OFFLINE WITH ROLLBACK IMMEDIATE

restore database [數據庫名]
from disk=@FileFlag  with file=1,
REPLACE,
recovery  

ALTER  database  [數據庫名]  set   online  
復制代碼

創建作業計划:參考 http://wenku.baidu.com/link?url=HLojwfVr1gkEuKjhk3Twsy7SxTWNMxovLg4LXpqvg_a3r50XQE5hZt8e03uPhbW8qUNjEx0IKa39DjyJ0spuNN1TV42UCIAMNDUQllhjsZu

 

 


免責聲明!

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



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