事務長期不提交致使日誌不能截斷

  因爲某個事務長期不提交,致使日誌不能被截斷,ldf文件持續增加,卻不能收縮。
sql


1、搭建測試環境數據庫

1. 建立數據庫,恢復模式爲簡單服務器

CREATE DATABASE [db01]ide

ON  PRIMARY測試

( NAME = N'db01', FILENAME = N'C:\sqldata\db01.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB )this

LOG ONspa

( NAME = N'db01_log', FILENAME = N'C:\sqldata\db01_log.ldf' , SIZE = 1024KB , FILEGROWTH = 1024KB)日誌

ALTER DATABASE [db01] SET RECOVERY SIMPLEblog


2. 建立表並插入一條新記錄進程

USE db01

CREATE TABLE table1

(UserID int,pwd char(20),OtherInfo char(4100),modifydate datetime)

INSERT table1

VALUES ( 123,'456','this is the first record',getdate() )


3. 備份數據庫

BACKUP DATABASE [db01]

TO  DISK = N'C:\Backup\db01.bak' WITH FORMAT, INIT


2、執行事務但不提交

1. 執行一個事務,但不提交

BEGIN TRAN T1

SELECT *  FROM table1 WITH (NOLOCK)

113242933.png


2. 從同一個服務器進程id(SPID)執行如下循環,反覆修改數據,使ldf增加

BEGIN TRAN T2

DECLARE @i int

SET @i=0

WHILE @i<10000

BEGIN

UPDATE table1

SET pwd = cast(floor(rand()*100000) as varchar(20)),

  OtherInfo=cast(floor(rand()*100000) as char(4100)),

  modifydate = GETDATE()

WHERE UserID=123

SET @i=@i+1

END

COMMIT TRAN T2

說明:因爲第一筆交易未完成,當後續事務從同一個鏈接執行,被視爲嵌套事務。


3. 在新的進程中,嘗試收縮日誌文件

DBCC SHRINKFILE (N'db01_log' , 0, TRUNCATEONLY)

注:不能在事務內執行SHRINKFILE操做。


5. 查看數據庫的磁盤使用空間

  此時,ldf文件爲6MB。而這個數據庫最初建立時ldf文件爲1MB。上述實驗,說明嵌套事務中,某一個事務未提交,將致使事務日誌不能截斷。


參考 http://support.microsoft.com/kb/295108


3、查找未提交的事務

執行DBCC OPENTRAN

DBCC OPENTRAN

返回的信息以下:

數據庫 'db01' 的事務信息。


最先的活動事務:

   SPID (服務器進程 ID): 53

   UID (用戶 ID): -1

   名稱          : T1

   LSN           : (39:65:1)

   開始時間    : 11 27 2013  11:18:59:950AM

   SID           : 0x010500000000000515000000b9970467bf7ed144e62fd7bbf4010000

DBCC 執行完畢。若是 DBCC 輸出了錯誤信息,請與系統管理員聯繫。


4、處理未提交的事務

1. 提交事務

COMMIT TRAN T1


2. 收縮日誌文件

DBCC SHRINKFILE (N'db01_log' , 0, TRUNCATEONLY)


3. 使用DBCC OPENTRAN查看活動事務,結果以下

數據庫 'db01' 的事務信息。


最先的活動事務:

   SPID (服務器進程 ID): 54

   UID (用戶 ID): -1

   名稱          : T1

   LSN           : (39:65:1)

   開始時間    : 11 27 2013  2:18:59:950PM

   SID           : 0x010500000000000515000000b9970467bf7ed144e62fd7bbf4010000

DBCC 執行完畢。若是 DBCC 輸出了錯誤信息,請與系統管理員聯繫。


4. 查看ldf文件

  此時,ldf文件從6MB收縮到1MB。說明事務已提交,事務日誌被截斷,從而能夠釋放磁盤空間。

相關文章
相關標籤/搜索