您的位置:首页 > 数据库

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

2011-11-28 10:47 513 查看

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

转自: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

居然发现曲线有上有下



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

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

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

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

不得不佩服!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐