http://www.shangxueba.com/jingyan/52245.html
--待确认该测试
今天碰到一位朋友提出问题,SQLSERVER全库备份时,如果日志文件很大,是否也会包含进备份文件里,经过实验如下:
--创建数据库
create database db1
on primary
name='db1',
filename='e:\ls\db1.mdf',
size=3mb,
filegrowth=1mb
)
log on
(name='db1_log',
filename='e:\ls\db1.ldf',
size=512mb,
filegrowth=10mb)
--执行全库备份
backup database db1 to disk='e:\ls\db1.bak'
--此时发现备份文件仅不到2MB,说明日志文件和数据文件都不是完整拷贝(其实数据文件是按其所使用的数据页来备份的)
--设法生成日志
use db1
create table t1 (id int)
go
declare @var int
set @var=1000000
while @var>0
begin
end
--查看下日志文件,不再是空的了
dbcc sqlperf('logspace')
--结果如下:
Database Name
db1
--由此可见,此时日志文件已经基本填满,当然,此时数据文件已经15360KB
--再做一次全库备份
backup database db1 to disk='e:\ls\db1_2.bak'
--经查看备份文件,此时为15449KB,略大于数据文件
--我们用此备份还原一个数据库出来,看看其日志文件是否还完整
restore database db11 from disk='e:\ls\db1_2.bak'
with move 'db1' to 'e:\ls\db1_2.mdf', move 'db1_log' to'e:\ls\db1_2.ldf'
dbcc sqlperf('logspace')
--结果如下:
Database Name
db1
db11
--由此可见,日志文件内部已经基本为空了
--到这里,至少可以说明全库备份时应该是只备份了必要的日志,而非全部日志。