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

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

 

1、備份還原基本概念函數

一、  完整備份:完整備份由於須要備份的數據量大,因此須要在空閒時間進行,而且按期進行。學習

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

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

2、備份設備日誌

一、          在進行備份數據的保存時,須要輸入的文件路徑很長,而且每次都要輸入,不免麻煩費事,因此咱們先給文件路徑取好別名,即備份設備,以便以後書寫代碼的方便。code

二、          相關語句blog

 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、爲數據庫作備份字符串

一、  完整備份class

 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;

二、  日誌備份

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;

四、 添加描述

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

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()函數分別獲取年、月、日,用鏈接字符串的方法拼接後賦值給參數

 


 

一、  注意

 增量備份和日誌備份第一次使用事後,以後的代碼中不可以使用INIT操做,不然,以前的數據會被覆蓋掉,沒法實現全部數據的還原以及修復。

1、數據還原

(一)   操做步驟

一、  使用RESTORE HEADERONLY

FROM (文件名)查看數據備份文件的狀況。查看事後肯定應該恢復哪些日誌備份文件(除最後兩次的修改期間須要用到日誌備份以外,其他的還原增量備份便可)

二、  還原增量備份

三、  還原結尾日誌前一份操做的日誌備份

四、  還原結尾日誌的備份

(二)實現代碼

一、查看備份信息

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;

二、還原數據

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; //數據庫完成還原

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、差別備份

 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'
相關文章
相關標籤/搜索