学习笔记(十三)——数据库备份还原的知识点与注意事项

学习笔记(十三)——数据库备份还原的知识点与注意事项数据库

 

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'
相关文章
相关标签/搜索