sqlserver使用存儲過程實現數據庫備份

CREATE PROC [dbo].[p_backupdb]
@dbname sysname='',          --要備份的數據庫名稱,不指定則備份當前數據庫
@bkpath NVARCHAR(260)='',    --備份文件的存放目錄,不指定則使用SQL默認的備份目錄
@bkfname NVARCHAR(260)='',   --備份文件名,文件名中可以用\DBNAME\代表數據庫名,\DATE\代表日期,\TIME\代表時間
@bktype NVARCHAR(10)='DB',   --備份類型:'DB'備份數據庫,'DF' 差異備份,'LOG' 日誌備份
@appendfile BIT=1,           --追加/覆蓋備份文件
@password NVARCHAR(20)=''    --爲備份文件設置的密碼(僅sql2000支持),設置後,恢復時必須提供此密碼
AS
    DECLARE @sql VARCHAR(8000)

    /* 判斷要備份的數據庫名稱,爲空則備份當前數據庫*/
    IF ISNULL(@dbname,'')='' SET @dbname=DB_NAME()

    /* 判斷備份文件的存放目錄,爲空則使用SQL默認的備份目錄*/
    IF ISNULL(@bkpath,'')=''
    BEGIN
        SELECT @bkpath=RTRIM(REVERSE(filename)) FROM master..sysfiles WHERE name='master'
        SELECT @bkpath=SUBSTRING(@bkpath,CHARINDEX('\',@bkpath)+1,4000)
            ,@bkpath=REVERSE(SUBSTRING(@bkpath,CHARINDEX('\',@bkpath),4000))+'BACKUP\'
    END

    /*判斷備份文件名,爲空時指定默認文件名,文件名中可以用\DBNAME\代表數據庫名,\DATE\代表日期,\TIME\代表時間*/
    IF ISNULL(@bkfname,'')='' SET @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'
    SET @bkfname=REPLACE(REPLACE(REPLACE(@bkfname,'\DBNAME\',@dbname)
        ,'\DATE\',CONVERT(VARCHAR,GETDATE(),112))
        ,'\TIME\',REPLACE(CONVERT(VARCHAR,GETDATE(),108),':',''))

    /* 拼接SQL */
    SET @sql='backup '+CASE @bktype WHEN 'LOG' THEN 'log ' ELSE 'database ' END +@dbname
        +' to disk='''+@bkpath+@bkfname
        +''' with '+CASE @bktype WHEN 'DF' THEN 'DIFFERENTIAL,' ELSE '' END
        +CASE @appendfile WHEN 1 THEN 'NOINIT' ELSE 'INIT' END
        +CASE ISNULL(@password,'') WHEN '' THEN '' ELSE ',PASSWORD='''+@password+'''' END

    /* 執行SQL */
    EXEC(@sql)

      
    /* 返回執行結果(1=成功,0=失敗) */
    if(@@error=0) begin
        return 1
    end
        return 0


調用存儲過程方式:

--備份當前數據庫
exec p_backupdb @bkpath='c:\',@bkfname='\DBNAME\_\DATE\_db.bak'
 
--差異備份當前數據庫
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_df.bak',@bktype='DF'
 
--備份當前數據庫日誌
exec p_backupdb @bkpath='c:\',@bkfname='db_\DATE\_log.bak',@bktype='LOG'


原文鏈接:https://www.cnblogs.com/xuxing2016/p/7878432.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章