적용 대상:Azure SQL 데이터베이스
Microsoft는 Azure SQL Database에서 데이터 무결성 관리를 담당합니다. 전통적인 DBA가 SQL Server에서 데이터 무결성을 모니터링하고 데이터베이스 손상을 복구하는 기법이 존재하지만, Microsoft SQL 엔지니어링 팀은 일부 손상 유형을 자동으로 데이터 손실 없이 처리하는 새로운 기법을 개발했습니다. 서비스는 이러한 기법을 사용하여 데이터 손실과 다운타임을 피할 수 있는 경우를 대비합니다.
이 글에서는 이러한 기법들 중 일부, 작동 방식, 그리고 Azure SQL Database에서 데이터를 보호하기 위해 어떤 조치를 취해야 하는지에 대해 고객들에게 미치는 영향을 설명합니다.
Microsoft가 데이터 무결성을 관리하는 방법
Azure SQL Database에서 데이터 무결성을 보호하는 것은 여러 기법과 진화하는 방법들의 조합을 포함합니다:
광범위한 데이터 무결성 오류 경고 모니터링. SQL 데이터베이스 엔진은 데이터 무결성 문제를 나타내는 모든 오류 및 처리되지 않은 예외에 대해 경고를 발송합니다. 엔지니어링 팀은 이러한 경고를 처리하고 조사합니다.
I/O 시스템의 "쓰기 손실" 감지. 데이터베이스 엔진은 관찰된 물리적 손상 문제의 가장 흔한 원인인 I/O 시스템의 "쓰기 손실"을 감지하는 추가 기능을 갖추고 있습니다. 이 기능은 페이지 쓰기와 관련된 LSN(로그 시퀀스 번호)을 추적합니다. 디스크에서 데이터 페이지를 다시 읽을 때, 그 페이지의 예상 LSN과 비교됩니다. 디스크에 있는 것과 예상되는 LSN 사이에 불균형이 있으면 페이지가 낡아져 엔지니어링 팀에 즉시 알림이 들어갑니다.
자동 페이지 수리. 일부 서비스 계층은 비즈니스 연속성을 위해 데이터베이스 복제본을 제공합니다. 이 서비스는 가용성 그룹에서 사용하는 기술과 유사한 자동 페이지 복구를 활용합니다. 데이터 무결성 문제로 인해 복제본이 페이지를 읽지 못할 경우, 서비스는 다른 복제본에서 새로 복사본을 가져와, 데이터 손실이나 고객 다운타임 없이 읽을 수 없는 페이지를 대체합니다.
저장 시 및 전송 중 데이터 무결성 서비스 내 모든 데이터베이스는 전체 페이지에 대한 체크섬을 계산하고 읽기 시 검증을 위해 페이지 헤더에 저장하는 설정을 사용하여
CHECKSUM페이지를 검증하도록 구성되어 있습니다. 전송 계층 보안(TLS)은 TCP/IP가 제공하는 기본 전송 수준 체크섬 외에 모든 통신에도 사용됩니다.백업 및 복원 무결성 검사. Azure SQL Database는 서비스 관리 백업 중과 각 복원 작업 중 모두 페이지 검증을 수행합니다. 문제가 발견되면 즉시 엔지니어링 팀에 경고가 내려집니다.
Microsoft가 데이터 무결성 사고를 처리하는 방법
Microsoft는 잘못된 결과나 손상 사건을 가장 심각하게 다룹니다. 회사는 모든 Azure 엔지니어링 팀에서 24× 7시간 지원을 제공합니다. 무결성 사고를 처리할 때는 사용 불가능 현상을 최소화하고 데이터 손실의 양을 최소화하는 것이 목표입니다.
시스템 데이터 무결성 문제
Microsoft는 고객 데이터나 데이터베이스 가용성에 영향을 주지 않는 문제를 고객에게 알리지 않고 수정합니다. 예로는 자동 페이지 복구가 해결할 수 있는 문제, 고객 데이터나 쿼리 결과에 영향을 주지 않는 내부 데이터베이스 메타데이터 또는 텔레메트리의 손상 등이 있습니다.
고객 데이터 무결성 문제
Microsoft가 잘못된 결과나 고객 데이터 Microsoft손상 문제를 감지하면 다음과 같은 조치를 취합니다:
- 개인정보 보호법을 준수하여 확인된 탐지 직후 가능한 한 빨리 고객에게 연락하려고 최선을 다합니다.
- 연락이 이루어지면 고객과 직접 협력하여 부패 범위를 설명하고 복구 옵션을 제시하며, 고객이 자신의 애플리케이션과 상황에 가장 적합한 옵션을 선택할 수 있도록 합니다.
- 가능하다면 고객이 애플리케이션에 미치는 영향 범위를 이해하도록 돕습니다. 예를 들어, 데이터 손상으로 인해 다른 데이터가 예상치 못한 방식으로 변경되었는지 식별할 수 있습니다.
Microsoft는 고객과 협력하여 다양한 방법과 조치를 사용하여 데이터 손상을 복구합니다. 고객 승인 없이 데이터 손실이 발생할 수 있는 복구를 시도하지 않습니다. 고객은 Azure SQL Database에서 DBCC CHECKDB 복구 옵션을 수행할 수 없습니다. 데이터베이스를 SINGLE_USER 모드로 설정할 수 없기 때문입니다. 하지만 Microsoft SQL 팀은 다음과 같은 복구 조치를 취할 수 있으나 이에 국한되지 않습니다:
- 인덱스 다시 작성 예를 들어, 기본 테이블이 손상되지 않은 비클러스터 인덱스를 다시 구축하는 식입니다.
- 복구 과정에서 데이터 손실 가능성이 없는 곳으로
DBCC CHECKDB진행하세요REPAIR_REBUILD. - 수리로 인해 일부 데이터가 손실될 수 있는 경우
DBCC CHECKDB와 함께REPAIR_ALLOW_DATA_LOSS을 실행하세요. - 데이터 무결성 문제를 복구할 수 없는 상황
DBCC CHECKDB에서는, 엔지니어가 데이터 무결성 문제가 발생하기 전 시점까지 시점 복원을 사용한 뒤, 거래 로그에서 관련 트랜잭션을 수동으로 재생하는 방식을 사용할 수 있습니다. 이 기법이 적용되는 예로는 거래 기록이 손상되어 모든 거래의 자동 재생을 막지만 고객 데이터가 손상되지 않는 경우입니다.
엔지니어링 팀은 잘못된 결과나 데이터 손상으로 이어지는 문제에 대해 상세한 사후 분석을 수행합니다. 팀은 문제로 인해 발생한 수리 항목들을 면밀히 추적합니다. 이러한 사후 검토를 통해 앞서 설명한 "쓰기 유실" 기능을 비롯해 많은 중요한 개선이 이루어졌습니다.
고객이 시작한 무결성 검사
Microsoft가 관리하는 데이터 무결성 보호는 새로운 데이터 무결성 문제를 조기에 감지하고 가능한 경우 복구합니다. 고객이 주도하는 무결성 검사 DBCC CHECKDB 는 전체 데이터베이스에 대한 포괄적인 손상 탐지 메커니즘으로서 DBCC CHECKDB 추가적인 보호 계층을 제공합니다.
DBCC CHECKDBMicrosoft가 관리하는 데이터 무결성 보호 기능을 보완합니다.
이러한 폭과 깊이 있는 탐지는 실행 시 DBCC CHECKDB 상당한 시간과 추가 계산 및 입출력 자원을 요구합니다. 그 결과 DBCC CHECKDB 자원 충돌로 인해 작업 부하에 영향을 줄 수 있습니다.
서비스가 제공하는 모니터링과 보호 외에도, 추가적인 데이터 무결성 보호와 추가 자원 소비를 균형 있게 조절해 원하는 빈도와 시간에 실행할 DBCC CHECKDB 수 있습니다.
DBCC CHECKDBAzure SQL Database Hyperscale에서는 제공되지 않습니다. 대안으로, 데이터베이스 내 개별 테이블에 대해 을 DBCC CHECKTABLE ('<TableName>') WITH TABLOCK 사용하세요.
고객 피드백과 진화하는 방법론
Azure SQL 엔지니어링 팀은 서비스의 데이터 무결성 문제 탐지 기능을 정기적으로 검토하고 개선합니다. 데이터 무결성 오류는 드물지만, Azure 지원팀으로부터 알림을 받기 전에 오류가 발생하면 지원 케이스를 제출하세요.
Microsoft의 데이터 무결성 전략에 대해 피드백이 있으시면 엔지니어링 팀이 여러분의 의견을 듣고 싶어 합니다. 이 주제에 대한 피드백이나 의견이 있는 엔지니어링 팀에 연락하려면 다음을 참조하세요 https://aka.ms/sqlfeedback. 여러분의 피드백은 Microsoft가 기존 데이터 무결성 보호 기능을 개선하고 개발하는 데 도움이 됩니다.