SQLSERVER2008备份对日志文件的操…

时间:2022-01-18 07:13:44

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
 insert into t1 values(@var)
 set @var=@var-1
end

--查看下日志文件,不再是空的了

dbcc sqlperf('logspace')

--结果如下:

Database Name Log Size(MB) Log Space Used(%) Status
db1 511.9922 95.64918 0
--由此可见,此时日志文件已经基本填满,当然,此时数据文件已经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 Log Size(MB) Log Space Used(%) Status
db1 511.9922 95.64918 0
db11 511.9922 8.276588 0

 

--由此可见,日志文件内部已经基本为空了

--到这里,至少可以说明全库备份时应该是只备份了必要的日志,而非全部日志。