Có cách nào để liệt kê các giao dịch đang mở trên cơ sở dữ liệu SQL Server 2000 không?


100

Có ai biết bất kỳ cách nào để liệt kê các giao dịch đang mở trên cơ sở dữ liệu SQL Server 2000 không?

Tôi biết rằng tôi có thể truy vấn chế độ xem sys.dm_tran_session_transactionstrên các phiên bản cơ sở dữ liệu SQL 2005 (và mới hơn), tuy nhiên điều này không khả dụng trên SQL 2000.

Câu trả lời:


155

Đối với tất cả cơ sở dữ liệu truy vấn sys.sysprocesses

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

Đối với việc sử dụng cơ sở dữ liệu hiện tại:

DBCC OPENTRAN

34

Bạn có thể nhận được tất cả thông tin về giao dịch đang hoạt động nhờ sự trợ giúp của truy vấn dưới đây

SELECT
trans.session_id AS [SESSION ID],
ESes.host_name AS [HOST NAME],login_name AS [Login NAME],
trans.transaction_id AS [TRANSACTION ID],
tas.name AS [TRANSACTION NAME],tas.transaction_begin_time AS [TRANSACTION 
BEGIN TIME],
tds.database_id AS [DATABASE ID],DBs.name AS [DATABASE NAME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans
ON (trans.transaction_id=tas.transaction_id)
LEFT OUTER JOIN sys.dm_tran_database_transactions tds
ON (tas.transaction_id = tds.transaction_id )
LEFT OUTER JOIN sys.databases AS DBs
ON tds.database_id = DBs.database_id
LEFT OUTER JOIN sys.dm_exec_sessions AS ESes
ON trans.session_id = ESes.session_id
WHERE ESes.session_id IS NOT NULL

và nó sẽ cho kết quả tương tự bên dưới nhập mô tả hình ảnh ở đây

và bạn đóng giao dịch đó bằng trợ giúp bên dưới truy vấn KILL bằng cách tham chiếu id phiên

KILL 77

Chà, cái này rất hay, tôi thích số lượng dữ liệu được cung cấp, điều duy nhất là bạn cần phải là quản trị viên để chạy nó, DBCC OPENTRAN cần ít quyền hơn. Nhưng vẫn còn ... rất tốt
Yogurtu

Rất hữu ích, cảm ơn bạn! Nếu nó trả lời câu hỏi của OP (SQL 2000), nó phải là câu trả lời được chấp nhận. Có một ủng hộ ...
Reversed Engineer

Tuyệt vời, có được những gì tôi muốn.
Vipul

23

DBCC OPENTRAN giúp xác định các giao dịch đang hoạt động có thể ngăn chặn việc cắt ngắn nhật ký. DBCC OPENTRAN hiển thị thông tin về giao dịch hoạt động lâu đời nhất và các giao dịch sao chép được phân phối và không được phân phối cũ nhất, nếu có, trong nhật ký giao dịch của cơ sở dữ liệu được chỉ định. Kết quả chỉ được hiển thị nếu có một giao dịch đang hoạt động tồn tại trong nhật ký hoặc nếu cơ sở dữ liệu chứa thông tin sao chép.

Một thông báo thông tin được hiển thị nếu không có giao dịch nào đang hoạt động trong nhật ký.

DBCC OPENTRAN


0

Sử dụng điều này vì bất cứ khi nào giao dịch mở nhiều hơn một giao dịch thì bên dưới sẽ hoạt động CHỌN * TỪ sys.sysprocesses WHERE open_tran <> 0

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.