C# 編寫的SqlServer 數據庫自動備份服務,帶配置,功能強大


數據庫自動備份服務,帶配置,還算可以吧

周末抽時間,編寫了一個這樣的工具,可以讓,對數據庫不了解或不熟悉的人,直接學會使用備份,省時省力,同樣,我也將一份,通過腳本進行備份的,也奉獻上來,

  1. 通過sql腳本進行數據庫備份

通過腳本備份數據庫,同樣也支持壓縮,但是需要安裝winrar來實現,整體來說也還行,在服務器上創建一個 維護計划,就可以實現,也是很方便的,腳本如下:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
declare @prefix         nvarchar(100),
        @datefile       nvarchar(100),
        @bakfile        nvarchar(100),
        @rarfile        nvarchar(100),
        @rarcmd         nvarchar(150),
        @str_date       nvarchar(100),
        @sql            nvarchar(100)
        
--設置備份的目錄      
set @prefix='D:/DataBase/' 
set @str_date = replace(replace(replace(convert(varchar(20),getdate(), 120),' ',''),'-',''),':','')
set @datefile = 'xx' +@str_date
set @bakfile = @prefix+@datefile+'.bak'
set @rarfile = @prefix+@datefile+'.rar'
--備份
BACKUP Database mpe_db_Data TO DISK = @bakfile WITH NOFORMAT, NOINIT,  NAME = N'xx-完整 數據庫 備份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
--壓縮rar
set @rarcmd ='"c:\Program Files\WinRAR\winrar.exe" ' +'a -df ' +@rarfile+' '+@bakfile
exec master..xp_cmdshell @rarcmd,NO_OUTPUT;

別問我代碼都是干啥的,無非就是打開權限,創建變量、時間戳的文件名、備份腳本、啟動備份,哈哈。。都說完了,你也不用問了,

  • 你是不是要問,那刪除文件呢?
--刪除15天之前的備份
set  @sql='del  d:\DataBase\xx' +rtrim(replace(replace(replace(convert(varchar(20),getdate()-15, 120),' ',''),'-',''),':',''))+'.rar'

為啥刪除15天的?你想刪除多少天,自己寫, -15 的15,隨你填寫。

好了,言歸正傳,下面是我編寫的windows 服務實現,請看:

  1. 通過C#編寫的windows服務進行數據庫備份

使用方法如下

  • 通過 服務部署工具.bat 配置和安裝windows服務

沒了,嘎嘎。。上圖

圖1 使用管理員,打開部署腳本

圖2 根據指示進行配置操作,輸入1 是進入配置

圖3 配置界面

 

圖4 安裝完成后,啟動服務

好了,全部操作演示完畢,是不是說,那么師傅,代碼呢?

樓下五步走

CSDN下載地址:https://download.csdn.net/download/l9861226/10585437

暫時還沒有通過,得等等才通過審核,剛剛上傳上

(代碼純手工打造,要點積分,別介意哈)

代碼遇到一個小小的bug,當備份數據庫巨大時,有的服務器會出現超時現象,我將SqlCommand的 CommandTimeout值設置為3600秒了,問題解決,因為數據大小是32個G,收縮日志之后,所以出現了這個問題,以解決,各位自行修改代碼解決即可,代碼如下:

 

 

調用處

實現代碼如下:

 public static int ExecuteSqlSetTimeOut(string cmdText, int timeOut)
        {
            SqlCommand cmd = new SqlCommand();
            PrepareCommand(cmd, connection, null, CommandType.Text, cmdText, null);
            cmd.CommandTimeout = timeOut;
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

完事~!!!啦啦啦。。。

 

 


免責聲明!

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



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