不過在培訓(xùn)的過程中倒是有個(gè)挺有意思的插曲,就是關(guān)于SQL Server 對(duì)日志的管理。
以前就知道SQL Server 一共有三種還原模式,分別是完全,大容量和簡(jiǎn)單。其中完全是保存所有事務(wù)日志,大容量是在做大容量插入的時(shí)候不記錄日志 比如執(zhí)行 bcp 什么的。這兩種日志類型都必須備份后才能截?cái)唷?簡(jiǎn)單模式就是不保存事務(wù)日志,每個(gè)檢查點(diǎn)后都將日志截?cái)唷?/p>
在課堂上老師帶著做實(shí)驗(yàn),用系統(tǒng)的性能監(jiān)視器監(jiān)視數(shù)據(jù)庫日志文件的使用情況。把數(shù)據(jù)庫日志文件的自動(dòng)增長(zhǎng)屬性去掉,然后寫一個(gè)腳本往表里插數(shù),觀察日志的占用情況
執(zhí)行以下腳本:
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
然后打開性能監(jiān)視器,監(jiān)視日志占用情況
Performance object : SQL Server: Database
Counters from list: Log file(s) Size (KB) & Log File(s) Used Size(KB)
Instances from list: LogTest
執(zhí)行
Declare @i int
SET @i = 1
WHILE 1=1
BEGIN
INSERT INTO LogTestTable VALUES (@i,'LogTest'+cast(@i as nvarchar(50)))
END
居然發(fā)現(xiàn)曲線有上有下
我的故障還原模式可是選的完全啊! SQL Server 居然自動(dòng)就給截?cái)嗔耍容^可怕的事情阿!基本上完全顛覆了我以前的理解。
不知道日志都刪了靠啥還原數(shù)據(jù)。
后來問了微軟的牛人才知道。新數(shù)據(jù)庫必須要做一次完全備份之后才能保留日志,在做備份之前還原模式就是簡(jiǎn)單,不管你選什么!
不得不承認(rèn)細(xì)節(jié)的人性化設(shè)計(jì)??!設(shè)計(jì)者本來完全可以就根據(jù)你的選擇保留日志,不管有沒有用。但微軟就把這一點(diǎn)細(xì)節(jié)修改了,因?yàn)榭紤]到如果不做完全備份的話保留事務(wù)日志是沒有意義的。
不得不佩服!
聯(lián)系客服