SQL Server 2000 데이터베이스에서 열린 트랜잭션을 나열하는 방법이 있습니까?


100

SQL Server 2000 데이터베이스에서 열린 트랜잭션을 나열하는 방법을 아는 사람이 있습니까?

sys.dm_tran_session_transactionsSQL 2005 (및 이후) ​​데이터베이스 버전 에서 뷰 를 쿼리 할 수 ​​있다는 것을 알고 있지만 SQL 2000에서는 사용할 수 없습니다.

답변:


157

모든 데이터베이스에 대해 sys.sysprocesses 쿼리

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

현재 데이터베이스의 경우 :

DBCC OPENTRAN

34

아래 쿼리를 통해 활성 거래의 모든 정보를 얻을 수 있습니다.

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

비슷한 결과를 얻을 수 있습니다. 여기에 이미지 설명 입력

세션 ID를 참조하여 KILL 쿼리 아래의 도움말로 해당 트랜잭션을 닫습니다.

KILL 77

와우, 이것은 매우 좋습니다. 제공된 데이터의 양이 마음에 들었습니다. 유일한 단점은 실행하려면 관리자 여야하고 DBCC OPENTRAN은 더 적은 권한이 필요하다는 것입니다. 하지만 여전히 ... 아주 좋은
Yogurtu

매우 유용합니다. 감사합니다! OP의 질문 (SQL 2000)에 대한 대답이 있다면 받아 들여진 대답이어야합니다. upvote에 ...이
반전 엔지니어

대단해, 내가 원하는 것을 얻었습니다.
Vipul

23

DBCC OPENTRAN 은 로그 잘림을 방해 할 수있는 활성 트랜잭션을 식별하는 데 도움이됩니다. DBCC OPENTRAN은 지정된 데이터베이스의 트랜잭션 로그 내에서 가장 오래된 활성 트랜잭션과 가장 오래된 분산 및 비 분산 복제 트랜잭션에 대한 정보를 표시합니다. 로그에 활성 트랜잭션이 있거나 데이터베이스에 복제 정보가 포함 된 경우에만 결과가 표시됩니다.

로그에 활성 트랜잭션이없는 경우 정보 메시지가 표시됩니다.

DBCC OPENTRAN


0

트랜잭션이 둘 이상의 트랜잭션을 열 때마다 아래에서 SELECT * FROM sys.sysprocesses WHERE open_tran <> 0 이 작동하기 때문에 이것을 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.