Tìm transaction chưa hoàn thành trong nhiều Database


Chào các bạn,

đôi khi server bạn treo cứng không rõ nguyên nhân, có rất nhiều nguyên nhân. Một trong những nguyên nhân đó là ứng dụng xử lý mở nhiều transaction nhưng không rollback hoặc commit transaction.

Trên server của bạn có rất nhiều database, vậy làm sao chúng ta biết database nào đang chứa transaction bị treo lơ lửng ?
Câu lệnh TSQL bên dưới sẽ giúp chúng ta quét toàn bộ các database và kiểm tra transaction log:

Ví dụ tôi tạo table T2 trong database “dbccopentran” và mở transaction insert dữ liệu vào table này nhưng không commit transaction.
01

Tôi sẽ khai báo một câu lệnh TSQL động, thông qua mỗi lần select, giá trị biến này sẽ cộng dồn tạo thành một câu lệnh TSQL liên hoàn và cuối cùng xử lý một lần. Trong lúc tạo câu lệnh động tôi loại trừ các Database hệ thống ra.

DECLARE @strSQL nvarchar(max) = ”
SELECT @strSQL = @strSQL + ‘ DBCC opentran(”’ + name + ”’);’ FROM sys.databases
where name NOT IN (‘master’,’msdb’,’model’,’ReportServer’,’ReportServerTempDB’)
EXEC (@strSQL)

02

=> Kết luận: Dĩ nhiên chúng ta có rất nhiều cách để tìm ra transaction bị “kẹt” và xử lý nó nhưng đây cũng là một cách tìm nhanh.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s