Computer >> 컴퓨터 >  >> 프로그램 작성 >> 데이터 베이스

Microsoft SQL Server 고급 손상 및 복구

이 블로그에서는 Microsoft® SQL Server®의 데이터베이스 수준에서 발생할 수 있는 손상, 이를 감지하는 방법, 고급 복원 및 복구 기술을 사용하여 수정하는 방법에 대해 설명합니다.

소개

현재 SQL Server는 고급 내부 구조와 높은 신뢰성으로 인해 가장 널리 사용되는 관계형 데이터베이스 관리 시스템 중 하나입니다. 많은 조직에서 중요한 비즈니스 데이터를 유지 및 저장하기 위해 SQL Server 데이터베이스를 선택했습니다.

기업은 데이터베이스 관리자(DBA)가 데이터베이스 성능, 유지 관리 및 보안을 지속적으로 개선할 것을 기대합니다. 데이터베이스가 손상되어 데이터에 액세스할 수 없는 경우 하드웨어 손상, 디스크 문제, 바이러스 공격 또는 운영 체제(OS) 오류와 같은 다양한 원인을 의심할 수 있습니다. 손상된 데이터베이스를 복구하는 것은 최고의 기술을 알기 전까지는 쉬운 일이 아닙니다.

이 게시물은 데이터베이스 손상의 몇 가지 원인에 대해 설명하고 페이지 손상을 식별하는 데 도움이 되며 DBCC(데이터베이스 일관성 검사기) CHECKDB 명령을 탐색하고 고급 복원 및 복구 기술을 보여줍니다.

데이터베이스 손상

SQL Server는 사용자 데이터를 페이지 형식으로 저장합니다. 해당 페이지는 .MDF에 있습니다. (기본) 데이터 파일. .MDF 손상 파일은 전체 데이터베이스를 손상시킬 수 있습니다. 데이터 파일 페이지는 다음 이미지와 같이 SQL Server의 메모리에서(즉, 디스크에) 쓸 때 양호하지만 메모리로 다시 읽을 때는 좋지 않습니다.

Microsoft SQL Server 고급 손상 및 복구

데이터베이스 손상의 원인:

데이터베이스 손상 유형에는 다음 항목이 포함됩니다.

  • I/O 하위 시스템(데이터베이스 손상의 가장 일반적인 원인 중 하나입니다.)
  • Windows 운영 체제
  • 암호화 또는 바이러스 백신과 같은 파일 시스템 드라이버
  • SAN 또는 RAID 컨트롤러
  • 디스크
  • 기억
  • 파일 헤더
  • SQL 서버 버그
  • 인간의 실수

오류 메시지:

손상된 데이터베이스에 액세스하면 다음 오류 메시지가 표시될 수 있습니다.

  • SQL Server의 메시지 823
  • SQL Server의 메시지 824
  • SQL Server의 메시지 825(읽기 재시도)
  • 오류 9004 SQL Server
  • 메타데이터 손상 오류
  • 페이지 수준 손상 오류

페이지 손상 추적

SQL Server에는 디스크에 페이지 읽기 및 쓰기와 같은 I/0 작업 중에 손상이 있을 때 자동으로 식별하고 경고하는 기본 제공 메커니즘이 있습니다.

다음과 같은 다양한 유형의 페이지 수준 확인 옵션을 SQL Server에서 사용할 수 있으며 디스크의 페이지를 보호하는 데 도움이 됩니다.

  • TORN_PAGE_DETECTION
  • 체크섬

TORN_PAGE_DETECTION일 때 가 지정되면 페이지가 디스크에 기록될 때마다 8KB 데이터 파일 페이지에 대해 16 x 512바이트 디스크 섹터에 대해 비트가 반전됩니다. 페이지가 이후에 메모리로 읽은 후 이러한 값이 비교됩니다. 잘못된 상태, 페이지가 잘못 작성되었을 수 있습니다. 이 경우 시스템은 오류 메시지 824(찢어진 페이지 오류를 나타냄)를 생성합니다.

체크섬일 때 가 지정되면 시스템은 페이지 내용에 대해 체크섬 값을 계산하고 디스크에 페이지를 쓸 때 해당 값을 페이지 헤더에 저장합니다. 나중에 디스크에서 페이지가 로드된 후 체크섬이 다시 계산되어 페이지 헤더에 저장된 값과 비교됩니다. 값이 일치하지 않으면 시스템은 오류 메시지 824(체크섬 실패를 나타냄)를 생성합니다.

두 오류, 823 하드 I/O824 소프트 I/O , 심각도 24 오류이며 msdb.dbo.에 기록됩니다. 의심스러운_페이지안정적입니다.

msdb.dbo. 의심스러운 페이지 가능 단일 페이지 복원 작업에 사용되며 SQL Server 오류 로그 및 Windows® 이벤트 로그에 기록될 수 있습니다.

DBCC CHECKDB

DBCC CHECKDB는 데이터베이스에 있는 모든 개체의 물리적 및 논리적 무결성을 검사합니다.

리소스 집약적인 작업이며 병렬 처리를 사용하지만 플래그 2528을 추적하여 단일 스레드에서 실행할 수 있습니다.

기본 중요 시스템 테이블 검사

기본 검사는 스토리지 엔진 메타데이터를 보유하는 중요한 시스템 테이블과 데이터가 MDF에 저장된 할당 경로에 대한 검사를 수행하도록 설계되었습니다. 파일.

기본 검사는 다음 목록에 나와 있습니다.

  • DBCC CHECKALLOC :데이터베이스의 할당 구조 일관성을 확인합니다. 할당 구조가 유효한지, 두 개의 테이블에 단일 데이터 파일 페이지가 할당되지 않았는지 확인합니다.

  • DBCC 점검표 :테이블과 인덱스의 일관성을 확인합니다. 테이블의 구조와 관련 인덱스의 유효성을 검사합니다. 인덱스 데이터에 테이블에 일치하는 행이 있는지 확인하고 인덱스 순서 키를 검사합니다. 테이블에 사용된 FILESTREAM이 있으면 링크가 있는지 확인합니다.

  • DBCC CHECKCATALOG :시스템 카탈로그 간의 일관성을 확인합니다.

  • DBCC CHECKFILEGROUP :DBCC CHECKDB와 유사하게 이 검사는 파일 그룹에 대한 일관성 검사와 데이터베이스에 대한 할당 검사를 수행합니다.

샘플 코드

[
DBCC CHECKDB
  [ ( database_name | database_id | 0
    [ , NOINDEX
    | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
  ) ]
  [ WITH
    {
        [ ALL_ERRORMSGS ]
        [ , EXTENDED_LOGICAL_CHECKS ]
        [ , NO_INFOMSGS ]
        [ , TABLOCK ]
        [ , ESTIMATEONLY ]
        [ , { PHYSICAL_ONLY | DATA_PURITY } ]
        [ , MAXDOP  = number_of_processors ]
    }
  ]
]

내부 데이터베이스 스냅샷

CHECKDB와 함께 내부 데이터베이스 스냅샷을 사용하여 검사를 수행하고 트랜잭션 일관성을 유지하면 차단 및 동시성 문제를 방지할 수 있습니다. 데이터베이스 스냅샷을 생성할 수 없는 경우 테이블 수준 검사를 수행하는 데 필요하므로 데이터베이스에 대한 단독 잠금이 있고 테이블 잠금을 공유하는지 확인하십시오. . 스냅샷이 생성되지 않으면 마스터에서 CHECKDB가 실패합니다.

다음 목록에는 DBCC CHECKDB에서 수행하는 내부 검사가 포함되어 있습니다.

  • 중요한 시스템 테이블을 확인합니다.
  • 중요한 시스템 테이블 논리적 검사.
  • 기타 테이블 논리적 검사
  • 할당 확인.
  • 메타데이터 확인.
  • 서비스 브로커 유효성 검사.
  • 인덱싱된 보기, 공간 인덱스 확인.

CHECKDB 오류

다음 표는 일부 DBCC CHECKDB 오류를 보여줍니다.

Microsoft SQL Server 고급 손상 및 복구

모범 사례

데이터베이스가 VLDB인 경우 CHECKDB에 대한 런타임 문제가 있는 경우 PHYSICAL_ONLY를 사용해야 합니다. VLDB의 실행 시간을 줄이기 위한 옵션 프로덕션 데이터베이스. 그러나 일반적으로 옵션을 지정하지 않고 DBCC CHECKDB를 실행해야 합니다. CHECKDB 실행 일정은 개별 프로덕션 환경에 따라 다릅니다.

고급 복원 옵션

대부분의 사람들은 손상 문제에 대해 간단한 데이터베이스 복원 기술을 사용하지만 다음과 같은 고급 복원 기술을 사용할 수 있습니다.

페이지 복원

이 기술을 사용하여 하나 이상의 페이지를 복원할 수 있습니다. 페이지 수준 복원은 데이터베이스 엔터프라이즈 버전에 대한 온라인 작업이며 다른 버전에 대해 오프라인 작업을 사용할 수 있습니다. 이는 복원 프로세스 중에 데이터베이스가 오프라인일 수 있음을 의미합니다.

T-SQL 스크립트
RESTORE DATABASE <database_name>
PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
FROM <backup_device> [ ,... n ]
WITH NORECOVERY

페이지 ID를 얻으려면 오류 로그, 이벤트 추적, DBCC 및 msdb..suspectpages와 같은 다양한 소스를 사용하세요. 손상된 페이지 및 해당 ID를 나열하는 테이블 레코드.

참고: 부팅 페이지, 파일 헤더 페이지, 중요한 시스템 테이블의 일부 페이지 및 할당 비트맵을 페이지 복원으로 복원할 수 없습니다.

부분 및 부분 복원

페이지 복원과 유사하게 엔터프라이즈 버전의 경우 온라인으로 부분 및 부분 복원을 수행하고 여러 파일 또는 파일 그룹이 포함된 다른 버전의 경우 오프라인으로 복원할 수 있습니다.

모든 일정 분량 복원은 부분 복원 시퀀스 RESTORE DATABASE로 시작됩니다. PARTIAL로 전체 백업을 복원하는 문 옵션. 이 복원이 완료되면 데이터베이스가 부분적으로 온라인 상태여야 합니다. 이는 복구가 연기되었기 때문에 나머지 파일이 복구 보류 모드에 있음을 의미합니다.

일정 분량 복원은 데이터베이스의 복구 모델과 복구 순서에 따라 다릅니다.

복원 순서

파일 그룹 X 및 Z와 기본 파일 그룹의 부분 복원을 수행하려면 다음 코드를 실행하십시오.

RESTORE DATABASE DB_XYZ FILEGROUP='X',FILEGROUP='Z'
  FROM partial_backup
  WITH PARTIAL, RECOVERY;

이전 점 X에서 다음이 참입니다.

  • 파일 그룹 Z 및 기본 파일 그룹이 온라인 상태입니다.
  • 파일 그룹 Y의 파일이 복구 대기 중입니다.
  • 파일 그룹이 오프라인 상태입니다.

RESTORE DATABASE DB_XYZ FILEGROUP='Y' FROM backup WITH RECOVERY; 실행

이제 모든 파일 그룹이 온라인 상태입니다.

기타 고급 수리 기술

수리는 항상 데이터 복구를 보장합니까? 대답은 "아니오"입니다.

데이터를 손상시킬 수 있는 여러 가지 가능한 조합이 있을 수 있으며 모든 조합을 테스트하는 것은 불가능합니다. 예를 들어 시스템 테이블이 손상되어 부팅과 같은 페이지에서 복구가 작동하지 않습니다. 및 PFS .

다음은 몇 가지 수리 옵션입니다.

REPAIR_REBUILD

이 옵션은 복구를 수행하지만 손상된 NCindex를 재구축할 때 데이터가 손실될 수 있습니다.

REPAIR_ALLOW_DATA_LOSS

이 옵션은 복구를 수행하지만 데이터가 손실될 수 있습니다.

시스템 테이블 인덱스 재구축

클러스터형 시스템 테이블 인덱스는 복구할 수 없지만 일부 상황에서는 DBCC CHECKTABLE 옵션을 확인하여 비클러스터형 인덱스를 복구할 수 있습니다.

참고: 심각한 상황을 피하기 위해 항상 원본 데이터베이스가 아닌 데이터베이스 복사본에서 모든 종류의 고급 복구 기술을 수행하십시오.

비클러스터형 인덱스에서 날짜 재구축:

클러스터형 인덱스 또는 힙이 손상된 경우 비클러스터형(NC) 인덱스에서 데이터를 복구하기 위한 유일한 옵션은 복구입니다. 그러나 경우에 따라 메타데이터가 손상되면 복구가 작동하지 않습니다.

select 문을 사용하여 손상되지 않은 NC 인덱스를 강제로 선택할 수 있지만 이는 NC 인덱스의 열 수준 적용 범위에 따라 달라질 수 있습니다.

DBCC 페이지

DBCC PAGE … WITH TABLERESULTS 사용 키 범위를 식별할 수 있습니다. 클러스터되지 않은 인덱스에서 구성하고 손상된 페이지를 검사하여 페이지에서 데이터를 가져올 수 있습니다.

결론

이 게시물을 읽고 나면 데이터베이스 손상과 간단한 기술과 고급 기술을 모두 사용하여 데이터베이스를 복구하는 방법에 대해 더 잘 이해하게 될 것입니다. 또한 이러한 기술은 손상 후 데이터베이스를 온라인으로 전환하는 데 도움이 됩니다. 손상 중단을 방지하려면 항상 강력한 백업 계획을 세워야 합니다.

피드백 탭을 사용하여 의견을 남기거나 질문하십시오.

전문가 관리, 관리 및 구성으로 환경 최적화

Rackspace의 애플리케이션 서비스(RAS) 전문가는 광범위한 애플리케이션 포트폴리오에서 다음과 같은 전문적이고 관리되는 서비스를 제공합니다.

  • 전자상거래 및 디지털 경험 플랫폼
  • 전사적 자원 관리(ERP)
  • 비즈니스 인텔리전스
  • Salesforce CRM(고객 관계 관리)
  • 데이터베이스
  • 이메일 호스팅 및 생산성

우리는 다음을 제공합니다:

  • 편향 없는 전문성 :즉각적인 가치를 제공하는 기능에 중점을 두고 현대화 여정을 간소화하고 안내합니다.
  • 광신적인 경험 ™:프로세스를 먼저 결합합니다. 기술 두 번째.®전담 기술 지원을 통해 포괄적인 솔루션을 제공하는 접근 방식.
  • 타의 추종을 불허하는 포트폴리오 :광범위한 클라우드 경험을 적용하여 올바른 클라우드에서 올바른 기술을 선택하고 배포할 수 있도록 지원합니다.
  • 민첩한 전달 :귀하의 여정에서 귀하를 만나고 귀하의 성공에 맞춰 귀하의 성공을 맞춥니다.

시작하려면 지금 채팅하세요.