실패했거나 커밋되지 않은 트랜잭션 가져 오기


답변:


5

아니요, SQL Server는 중단되거나 롤백 된 트랜잭션에 대한 기록을 유지하지 않으므로 사소한 일이며 추가 잠재적 인 문제가 발생하지 않습니다 ( @ooutwire의 답변에 설명되어 있음 ). 또는 커밋 된 트랜잭션조차도.

오류 처리 내에서 자체 로깅을 수행하거나 서버 측 추적 또는 확장 이벤트를 사용하여 특정 트랜잭션 관련 이벤트를 캡처해야합니다.

자취:

여기에 이미지 설명을 입력하십시오

확장 이벤트 :

여기에 이미지 설명을 입력하십시오


물론, 로그 파일과 로그 백업 파일에 있습니다.
ooutwire

1
@ ooutwire 그리고 당신은 어떻게 그 사람들에게 쉽게 갈 수 있습니까? 그들이 더 이상 통나무에 없으면 어떻게 그들에게 가나 요? 이러한 로그 레코드는 일시적입니다.
Aaron Bertrand

내 대답을 참조하십시오. 가장 좋은 방법은 빈번한 로그 백업을 만드는 것입니다. 그러한 해결책이 이상적이지 않다는 데 동의합니다. 하지만 중단 된 거래를 찾기 위해 항상 검색 할 이유가 없습니다. 그것이 원하는 경우, 추적 또는 XEvent보다 신중한 해결책으로 보일 것입니다.
ooutwire

2
물론 당신의 대답을 보았습니다. 나는 쉽게 말했다 또한 신뢰할 수 있다고 말했다 . :-)
Aaron Bertrand

6
나는 이것에 @AaronBertrand와 함께 있습니다. 문제가 발생하면 트랜잭션 로그를 참고해야합니다 ( 참고 : 의도 한 것이 아님).이 문제 해결을 위해 간단한 XE 세션을 만들 수도 있습니다.
토마스 스트링거

4

"실패한"거래라고 할 때 정확히 무엇을 의미합니까?

인스턴스에서 현재 트랜잭션을 보려면 sys.dm_tran_active_transactionsDMV를 활용할 수 있습니다 .

또한, sys.dm_exec_sessionsopen_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_transactionSQL Server에서 정의한대로 이벤트를 캡처 할 수 있습니다.

SQL Server 트랜잭션이 저장 점을 시작, 완료, 롤백 또는 실행할 때 발생합니다. 이 이벤트를 사용하여 응용 프로그램, 트리거 또는 저장 프로 시저의 문제를 해결할 때 트랜잭션 동작을 모니터링하십시오.


4

fn_dblog ()를 사용하여 중단 된 트랜잭션의 트랜잭션 ID와 기타 유용한 정보를 찾을 수 있습니다.

고르다 * 
fn_dblog에서 (NULL, NULL)
어디에서 작업 = 'LOP_ABORT_XACT';
가다

로그의 활성 부분에서 모든 트랜잭션 로그를 스캔합니다. 트레이스 플래그 2537을 사용하여 오버라이드 할 수 있으며, 가장 오래된 "재사용되지 않은"VLF의 시작 부분까지 가능한 한 멀리 되돌아 갈 수 있습니다. 이 기능은 로그를 무작위로 스캔하며 스캔이 진행 중일 때는 로그를 변경할 수 없으므로이 기능을 사용할 때는주의하십시오. 따라서 로그 증가가 나타날 수 있습니다.

로그 백업 파일에 대해 fn_dump_dblog를 사용할 수도 있습니다.

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