BULK_LOGGED 模式下的日志备份

BULK_LOGGED 这种还原模式大家可能比较熟悉. 按照联机丛书的解释, 


An adjunct of the full recovery model that permits high-performance bulk copy operations.Reduces log space usage by using minimal logging for most bulk operations.

这里提醒大家注意一下, 虽然BULK_LOGGED模式可以大量减少某些操作所记录的日志, 但是在日志备份的时候, 可能会生成比FULL模式下更大的日志备份, 以下是一个例子.

USE hp;
--修改还原模式为FULL
ALTER DATABASE hp SET RECOVERY FULL 
--做完全备份, 为日志备份提供基准
BACKUP DATABASE hp TO DISK = 'c:\hp_back.bck'
--查看日志文件利用率
DBCC SQLPERF(LOGSPACE)


从结果可看出来, 现在日志文件有101MB, 其中有4%是使用的.


--重建日志
DBCC DBREINDEX ('dbo.students',test_index,80);
GO
DBCC DBREINDEX ('dbo.students',au_id_clidx,80);
GO
DBCC DBREINDEX ('dbo.students',students_name,80);
GO
--查看日志文件利用率
DBCC SQLPERF(LOGSPACE)



从结果可以看出, 在FULL的还原模式下, 重建索引, 会生成比较多的日志, 就这个例子,约有90MB.


--备份日志文件
BACKUP LOG hp TO DISK = 'c:\hp_log_full.trn'



备份事务日志, 可以看到备份了12422个页

以下测试还原模式为BULK_LOGGED时的情况.

--将还原模式修改为BULK_LOGGED
ALTER DATABASE hp SET RECOVERY BULK_LOGGED
--查看日志文件利用率
DBCC SQLPERF(LOGSPACE)





--重建索引
DBCC DBREINDEX ('dbo.students',test_index,80);
GO
DBCC DBREINDEX ('dbo.students',au_id_clidx,80);
GO
DBCC DBREINDEX ('dbo.students',students_name,80);
GO
--查看日志文件利用率
DBCC SQLPERF(LOGSPACE)



从结果可以看出, 日志文件的使用率只多了大概2%, 比在FULL模式下的96% 少了很多. 这也就充分体现了选择这种还原模式所带来的好处.

但是此时试着备份以下日志文件, 看一下结果会怎么样.

--备份日志文件
BACKUP LOG hp TO DISK = 'c:\hp_log_bulk.trn'

BULK_LOGGED 模式下的日志备份_第1张图片

从结果来看, 备份了15177个页, 比在FULL模式下的日志备份还要多一些.

这些页除了一些(281 pages)是在hp_log这个日志文件中,  还有大部分的是在其他几个数据文件中(hp, hp_data1,hp_data3, hp2_data1).

究其原因, 在BULK_LOGGED模式下做日志备份, 除了会备份日志, 还会把那些使用最小日志记录的操作所相关的数据页备份下来.  因为这些重建的索引分布在这几个数据文件里,所以从返回结果看,除了备份了日志, 还把各个数据文件中重建的索引页备份了下来.  另外如果数据库是在BULK_LOGGED的模式下, 发生了bulk-logged的操作, 这个时候备份出来的日志, 是不支持还原到指定时间点的, 只能将这个日志全部还原.

关于BULK_LOGGED模式下的备份, 请参考: http://msdn.microsoft.com/en-us/library/ms190692.aspx














你可能感兴趣的:(数据库,测试,database,HP,logging,disk)