SQL 데이터베이스가 복구 모드에 갇혔을 때 해결하는 방법

SQL Server 데이터베이스는 때로 “복구 중” 모드로 들어갈 수 있는데, 이는 종종 데이터베이스 관리자를 깜짝 놀라게 합니다. 이 상태는 재시작, 데이터베이스 복원 또는 예기치 않은 종료 중에 발생하며, SQL Server가 데이터 무결성을 유지하기 위해 미완료 트랜잭션을 다시 실행하거나 취소하는 과정입니다. 이 프로세스는 일반적으로 자동적으로 진행되지만 때로는 예상보다 더 오랜 시간이 걸릴 수도 있고 — 또는 멈춘 것처럼 보일 수도 있어서 관리자들이 어떻게 진행해야 할지 알 수 없게 됩니다.

만약 이 문제를 경험했다면 걱정하지 마세요. 이 기사는 무슨 일이 벌어지고 있는지 이해하고 어떻게 대응해야 하는지 알려줄 것입니다. 다음에서 배울 내용을 간략히 살펴보겠습니다:

  • “복구 중” 모드의 의미 — 데이터베이스가 이 상태로 들어가는 이유 및 SQL Server가 백그라운드에서 무엇을 하는지 알아봅니다.
  • 복구의 3 단계 — SQL Server가 복구 중에 따르는 분석, 재실행 및 취소 단계를 명확히 설명합니다.
  • 지연의 일반적인 원인 — 대규모 트랜잭션 로그부터 과도한 가상 로그 파일(VLF)까지, 프로세스를 늦추고 있는 것들을 확인합니다.
  • 온라인으로 복귀하는 방법 — 데이터베이스를 일관된 상태로 복원하기 위한 실용적인 단계를 배우며, 기다리는 방법부터 SQL 복구 도구 사용까지 알아봅니다.
  • 고급 도움을 찾아야 하는 시점 — 복구 프로세스가 멈춰있는 것처럼 보이고 진전이 없을 때 어떻게 해야 하는지 알아봅니다.

이 가이드를 마치면 SQL Server의 복구 프로세스와 데이터베이스를 최대한 빨리 다시 온라인으로 만드는 데 사용할 수 있는 도구에 대한 튼튼한 이해가 생길 것입니다.

SQL Server의 “복구 중” 모드 이해

SQL Server가 재시작되거나 데이터베이스가 백업에서 복원될 때, 데이터 무결성을 유지하기 위해 ‘복구 중’ 모드로 들어갑니다. 이 단계에서 SQL Server는 데이터 손상을 방지하고 트랜잭션 일관성을 보장하기 위해 불완전한 트랜잭션을 재생하거나 취소합니다.

SQL Server를 재시작한 후, 데이터베이스는 “복구 중” 모드로 이동합니다. 또한 SQL Server 데이터베이스가 시작 시 또는 백업에서 복원할 때 복구 상태에 있는 것을 볼 수 있습니다.

그림 1 – SQL 데이터베이스 “복구 중” 모드

데이터베이스 “복구 중” 상태는 데이터베이스가 복구 프로세스를 수행하고 있으며, 프로세스가 완료되면 자동으로 온라인 상태가 된다는 것을 의미합니다. 그러나 복구가 느리게 진행되거나 데이터베이스가 복구 상태에 갇혀 있는 것을 경험할 수 있습니다. SQL 데이터베이스는 세 가지 복구 단계를 거치므로 데이터베이스 파일의 크기에 따라 시간이 걸릴 수 있습니다.

SQL 데이터베이스 복구의 3단계

일반적으로 데이터베이스가 SQL Server 재시작 시 제대로 종료되지 않으면 충돌 복구를 거쳐 DB가 일관성을 유지합니다. SQL DB가 거쳐야 하는 복구 단계는 세 가지입니다:

1단계: 분석

이 단계는 “마지막 체크포인트부터 트랜잭션 로그 끝까지” 시작합니다. 이 단계에서는 ‘더티 페이지 테이블’ (DPT)을 생성하여 충돌 시점의 모든 더티 페이지를 결정하는 데 도움이 되며, SQL Server가 중지된 시점에 미확정 트랜잭션을 식별하는 ‘활성 트랜잭션 테이블’ (ATT)을 생성합니다.

단계 2: 다시 수행

이 단계에서 SQL Server는 체크포인트 이후 충돌 전에 발생한 모든 변경 사항을 다시 수행합니다. 본질적으로 다시 수행 단계에서는 커밋된 모든 트랜잭션을 (.mdf/.ldf)를 통해 아직 기록되지 않은 SQL 데이터 파일로 앞으로 이동해야 합니다. 체크포인트.

단계 3: 취소

데이터베이스 복구 시점에 미확정 트랜잭션이 있었다면, DB를 일관된 상태로 가져오기 위해 취소 단계에서 롤백해야 합니다.

데이터베이스가 복구 모드에 갇혔을 때 어떻게 해야 하나요?

SQL Server 오류 로그를 확인하여 데이터베이스에서 처음으로 보이는 메시지를 확인하십시오. 이 메시지는 다음과 유사할 수 있습니다:

데이터베이스 'DatabaseName' 시작

이는 DB 파일이 열렸고 복구 프로세스가 시작되었음을 의미합니다. 잠시 후에 SQL Server가 3단계의 복구를 진행 중임을 볼 수 있습니다. 데이터베이스를 백업하고 복원하는 방법에 대한 안내가 필요하다면 이 Azure SQL 데이터베이스 백업 및 복원 가이드를 확인하십시오.

데이터베이스 복구의 단계 1은 아래에 표시되어 있습니다:

Plain Text

 

페이즈 1 완료 후, SQL Server는 회복의 페이즈 2와 3를 거칠 것입니다:

Plain Text

 

페이즈 2와 3이 완료되면 다음과 같은 메시지가 표시됩니다:

Plain Text

 

오류 로그에서 ‘사용자 조치가 필요하지 않음’ 메시지에 주의하십시오. 이는 데이터베이스가 복구 상태임을 나타냅니다. 그러나 복구가 예상보다 오래 걸릴 수 있으며, 데이터베이스는 복구 모드에 갇힐 수 있습니다.

“복구 중” 상태에 갇힌 SQL 데이터베이스의 원인

다음은 SQL 데이터베이스가 복구 모드에 갇힐 수 있는 이유입니다:

  • 긴 실행 트랜잭션이 롤백 중입니다
  • 트랜잭션 로그 파일 크기가 매우 큽니다
  • DB 트랜잭션 로그 내에 너무 많은 가상 로그 파일(VLF)이 있습니다
  • 이전에 SQL Server에 버그가 있었으나 지금은 수정되었습니다.

데이터베이스를 일관된 상태로 되돌리려면 무엇을 할 수 있을까요?

해결책 1: 데이터베이스 복구가 완료될 때까지 기다립니다

데이터베이스를 온라인 상태로 되돌리는 가장 명백한 해결책은 인내심을 가지고 복구 프로세스가 완료될 때까지 기다리는 것입니다. 이 작업은 몇 시간이나 소요될 수 있습니다. SQL Server 2008 또는 2008 R2에서 너무 오랜 시간이 걸릴 경우, Microsoft 수정을 적용할 수 있습니다.

참고: DB를 일관된 상태로 온라인으로 가져오기 위해 RESTORE 명령을 실행하지 마십시오. SQL Server가 이미 동일한 작업을 수행하려고 하고 있기 때문입니다. ‘RESTORE with..Recovery’를 실행하는 것은 DB가 동일한 단계를 다시 거치도록 하는 것을 의미합니다.

우회 방법 2: 전문 SQL 데이터베이스 복구 도구 사용

복구가 완료되었지만 데이터베이스를 일관된 상태로 가져오는 데 실패하는 경우, 전문 SQL 복구 도구를 사용하면 DB를 원래 상태로 복원하는 데 도움이 될 수 있습니다.

  • Stellar Repair for MS SQL — 손상 또는 실패 후 SQL 데이터베이스를 원래 상태로 복원하는 데 도움이 되는 전문 도구입니다.
  • ApexSQL Recover — 삭제되거나 잘린 또는 손상된 SQL Server 데이터베이스 데이터를 복구하는 데 도움이 되는 도구입니다.
  • dbForge SQL Complete — 주로 IDE 확장이지만 유용한 오류 처리 및 문제 해결 기능을 제공합니다.
  • Redgate SQL Data Recovery — Redgate는 데이터 복구 기능을 포함한 다양한 SQL Server 도구를 제공합니다.
  • SysTools SQL Recovery Tool — 손상된 SQL 데이터베이스 파일(.MDF 및 .NDF)을 복구하고 사용 가능한 상태로 되돌리는 것으로 알려져 있습니다.
  • Kernel for SQL Database Recovery — 이 도구는 손상 및 예기치 않은 종료로부터 SQL Server 데이터베이스를 복구하고 복원할 수 있습니다.
  • Aryson SQL Database Recovery — SQL Server에서 MDF와 NDF 파일을 복구하고 복원할 수 있는 또 다른 도구입니다.

결론

이 기사에서는 SQL 데이터베이스가 ‘복구 중’ 모드에 갇혀 있을 때의 의미, 복구의 세 가지 중요한 단계(분석, 재실행 및 실행 취소)와 데이터베이스를 온라인으로 복귀시키기 위해 할 수 있는 일에 대해 다루었습니다. 또한 대용량 트랜잭션 로그에서 너무 많은 가상 로그 파일(VLF)까지 가능한 원인에 대해서도 논의했습니다.

SQL 데이터베이스가 여전히 복구 모드에 갇혀 있다면 인내가 중요하다는 점을 기억하세요. RESTORE 명령을 실행하지 마세요. 이는 복구 프로세스를 재시작하게 됩니다. 수동 개입이 실패한 심각한 문제의 경우, 전문 SQL 데이터베이스 복구 도구를 사용하여 데이터를 복구하는 것을 고려하세요.

이 가이드가 유용했다면 팀과 공유하거나 SQL 복구 경험에 대한 댓글을 남겨주세요.

Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode