SQL2000每天都备份数据库,日志还有用吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL2000每天都备份数据库,日志还有用吗相关的知识,希望对你有一定的参考价值。

我的SQL2000数据库我每天都备份,由于自己没专门学过SQL,这两天发现服务器磁盘空间不够了,网上查了一下,我就到数据库里用“DUMP TRANSACTION [数据库名] WITH NO_LOG”,把日志清空了,我想问一下,每天都备份数据库,日志还有用吗?事务日志有必要备份吗?

参考技术A 日志只保存当天更改的数据。你每天都备份数据库,日志备份就没必要了。但是事务日志还是要备份的 参考技术B 数据库定期备份就可以了·是防止数据因操作不当或服务器出错而用的紧急措施!平均一周备份一次就行,而且每次备份留当次和上一次就可以了!多了没用 参考技术C 如果每天都有备份,可以不要日志,除非你要以恢复到某一时点!你可以做成代理,让系统自动完成! 参考技术D 日志肯定有用,如果你想恢复到之前某个时间点,就要靠日志进行回滚
1楼 谁告诉事物日志不要备份的?本回答被提问者采纳
第5个回答  2012-03-26 干吗每天要备份数据库啊?日志有用的 事务日志不用备份

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

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

 

一、备份还原基本概念

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

以上是关于SQL2000每天都备份数据库,日志还有用吗的主要内容,如果未能解决你的问题,请参考以下文章

sql server 2000 日志备份

SQL Server备份完整备份,差异备份日志备份

sql2000 数据库置疑解决

数据库无法还原,

SQL Server备份恢复维护计划实现备份:每周数据库完整备份每天差异备份每小时日志备份

SQL Server备份恢复维护计划实现备份:每周数据库完整备份每天差异备份每小时日志备份