1. 程式人生 > >學習筆記(十三)——數據庫備份還原的知識點與註意事項

學習筆記(十三)——數據庫備份還原的知識點與註意事項

差異 並且 rom esc 每次 sel exe tor 參數

學習筆記(十三)——數據庫備份還原的知識點與註意事項

一、備份還原基本概念

1、 完整備份:完整備份因為需要備份的數據量大,所以需要在空閑時間進行,並且定期進行。

2、 日誌備份:日誌備份的數據量小,備份時間為上一次備份到本次本分期間的數據,每天都可以進行備份,或者每小時都可以進行備份,據所需備份。

3、 增量備份(差異備份):只備份修改過的數據,與每小時進行的日誌備份配合使用,效率更高。

二、備份設備

1、 在進行備份數據的保存時,需要輸入的文件路徑很長,並且每次都要輸入,難免麻煩費事,所以我們先給文件路徑取好別名,即備份設備,以便之後書寫代碼的方便。

2、 相關語句

 IF EXISTS    
    (SELECT 1 FROM sys.backup_devices AS BD WHERE BD.name = dp_EduBase_FullBackup)
    EXEC sp_dropdevice dp_EduBase_FullBackup;
EXEC sp_addumpdevice DISK,dp_EduBase_FullBackup,C:\EduBase\Backup\Full\dp_EduBase_FullBackup.bak;    
IF EXISTS    
    (SELECT 
1 FROM sys.backup_devices AS BD WHERE BD.name = dp_EduBase_DiffBackup) EXEC sp_dropdevice dp_EduBase_DiffBackup; EXEC sp_addumpdevice DISK,dp_EduBase_DiffBackup,C:\EduBase\Backup\Diff\dp_EduBase_DiffBackup.bak; IF EXISTS (SELECT 1 FROM sys.backup_devices AS BD WHERE BD.name =
dp_EduBase_LogBackup) EXEC sp_dropdevice dp_EduBase_LogBackup; EXEC sp_addumpdevice DISK,dp_EduBase_LogBackup,C:\EduBase\Backup\Log\dp_EduBase_LogBackup.bak;

一、為數據庫做備份

1、 完整備份

 USE EduBase;        
DECLARE @FullBkDesc VARCHAR(MAX);        //申明備份設備
SELECT        
    @FullBkDesc = Weekly full backup for +DB_NAME()+ at +DATENAME(YEAR,GETDATE())+,week +DATENAME(WEEK,GETDATE())+.(+CONVERT(VARCHAR,GETDATE(),120)+);    
BACKUP DATABASE EduBase        
    TO dp_EduBase_FullBackup    
    WITH     
        INIT //INIT操作可以初始化文件,即可以覆蓋掉之前的備份,保留本次操作過後的備份
        ,Name = EduBase_FullBackup
        ,DESCRIPTION = @FullBkDesc;

2、 日誌備份

DECLARE @LogBkDesc VARCHAR(MAX);        
SELECT        
    @LogBkDesc = Hourly log backup for +DB_NAME()+ at +DATENAME(YEAR,GETDATE())+,week +DATENAME(WEEK,GETDATE())+,day +CONVERT(VARCHAR,DATEPART(W,GETDATE())-1)+,hour +CONVERT(VARCHAR,DATEPART(HOUR,GETDATE()))+.(+CONVERT(VARCHAR,GETDATE(),120)+);    
BACKUP LOG EduBase        
    TO dp_EduBase_LogBackup    
    WITH    
        INIT
        ,Name = EduBase_LogBackup 
        ,DESCRIPTION = @LogBkDesc;

4、 添加描述

為日誌文件添加時間等描述,便於之後的查看以及還原時的操作

SELECT        
    @DiffBkDesc = Daily Differential backup for +DB_NAME()+ at +DATENAME(YEAR,GETDATE())+,week +DATENAME(WEEK,GETDATE())+,day +CONVERT(VARCHAR,DATEPART(W,GETDATE())-1)+.(+CONVERT(VARCHAR,GETDATE(),120)+);    

//采用GETDATE()函數分別獲取年、月、日,用連接字符串的方法拼接後賦值給參數


1、 註意

增量備份和日誌備份第一次使用過後,之後的代碼中不可使用INIT操作,否則,之前的數據會被覆蓋掉,無法實現所有數據的還原以及修復。

一、數據還原

(一) 操作步驟

1、 使用RESTORE HEADERONLY

FROM (文件名)查看數據備份文件的情況。查看過後確定應該恢復哪些日誌備份文件(除最後兩次的修改期間需要用到日誌備份之外,其余的還原增量備份即可)

2、 還原增量備份

3、 還原結尾日誌前一份操作的日誌備份

4、 還原結尾日誌的備份

(二)實現代碼

1、查看備份信息

DECLARE         
    @TailLogBkPath VARCHAR(MAX);    
SELECT        
    @TailLogBkPath = C:\EduBase\Backup\Log\EduBase_TailLogBackup_+CONVERT(VARCHAR(10),GETDATE(),120)+.bak    
RESTORE HEADERONLY    
    FROM dp_EduBase_FullBackup;
RESTORE HEADERONLY    
    FROM dp_EduBase_DiffBackup;
RESTORE HEADERONLY    
    FROM dp_EduBase_LogBackup;
RESTORE HEADERONLY    
    FROM DISK = @TailLogBkPath;

2、還原數據

DECLARE         
    @TailLogBkPath VARCHAR(MAX);    
SELECT        
    @TailLogBkPath = C:\EduBase\Backup\Log\EduBase_TailLogBackup_+CONVERT(VARCHAR(10),GETDATE(),120)+.bak    
RESTORE DATABASE EduBase        
    FROM dp_EduBase_FullBackup    
    WITH    
        FILE = 1   //指定備份設備內的文件位置
        ,REPLACE  //若指定覆蓋則不檢查當前數據庫備份與備份數據庫的名稱、GUID等是否一致,不檢查是否已備份結尾日誌
        ,NORECOVERY;  //數據庫未還原,未提交事物將不會被回滾,若後續還原結束後認為提交,方才回滾
RESTORE DATABASE EduBase        
    FROM dp_EduBase_LogBackup    
    WITH    
        FILE = 1  
        ,NORECOVERY;
RESTORE DATABASE EduBase        
    FROM dp_EduBase_LogBackup    
    WITH    
        FILE = 2
        ,NORECOVERY;
RESTORE DATABASE EduBase        
    FROM DISK = @TailLogBkPath    
    WITH    
        FILE = 1
        ,RECOVERY; //數據庫完成還原

3、差異備份

 DECLARE @DiffBkDesc VARCHAR(MAX);        
SELECT        
    @DiffBkDesc = Daily Differential backup for ‘+DB_NAME()+ at ‘+DATENAME(YEAR,GETDATE())+,week ‘+DATENAME(WEEK,GETDATE())+,day ‘+CONVERT(VARCHAR,DATEPART(W,GETDATE())-1)+.(‘+CONVERT(VARCHAR,GETDATE(),120)+);    
BACKUP DATABASE EduBase        
    TO dp_EduBase_DiffBackup    
    WITH     
        DIFFERENTIAL  //實現備份當前有變化的數據
        ,INIT
        ,Name = EduBase_DiffBackup

學習筆記(十三)——數據庫備份還原的知識點與註意事項