지연된 트랜잭션(SQL Server)Deferred Transactions (SQL Server)

SQL ServerSQL Server Enterprise에서는 손상된 트랜잭션이 롤백(실행 취소)에 필요한 데이터가 데이터베이스 시작 시 오프라인 상태인 경우에 지연될 수 있습니다.In SQL ServerSQL Server Enterprise, a corrupted transaction can become deferred if data required by rollback (undo) is offline during database startup. 지연된 트랜잭션 은 롤포워드 단계가 완료될 때 커밋되지 않으며, 오류로 인해 롤백할 수 없는 트랜잭션입니다.A deferred transaction is a transaction that is uncommitted when the roll forward phase finishes and that has encountered an error that prevents it from being rolled back. 트랜잭션을 롤백할 수 없으므로 해당 트랜잭션은 지연됩니다.Because the transaction cannot be rolled back, it is deferred.

참고

손상된 트랜잭션은 SQL ServerSQL Server Enterprise에서만 지연됩니다.Corrupted transactions are deferred only in SQL ServerSQL Server Enterprise. SQL ServerSQL Server의 다른 버전에서 트랜잭션이 손상되면 시작이 실패합니다.In other editions of SQL ServerSQL Server, a corrupted transaction causes startup to fail.

일반적으로 데이터베이스가 롤포워드되는 동안 I/O 오류로 인해 트랜잭션에 필요한 페이지를 읽을 수 없으므로 지연된 트랜잭션이 발생합니다.Generally, a deferred transaction occurs because, while the database was being rolled forward, an I/O error prevented reading a page that was required by the transaction. 그러나 파일 수준에서의 오류로 인해 지연된 트랜잭션이 발생할 수도 있습니다.However, an error at the file level can also cause deferred transactions. 또한 트랜잭션 롤백이 필요한 시점에 부분 복원 시퀀스가 중지되고 오프라인 상태인 데이터가 트랜잭션에 필요하면 지연된 트랜잭션이 발생할 수 있습니다.A deferred transaction can also occur when a partial restore sequence stops at a point at which transaction rollback is necessary and a transaction requires data that is offline.

롤백 중에 I/O 오류가 발생한 사용자 트랜잭션으로 인해 전체 데이터베이스가 오프라인 상태가 될 수 있습니다.User transactions that are rolling back and hit an I/O error cause the whole database to go offline. 데이터베이스를 다시 온라인 상태로 만들면 다시 실행이 이전 잠금을 모두 다시 획득하며 커밋되지 않은 모든 트랜잭션을 롤백하려고 시도합니다.When the database is brought back online, the redo reacquires all the locks it had and tries to roll back all the uncommitted transactions. 트랜잭션에 의해 수정된 모든 데이터는 해당 트랜잭션이 롤백될 때까지 적절하게 잠긴 상태로 유지됩니다.All data modified by a transaction remains appropriately locked until the transaction can roll back. 롤백할 수 없는 트랜잭션은 손상이 복구되고 데이터베이스가 다시 시작되거나, 온라인 복원 후에 데이터베이스가 온라인 상태일 동안 지연된 트랜잭션이 해결될 때 잠금을 해제합니다.Transactions that cannot be rolled back will give up their locks when the corruption is fixed and the database restarted or, after an online restore, when the deferred transactions are resolved while the database remains online. 그 전까지는 지연된 트랜잭션이 데이터베이스에서의 특정 작업 전체를 수행하지 못하게 하는 잠금을 유지할 수 있습니다.Until that point, a deferred transaction can hold locks that prevent certain operations on the database as a whole. 예를 들어 지연된 트랜잭션에 CREATE TABLE 명령이 있으면 지연된 트랜잭션이 해결될 때까지 어떤 사용자도 테이블을 만들 수 없습니다.For example, if a deferred transaction contains a CREATE TABLE instruction, no user can create a table until the deferred transaction has been resolved.

또한 증분 복원은 아직 복원되지 않고 현재 오프라인 상태인 파일 그룹에 영향을 주는 활성 트랜잭션이 하나 이상 있는 지점으로 데이터베이스를 복구하므로 지연된 트랜잭션이 발생할 수 있습니다.Deferred transaction can also occur because a piecemeal restore recovers a database to a point at which one or more active transactions are affecting a filegroup that has not yet been restored and is offline. 트랜잭션을 롤백할 수 없으므로 해당 트랜잭션은 지연됩니다.Because the transactions cannot be rolled back, they become deferred.

다음 표에서는 I/O 문제가 발생하는 경우 데이터베이스에서 복구를 수행하도록 하는 동작과 결과를 보여 줍니다.The following table lists the actions that cause a database to perform recovery and the outcome if an I/O problem occurs.

작업Action 해결 방법(I/O 문제가 발생하거나 필요한 데이터가 오프라인 상태일 경우)Resolution (if I/O problems occur or required data is offline)
서버 시작Server start 지연된 트랜잭션Deferred transaction
복원Restore 지연된 트랜잭션Deferred transaction
연결Attach 연결 실패Attach fails
자동 재시작Autorestart 지연된 트랜잭션Deferred transaction
데이터베이스 또는 데이터베이스 스냅숏 만들기Create database or database snapshot 만들기 실패Creation fails
데이터베이스 미러링의 다시 실행Redo on database mirroring 지연된 트랜잭션Deferred transaction
파일 그룹이 오프라인 상태Filegroup is offline 지연된 트랜잭션Deferred transaction

지연된 상태 밖으로 트랜잭션 이동Moving a Transaction Out of the DEFERRED State

중요

지연된 트랜잭션은 트랜잭션 로그를 활성 상태로 유지합니다.Deferred transactions keep the transaction log active. 지연된 트랜잭션을 포함하는 가상 로그 파일은 이러한 트랜잭션이 지연된 상태에서 벗어날 때까지는 잘릴 수 없습니다.A virtual log file that contains any deferred transactions cannot be truncated until those transactions are moved out of the deferred state. 로그 잘림에 대한 자세한 내용은 트랜잭션 로그(SQL Server)를 참조하세요.For more information about log truncation, see The Transaction Log (SQL Server).

트랜잭션을 지연된 상태에서 벗어나게 하려면 데이터베이스가 I/O 오류 없이 깨끗하게 시작해야 합니다.To move the transaction out of the deferred state, the database must start cleanly without any I/O errors. 지연된 트랜잭션이 있으면 I/O 오류의 출처를 수정해야 합니다.If deferred transactions exist, you must fix the source of the I/O errors. 사용 가능한 해결 방법은 다음과 같으며 일반적으로 시도되는 순서대로 나열되어 있습니다.The available solutions, listed in the order in which they are typically tried, are as follows:

  • 데이터베이스를 다시 시작합니다.Restart the database. 문제가 일시적인 경우에는 지연된 트랜잭션 없이 데이터베이스를 시작해야 합니다.If the problem was transient, the database should start without deferred transactions.

  • 파일 그룹이 오프라인 상태이기 때문에 트랜잭션이 지연된 경우에는 해당 파일 그룹을 온라인 상태로 되돌립니다.If the transactions were deferred because a filegroup was offline, bring the filegroup back online.

    오프라인 상태의 파일 그룹을 다시 온라인 상태로 만들려면 다음 Transact-SQLTransact-SQL 문을 사용합니다.To bring an offline filegroup back online, use the following Transact-SQLTransact-SQL statement:

    RESTORE DATABASE database_name FILEGROUP=<filegroup_name>  
    
  • 데이터베이스를 복원합니다.Restore the database. 온라인 복원 후에 지연된 트랜잭션이 모두 해결됩니다.After an online restore, any deferred transactions are resolved.

    전체 또는 대량 로그 복구 모델에서 몇 개의 손상된 페이지로 인해 지연된 트랜잭션이 발생한 경우 온라인 페이지 복원을 통해 오류를 해결할 수 있습니다(지원되는 경우).Under the full or bulk-logged recovery model, if the deferred transactions were caused by only a few corrupted pages, an online page restore might resolve the errors (where supported).

  • 지연된 트랜잭션을 발생하는 오프라인 상태인 파일 그룹이 더 이상 필요하지 않을 경우 오프라인 파일 그룹이 존재하지 않도록 합니다.If you are no longer require a filegroup whose offline status is causing deferred transactions, make the offline filegroup defunct. 파일 그룹이 오프라인 상태이므로 지연된 트랜잭션은 이 파일 그룹이 존재하지 않게 된 후에 지연된 상태에서 벗어납니다.Transactions that were deferred because the filegroup was offline are moved out of the deferred state after the filegroup becomes defunct.

    중요

    존재하지 않는 파일 그룹은 복구할 수 없습니다.A defunct filegroup can never be recovered.

    자세한 내용은 존재하지 않는 파일 그룹 제거(SQL Server)를 참조하세요.For more information, see Remove Defunct Filegroups (SQL Server).

  • 잘못된 페이지 때문에 트랜잭션이 지연된 경우 및 올바른 데이터베이스 백업이 없는 경우 다음 프로세스에 따라 데이터베이스를 복구합니다.If transactions were deferred because of a bad page and if a good backup of the database does not exist, use the following process to repair the database:

    • 우선 다음 Transact-SQLTransact-SQL 문을 실행하여 데이터베이스를 응급 모드로 설정합니다.First put the database into emergency mode by executing the following Transact-SQLTransact-SQL statement:

      ALTER DATABASE <database_name> SET EMERGENCY  
      

      응급 모드에 대한 자세한 내용은 Database States를 참조하십시오.For information about emergency mode, see Database States.

    • 그런 후에 DBCC 문인 DBCC CHECKDB, DBCC CHECKALLOC또는 DBCC CHECKTABLE중 하나에 DBCC REPAIR_ALLOW_DATA_LOSS 옵션을 사용하여 데이터베이스를 복구합니다.Then, repair the database by using the DBCC REPAIR_ALLOW_DATA_LOSS option in one of the following DBCC statements: DBCC CHECKDB, DBCC CHECKALLOC, or DBCC CHECKTABLE.

      DBCC에서 잘못된 페이지가 발생하면 DBCC에서 할당을 취소하고 관련 오류를 모두 복구합니다.When DBCC encounters the bad page, DBCC deallocates it and repairs any related errors. 이 방법을 사용하면 물리적으로 일관된 상태로 데이터베이스를 다시 온라인 상태로 만들 수 있습니다.This approach enables the database to be brought back online in a physically consistent state. 그러나 추가 데이터가 손실될 수도 있으므로 이 방법은 마지막으로 선택해야 합니다.However, additional data might also be lost; therefore, this approach should be used as a last resort.

참고 항목See Also

복원 및 복구 개요(SQL Server) Restore and Recovery Overview (SQL Server)
존재하지 않는 파일 그룹 제거(SQL Server) Remove Defunct Filegroups (SQL Server)
파일 복원(전체 복구 모델) File Restores (Full Recovery Model)
파일 복원(단순 복구 모델) File Restores (Simple Recovery Model)
페이지 복원(SQL Server) Restore Pages (SQL Server)
증분 복원(SQL Server) Piecemeal Restores (SQL Server)
ALTER DATABASE(Transact-SQL) ALTER DATABASE (Transact-SQL)
RESTORE(Transact-SQL) RESTORE (Transact-SQL)