지연된 트랜잭션(SQL Server)
적용 대상: SQL Server
SQL Server Enterprise에서는 손상된 트랜잭션이 롤백(실행 취소)에 필요한 데이터가 데이터베이스 시작 시 오프라인 상태인 경우에 지연될 수 있습니다. 지연된 트랜잭션 은 롤포워드 단계가 완료될 때 커밋되지 않으며, 오류로 인해 롤백할 수 없는 트랜잭션입니다. 트랜잭션을 롤백할 수 없으므로 해당 트랜잭션은 지연됩니다.
참고 항목
손상된 트랜잭션은 SQL Server Enterprise에서만 지연됩니다. 다른 버전의 SQL Server에서는 손상된 트랜잭션으로 인해 시작이 실패합니다.
일반적으로 지연된 트랜잭션은 데이터베이스가 롤포워드되는 동안 I/O 오류로 인해 트랜잭션에 필요한 페이지를 읽지 못하기 때문에 발생합니다. 그러나 파일 수준의 오류로 인해 지연된 트랜잭션이 발생할 수도 있습니다. 또한 트랜잭션 롤백이 필요한 시점에 부분 복원 시퀀스가 중지되고 오프라인 상태인 데이터가 트랜잭션에 필요하면 지연된 트랜잭션이 발생할 수 있습니다.
롤백되고 I/O 오류가 발생하는 사용자 트랜잭션은 전체 데이터베이스를 오프라인 상태로 만듭니다. 데이터베이스를 다시 온라인 상태로 만들면 다시 실행이 이전 잠금을 모두 다시 획득하며 커밋되지 않은 모든 트랜잭션을 롤백하려고 시도합니다. 트랜잭션이 수정한 모든 데이터는 트랜잭션이 롤백될 때까지 적절하게 잠겨 있습니다. 롤백할 수 없는 트랜잭션은 손상이 수정되고 데이터베이스가 다시 시작되거나 온라인 복원 후 데이터베이스가 온라인 상태로 유지되는 동안 지연된 트랜잭션이 해결될 때 잠금을 포기합니다. 이 시점까지 지연된 트랜잭션은 데이터베이스 전체에서 특정 작업을 방지하는 잠금을 보유할 수 있습니다. 예를 들어 지연된 트랜잭션에 CREATE TABLE 명령이 포함된 경우 지연된 트랜잭션이 해결될 때까지 테이블을 만들 수 없습니다.
증분 복원이 하나 이상의 활성 트랜잭션이 아직 복원되지 않고 오프라인 상태인 파일 그룹에 영향을 주는 지점으로 데이터베이스를 복구하기 때문에 지연된 트랜잭션이 발생할 수도 있습니다. 트랜잭션을 롤백할 수 없으므로 해당 트랜잭션은 지연됩니다.
다음 표에서는 I/O 문제가 발생하는 경우 데이터베이스에서 복구를 수행하도록 하는 동작과 결과를 보여 줍니다.
작업 | 해결 방법(I/O 문제가 발생하거나 필요한 데이터가 오프라인 상태일 경우) |
---|---|
서버 시작 | 지연된 트랜잭션 |
복원 | 지연된 트랜잭션 |
Attach | 첨부 실패 |
자동 다시 시작 | 지연된 트랜잭션 |
데이터베이스 또는 데이터베이스 스냅샷 만들기 | 만들기 실패 |
데이터베이스 미러링에서 다시 실행 | 지연된 트랜잭션 |
파일 그룹이 오프라인 상태 | 지연된 트랜잭션 |
요구 사항 및 제한 사항
- 데이터베이스는 전체 또는 대량 로그된 복구 모델을 사용해야 합니다.
- 데이터베이스를 대상으로 하나 이상의 데이터베이스 및 로그 백업이 완료되어 있어야 합니다.
- 지연된 트랜잭션은 데이터베이스가 온라인 상태가 된 후 트랜잭션 롤백 중에 발생하는 오류에는 적용되지 않습니다. (예: 런타임 오류)
- 데이터베이스를 첨부하는 동안 발생한 복구 실패에 대해 트랜잭션을 지연할 수 없습니다.
- 시스템 트랜잭션(예: 페이지 할당)과 같은 일부 트랜잭션은 지연할 수 없습니다.
DEFERRED 상태에서 트랜잭션 이동
Important
지연된 트랜잭션은 트랜잭션 로그를 활성 상태로 유지합니다. 지연된 트랜잭션이 포함된 가상 로그 파일은 해당 트랜잭션이 지연된 상태에서 이동될 때까지 잘립니다. 로그 잘림에 대한 자세한 내용은 트랜잭션 로그(SQL Server)를 참조하세요.
트랜잭션을 지연된 상태에서 이동하려면 데이터베이스가 I/O 오류 없이 완전히 시작해야 합니다. 지연된 트랜잭션이 있는 경우 I/O 오류의 원인을 수정해야 합니다. 일반적으로 시도되는 순서대로 나열된 사용 가능한 솔루션은 다음과 같습니다.
데이터베이스를 다시 시작합니다. 문제가 일시적인 경우 데이터베이스는 지연된 트랜잭션 없이 시작해야 합니다.
파일 그룹의 오프라인 상태에 따라 트랜잭션이 지연된 경우 파일 그룹을 다시 온라인 상태로 만듭니다.
오프라인 파일 그룹을 다시 온라인 상태로 만들려면 다음 Transact-SQL 문을 사용합니다.
RESTORE DATABASE database_name FILEGROUP=<filegroup_name>
데이터베이스를 복원합니다. 온라인 복원 후 모든 지연된 트랜잭션이 해결됩니다.
전체 또는 대량 로그 복구 모델에서 지연된 트랜잭션이 일부 손상된 페이지에 의해서만 발생한 경우 온라인 페이지 복원으로 인해 오류가 해결될 수 있습니다(지원되는 경우).
오프라인 상태가 지연된 트랜잭션을 일으키는 파일 그룹이 더 이상 필요하지 않은 경우 오프라인 파일 그룹을 비활성화합니다. 파일 그룹이 오프라인 상태이기 때문에 지연된 트랜잭션은 파일 그룹이 소멸된 후 지연된 상태에서 벗어납니다.
Important
존재하지 않는 파일 그룹은 복구할 수 없습니다.
자세한 내용은 존재하지 않는 파일 그룹 제거(SQL Server)를 참조하세요.
잘못된 페이지로 인해 트랜잭션이 지연되고 데이터베이스의 적절한 백업이 없는 경우 다음 프로세스를 사용하여 데이터베이스를 복구합니다.
먼저 다음 Transact-SQL 문을 실행하여 데이터베이스를 긴급 모드로 전환합니다.
ALTER DATABASE <database_name> SET EMERGENCY
응급 모드에 대한 자세한 내용은 Database States를 참조하십시오.
그런 후에 DBCC 문인 DBCC CHECKDB, DBCC CHECKALLOC또는 DBCC CHECKTABLE중 하나에 DBCC REPAIR_ALLOW_DATA_LOSS 옵션을 사용하여 데이터베이스를 복구합니다.
DBCC에서 잘못된 페이지가 발견되면 DBCC는 할당을 해제하고 관련 오류를 복구합니다. 이 방법을 사용하면 물리적으로 일관된 상태로 데이터베이스를 다시 온라인 상태로 만들 수 있습니다. 그러나 추가 데이터가 손실될 수도 있습니다. 따라서 이 방법은 최후의 수단으로 사용해야 합니다.
참고 항목
복원 및 복구 개요(SQL Server)
존재하지 않는 파일 그룹 제거(SQL Server)
파일 복원(전체 복구 모델)
파일 복원(단순 복구 모델)
페이지 복원(SQL Server)
증분 복원(SQL Server)
ALTER DATABASE(Transact-SQL)
RESTORE(Transact-SQL)