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

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

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



답변

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

SELECT * FROM sys.sysprocesses WHERE open_tran = 1

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

DBCC OPENTRAN


답변

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

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

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

DBCC OPENTRAN


답변

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


답변