답변:
아니요, SQL Server는 중단되거나 롤백 된 트랜잭션에 대한 기록을 유지하지 않으므로 사소한 일이며 추가 잠재적 인 문제가 발생하지 않습니다 ( @ooutwire의 답변에 설명되어 있음 ). 또는 커밋 된 트랜잭션조차도.
오류 처리 내에서 자체 로깅을 수행하거나 서버 측 추적 또는 확장 이벤트를 사용하여 특정 트랜잭션 관련 이벤트를 캡처해야합니다.
자취:
확장 이벤트 :
"실패한"거래라고 할 때 정확히 무엇을 의미합니까?
인스턴스에서 현재 트랜잭션을 보려면 sys.dm_tran_active_transactions
DMV를 활용할 수 있습니다 .
또한, sys.dm_exec_sessions
가 open_transaction_count
당신에게 세션으로이 정보를 제공 할 수 있습니다. 다음은 열린 트랜잭션이있는 모든 사용자 프로세스를 가져 오는 진단 쿼리입니다.
select
s.session_id,
s.login_name,
s.open_transaction_count,
st.text as most_recent_sql_text
from sys.dm_exec_sessions s
inner join sys.dm_exec_connections c
on s.session_id = c.session_id
outer apply sys.dm_exec_sql_text(c.most_recent_sql_handle) st
where s.is_user_process = 1
and s.open_transaction_count > 0;
이 정보는 다음에서 가져올 수도 있습니다 sys.dm_tran_session_transactions
.
select
session_id,
is_user_transaction,
open_transaction_count
from sys.dm_tran_session_transactions;
트랜잭션이 롤백 될 때 캡처하려면 ( "실패한"트랜잭션에 대한 욕구로 너무 많이 가정) 확장 이벤트 rollback_tran_completed
이벤트를 캡처 할 수 있습니다 . 트랜잭션에 대한 "모든 것"보기를 찾고 있다면 sql_transaction
SQL Server에서 정의한대로 이벤트를 캡처 할 수 있습니다.
SQL Server 트랜잭션이 저장 점을 시작, 완료, 롤백 또는 실행할 때 발생합니다. 이 이벤트를 사용하여 응용 프로그램, 트리거 또는 저장 프로 시저의 문제를 해결할 때 트랜잭션 동작을 모니터링하십시오.
fn_dblog ()를 사용하여 중단 된 트랜잭션의 트랜잭션 ID와 기타 유용한 정보를 찾을 수 있습니다.
고르다 * fn_dblog에서 (NULL, NULL) 어디에서 작업 = 'LOP_ABORT_XACT'; 가다
로그의 활성 부분에서 모든 트랜잭션 로그를 스캔합니다. 트레이스 플래그 2537을 사용하여 오버라이드 할 수 있으며, 가장 오래된 "재사용되지 않은"VLF의 시작 부분까지 가능한 한 멀리 되돌아 갈 수 있습니다. 이 기능은 로그를 무작위로 스캔하며 스캔이 진행 중일 때는 로그를 변경할 수 없으므로이 기능을 사용할 때는주의하십시오. 따라서 로그 증가가 나타날 수 있습니다.
로그 백업 파일에 대해 fn_dump_dblog를 사용할 수도 있습니다.