다음을 통해 공유


MSSQLSERVER_3414

적용 대상: SQL Server

세부 정보

attribute
제품 이름 SQL Server
이벤트 ID 3414
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 REC_GIVEUP
메시지 텍스트 복구하는 동안 오류가 발생하여 데이터베이스 '%.*ls'(데이터베이스 ID %d)을(를) 다시 시작하지 못했습니다. 복구 오류를 진단하고 수정하거나 알려진 정상 백업에서 복원합니다. 오류가 수정되지 않았거나 예상되는 경우 기술 지원에 문의하세요.

설명

복구하는 동안 오류가 발생하여 지정된 데이터베이스가 복구되었지만 시작하지 못했습니다. 이 오류로 인해 데이터베이스가 SUSPECT 상태로 설정되었습니다. 주 파일 그룹 및 다른 파일 그룹은 의심스며 손상될 수 있습니다. SQL Server를 시작하는 동안 데이터베이스를 복구할 수 없으므로 사용할 수 없습니다. 문제를 해결하려면 사용자 작업이 필요합니다. SQL Server Management Studio(데이터베이스 아이콘 옆)와 sys.databases.state_desc 열에서 모두 SUSPECT 상태가 표시됩니다. 이 상태에서 데이터베이스를 사용하려고 하면 다음 오류가 발생합니다.

Msg 926, Level 14, State 1, Line 1 
Database 'mydb' cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server errorlog for more information

tempdb에서 이 오류가 발생하면 SQL Server 인스턴스가 종료됩니다.

원인

이 오류는 서버 인스턴스를 시작하거나 데이터베이스를 복구하려고 하는 동안 시스템에 있는 일시적인 조건으로 인해 발생할 수 있습니다. 또한 데이터베이스를 시작할 때마다 발생하는 영구적인 오류로 인해 발생할 수도 있습니다. 복구 실패의 원인은 일반적으로 ERRORLOG 또는 이벤트 로그의 오류 3414 앞에 오는 오류에서 찾을 수 있습니다. 로그 파일의 이전 오류에는 동일한 spid n> 값이<포함됩니다. 예를 들어 다음 복구 실패의 원인은 로그 블록을 읽으려고 할 때 발생하는 체크섬 오류입니다. 참고 spid15s 는 모든 줄에 있습니다.

2020-03-31 17:33:13.00 spid15s     Error: 824, Severity: 24, State: 4.  
2020-03-31 17:33:13.00 spid15s     SQL Server detected a logical consistency-based I/O error: (bad checksum). It occurred during a read of page (0:-1) in database ID 13 at offset 0x0000000000b800 in file 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\mydb_log.LDF'.  Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.   
2020-03-31 17:33:13.16 spid15s     Error: 3414, Severity: 21, State: 1.  
2020-03-31 17:33:13.16 spid15s     An error occurred during recovery, preventing the database 'mydb' (database ID 13) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support

데이터베이스 복구가 실패할 수 있는 다양한 오류가 있습니다. 사례별로 각 오류를 평가해야 하지만 데이터베이스 복구 실패에 대한 해결 방법은 일반적으로 아래 사용자 작업 섹션에 설명된 것과 동일합니다.

사용자 작업

3414 오류가 발생한 원인에 대한 내용을 보려면 Windows 이벤트 로그 또는 ERRORLOG에서 해당 실패를 나타내는 이전 오류를 살펴보세요. 적절한 사용자 작업은 Windows 이벤트 로그의 정보가 SQL Server 오류가 일시적인 상태 또는 영구 오류로 인해 발생했음을 나타내는지 여부에 따라 달라집니다. 오류 메시지에는 "복구 오류를 진단하고 수정하거나 알려진 정상 백업에서 복원"이라는 메시지가 표시됩니다. 따라서 복구를 완료할 수 있도록 발생하는 오류를 수정할 수 있습니다(수정 가능한 오류 및 지연된 트랜잭션 참조).

오류를 수정할 수 없는 경우 이 문제를 해결하는 첫 번째 옵션이자 가장 좋은 옵션은 좋은 백업에서 복원하는 것입니다. 하지만 백업에서 복구할 수 없는 경우 전체 데이터 복구를 보장하지 않는 두 가지 추가 옵션이 있습니다. 첫 번째는 DBCC CHECKDB를 사용한 응급 복구를 사용하는 것이고, 두 번째는 최대한 많은 데이터를 다른 데이터베이스에 복사해 보는 것입니다.

  1. 마지막으로 알려진 양호한 데이터베이스 백업에서 복원합니다.
  2. DBCC CHECKDB에서 제공하는 긴급 복구 방법 사용
  3. 가능한 한 많은 데이터를 다른 데이터베이스에 복사하려고 시도합니다.

양호한 데이터베이스 백업을 복원하는 첫 번째 방법은 데이터베이스를 알려진 일관된 상태로 전환하는 가장 좋은 선택입니다.

백업을 사용할 수 없는 경우 두 번째로 좋은 선택은 데이터베이스를 액세스 가능한 온라인 상태로 전환하는 것입니다. 그러나 복구가 실패했기 때문에 트랜잭션 일관성을 보장할 수 없다는 것을 깨달아야 합니다. 롤백 또는 롤포워드되어야 했지만 복구 실패로 인해 허용되지 않은 트랜잭션을 알 수 있는 방법은 없습니다. 긴급 복구를 진행하는 단계는 DBCC CHECKDB 설명서의 긴급 모드에서 데이터베이스 오류 해결 섹션에 설명되어 있습니다.

응급 복구가 작동하지 않고 일부 데이터를 다른 데이터베이스로 회수하려는 경우 데이터베이스에 액세스하는 방법은 ALTER DATABASE <dbname> SET EMERGENCY 명령을 통해 데이터베이스를 긴급 모드로 설정하는 것입니다. 그런 다음 테이블에서 데이터를 복사하려고 시도할 수 있습니다.

수정 가능한 오류 및 지연된 트랜잭션

데이터베이스 복구 중에 발생하는 모든 오류로 인해 복구 실패 및 주의 대상 데이터베이스가 발생하는 것은 아닙니다.

데이터베이스 및/또는 트랜잭션 로그 파일을 처음으로 열 때 발생하는 오류는 복구 전에 발생합니다. 이러한 오류의 예는 1720417207입니다. 이러한 오류가 수정되면 복구를 계속 진행할 수 있지만 다른 복구 오류가 발생할 경우 완료되도록 보장되지 않습니다. 17204 및 17207과 같은 오류로 인해 SUSPECT 데이터베이스가 발생하지는 않습니다. 실제로 이러한 문제가 발생하면 데이터베이스 상태가 RECOVERY_PENDING.

SQL Server를 사용하면 페이지 수준 오류가 발생하더라도 복구를 완료할 수 있으며 트랜잭션 일관성은 계속 유지됩니다. 이 프로세스는 SUSPECT 데이터베이스의 결과로 발생하는 시나리오 수를 줄여 줍니다. 이 개념을 지연된 트랜잭션이라고 합니다.

복구 중에 발생한 오류가 데이터베이스 페이지에 문제가 있음을 나타내는 경우(예: 체크섬 오류 또는 Msg 824) 오류가 보류 중인 상태에서 복구를 완료할 수 있습니다. 트랜잭션이 커밋되지 않은 경우 페이지의 오류로 인해 지연된 트랜잭션이 발생하여 복구를 완료할 수 있습니다.

다음 ERRORLOG 항목은 복구 중에 824 메시지 오류가 발생했지만 지연된 트랜잭션으로 복구를 완료할 수 있었던 경우를 보여 줍니다. 이 상황에서 오류 3414가 없으며 데이터베이스에 대한 복구가 완료되었다는 메시지를 확인합니다.

2010-03-31 19:17:18.45 spid7s      SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xb2c87a0a; actual: 0xb6c0a5e2). It occurred during a read of page (1:153) in database ID 13 at offset 0x00000000132000 in file 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\mydb.mdf'.  Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.   
2010-03-31 19:17:18.45 spid7s      Error: 3314, Severity: 21, State: 1.   
2010-03-31 19:17:18.45 spid7s      During undoing of a logged operation in database 'mydb', an error occurred at log record ID (25:100:19). Typically, the specific failure is logged previously as an error in the Windows Event Log service. Restore the database or file from a backup, or repair the database.
2010-03-31 19:17:18.45 spid7s      Errors occurred during recovery while rolling back a transaction. The transaction was deferred. Restore the bad page or file, and re-run recovery.   
2010-03-31 19:17:18.45 spid7s      Recovery completed for database mydb (database ID 13) in 2 second(s) (analysis 204 ms, redo 25 ms, undo 1832 ms.) This is an informational message only. No user action is required.   

커밋된 트랜잭션을 롤 포워드할 경우 페이지에 액세스할 수 없음으로 표시될 수 있으며(이후 Msg 829에서 페이지 결과에 액세스하려는 모든 시도) 복구가 완료될 수 있습니다. 이 경우 백업에서 페이지를 복원하거나 복구와 함께 DBCC CHECKDB를 사용하여 페이지를 할당 취소하여 오류를 수정해야 합니다.

참고 항목

ALTER DATABASE(Transact-SQL)
DBCC CHECKDB(Transact-SQL)
전체 데이터베이스 복원(단순 복구 모델)
지연된 트랜잭션
MSSQLSERVER_824
sys.databases(Transact-SQL)