新数据库必须要做一次完全备份之后才能保留日志,在做备份之前还原模式就是简单,不管你选什么!

在完全恢复模式下事务日志居然会被自动截断

转自:http://blog.csdn.net/jadeite/article/details/1639356

  

         不过在培训的过程中倒是有个挺有意思的插曲,就是关于SQL Server 对日志的管理。

        以前就知道SQL Server 一共有三种还原模式,分别是完全,大容量和简单。其中完全是保存所有事务日志,大容量是在做大容量插入的时候不记录日志 比如执行 bcp 什么的。这两种日志类型都必须备份后才能截断。 简单模式就是不保存事务日志,每个检查点后都将日志截断。

         在课堂上老师带着做实验,用系统的性能监视器监视数据库日志文件的使用情况。把数据库日志文件的自动增长属性去掉,然后写一个脚本往表里插数,观察日志的占用情况

        执行以下脚本:

CREATE DATABASE [LogTest] ON  PRIMARY

( NAME = N'LogTest', FILENAME = N'C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/DATA/LogTestDB.mdf' ,

      SIZE = 18432KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

 LOG ON

( NAME = N'LogTest_log', FILENAME = N'C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/DATA/LogTest_log.ldf' ,

      SIZE = 10240KB , MAXSIZE = 2048GB , FILEGROWTH = 0)

GO

 

USE LogTest

 

CREATE TABLE LogTestTable

(

LT_ID int null,

LT_Decription nvarchar(50) null

)

GO

 

然后打开性能监视器,监视日志占用情况

 

Performance object :  SQL Server: Database

Counters from list:  Log file(s) Size (KB) &  Log File(s) Used Size(KB)

Instances from list: LogTest

执行

Declare @i int

SET @i = 1

WHILE 1=1

BEGIN

      INSERT INTO LogTestTable VALUES (@i,'LogTest'+cast(@i as nvarchar(50)))

END

 

居然发现曲线有上有下

新数据库必须要做一次完全备份之后才能保留日志,在做备份之前还原模式就是简单,不管你选什么!_第1张图片

 

我的故障还原模式可是选的完全啊! SQL Server 居然自动就给截断了,比较可怕的事情阿!基本上完全颠覆了我以前的理解。

 

不知道日志都删了靠啥还原数据。

 

后来问了微软的牛人才知道。新数据库必须要做一次完全备份之后才能保留日志,在做备份之前还原模式就是简单,不管你选什么!

 

不得不承认细节的人性化设计啊!设计者本来完全可以就根据你的选择保留日志,不管有没有用。但微软就把这一点细节修改了,因为考虑到如果不做完全备份的话保留事务日志是没有意义的。

 

不得不佩服!

 

你可能感兴趣的:(sql,数据库,server,list,脚本,File,performance)