SQL 서버 데이터베이스에 대한 모든 업데이트가 기본 데이터베이스에 적용되기 전에 먼저 T-Log에 추가되었다는 인상을 받았습니다. 서버가 손상된 경우 복원 프로세스는 커밋되지 않은 트랜잭션을 롤백합니다. 이것은 커밋 또는 롤백이 호출되지 않으면 변경 작업이 수행되지 않는 경우에도 트랜잭션과 관련된 작업을 가정했습니다.커밋 또는 롤백없이 DB에 적용되는 트랜잭션 업데이트
SQL Server와 트랜잭션이 거의 다르게 작용하는 것을보고 싶었습니다. 즉 커밋 또는 롤백이없는 트랜잭션 업데이트. 나는 내가 이해하지 못하는 것을 발견했다. 특히 SQL Server가이를 어떻게 허용 할 수 있는지에 대해 설명합니다.
커밋 또는 롤백에 도달하기 전에 트랜잭션을 중지 할 충분한 시간을주기 위해 지연을 사용하여 테이블에 행을 삽입하기 위해 아래 스크립트를 사용했습니다. 이것은 클라이언트 응용 프로그램이 트랜잭션이 완료되기 전에 시간 초과되는 것을 시뮬레이션 한 것이라고 생각합니다.
Create Table MyTest (Comment varchar(20))
Go
Create Procedure MyProc
as
Begin Try
Begin Transaction
Insert Into MyTest Select 'My First Entry'
WaitFor Delay '00:00:02'
Insert Into MyTest Select 'My Second Entry'
WaitFor Delay '00:00:02'
Insert Into MyTest Select 'My Third Entry'
Commit Transaction
Return 0 -- success
End Try
Begin Catch
If (@@trancount<>0) Rollback Transaction
Declare @err int, @err_msg varchar(max)
Select @err = error_number(), @err_msg = error_message()
Raiserror(@err_msg, 16,1)
Return @err
End Catch
절차를 얼마나 빨리 중지 하느냐에 따라 첫 번째 또는 두 개의 삽입이 테이블에 남아 있음을 알 수 있습니다. 누군가 이것이 왜 이런 일이 일어날 지 설명 할 수 있을까요?
Select * From MyTest
나는 SQL에서이 테스트를 2008 년