不过在培训的过程中倒是有个挺有意思的插曲,就是关于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 居然自动就给截断了,比较可怕的事情阿!基本上完全颠覆了我以前的理解。
不知道日志都删了靠啥还原数据。
后来问了微软的牛人才知道。新数据库必须要做一次完全备份之后才能保留日志,在做备份之前还原模式就是简单,不管你选什么!
不得不承认细节的人性化设计啊!设计者本来完全可以就根据你的选择保留日志,不管有没有用。但微软就把这一点细节修改了,因为考虑到如果不做完全备份的话保留事务日志是没有意义的。
不得不佩服!