자동 페이지 복구(가용성 그룹: 데이터베이스 미러링)Automatic Page Repair (Availability Groups: Database Mirroring)

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 자동 페이지 복구는 데이터베이스 미러링과 Always On 가용성 그룹Always On availability groups에서 지원됩니다. Automatic page repair is supported by database mirroring and by Always On 가용성 그룹Always On availability groups. 특정 유형의 오류로 인해 페이지가 손상되어 읽을 수 없게 되면 데이터베이스 미러링 파트너(주 파트너 또는 미러 파트너) 또는 가용성 복제본(주 복제본 또는 보조 복제본)이 자동으로 페이지를 복구하려고 시도합니다.After certain types of errors corrupt a page, making it unreadable, a database mirroring partner (principal or mirror) or an availability replica (primary or secondary) attempts to automatically recover the page. 페이지를 읽을 수 없는 파트너 또는 복제본은 해당 파트너나 다른 복제본에 페이지의 새 복사본을 요청합니다.The partner/replica that cannot read the page requests a fresh copy of the page from its partner or from another replica. 이 요청이 성공하면 읽을 수 없는 페이지는 읽을 수 있는 복사본으로 대체되고 일반적으로 오류가 해결됩니다.If this request succeeds, the unreadable page is replaced by the readable copy, and this usually resolves the error.

일반적으로 데이터베이스 미러링과 Always On 가용성 그룹Always On availability groups 은 동일한 방식으로 I/O 오류를 처리합니다.Generally speaking, database mirroring and Always On 가용성 그룹Always On availability groups handle I/O errors in equivalent ways. 여기에서 몇 가지 차이점을 명시적으로 소개합니다.The few differences are explicitly called out here.

참고

자동 페이지 복구는 DBCC 복구와 다릅니다.Automatic page repair differs from DBCC repair. 이 경우 모든 데이터가 유지됩니다.All of the data is preserved by an automatic page repair. 반대로 DBCC REPAIR_ALLOW_DATA_LOSS 옵션을 사용하여 오류를 수정하는 경우에는 일부 페이지 및 데이터가 삭제될 수 있습니다.In contrast, correcting errors by using the DBCC REPAIR_ALLOW_DATA_LOSS option might require that some pages, and therefore data, be deleted.

Error Types That Cause an Automatic Page-Repair AttemptError Types That Cause an Automatic Page-Repair Attempt

데이터베이스 미러링 자동 페이지 복구는 다음 표에 나열된 오류 중 하나로 인해 실패한 작업이 있는 데이터 파일의 페이지만 복구하도록 시도합니다.Database mirroring automatic page repair tries to repair only pages in a data file on which an operation has failed for one of the errors listed in the following table.

오류 번호Error number 설명Description 자동 페이지 복구 시도가 발생되는 인스턴스Instances that cause automatic page-repair attempt
823823 운영 체제가 데이터에서 실패한 CRC(순환 중복 검사)를 수행한 경우에만 동작이 수행됩니다.Action is taken only if the operating system performed a cyclic redundancy check (CRC) that failed on the data. ERROR_CRC이며ERROR_CRC. 이 오류에 대한 운영 체제 값은 23입니다.The operating-system value for this error is 23.
824824 논리 오류입니다.Logical errors. 조각난 쓰기 오류 또는 잘못된 페이지 체크섬과 같은 논리적 데이터 오류입니다.Logical data errors, such as torn write or bad page checksum.
829829 페이지가 복원 보류로 표시되었습니다.A page has been marked as restore pending. 모두All.

최근에 발생한 823 CRC 오류 및 824 오류를 보려면 msdb 데이터베이스의 suspect_pages 테이블을 참조하세요.To view recent 823 CRC errors and 824 errors, see the suspect_pages table in the msdb database.

Page Types That Cannot Be Automatically RepairedPage Types That Cannot Be Automatically Repaired

다음 컨트롤 페이지 유형은 자동 페이지 복구를 통해 복구할 수 없습니다.Automatic page repair cannot repair the following control page types:

  • 파일 헤더 페이지(페이지 ID 0)File header page (page ID 0).

  • 9페이지(데이터베이스 부트 페이지)Page 9 (the database boot page).

  • 할당 페이지: GAM(전역 할당 맵) 페이지, SGAM(공유 전역 할당 맵) 페이지 및 PFS(페이지 여유 공간) 페이지.Allocation pages: Global Allocation Map (GAM) pages, Shared Global Allocation Map (SGAM) pages, and Page Free Space (PFS) pages.

Handling I/O Errors on the Principal/Primary DatabaseHandling I/O Errors on the Principal/Primary Database

주/기본 데이터베이스에서는 데이터베이스가 SYNCHRONIZED 상태이고 주/기본 데이터베이스가 미러/보조 데이터베이스에 대한 로그 레코드를 계속 보내는 경우에만 자동 페이지 복구가 시도됩니다.On the principal/primary database, automatic page repair is tried only when the database is in the SYNCHRONIZED state and the principal/primary is still sending log records for the database to the mirror/secondary. 자동 페이지 복구 시도에서 기본적인 동작 시퀀스는 다음과 같습니다.The basic sequence of actions in an automatic page-repair attempt are as follows:

  1. 주/기본 데이터베이스의 데이터 페이지에서 읽기 오류가 발생하면 주/기본 데이터베이스는 해당 오류 상태와 함께 suspect_pages 테이블에 행을 삽입합니다.When a read error occurs on a data page in the principal/primary database, the principal/primary inserts a row in the suspect_pages table with the appropriate error status. 그런 다음 데이터베이스 미러링의 경우에는 주 데이터베이스가 미러 데이터베이스에 해당 페이지의 복사본을 요청합니다.For database mirroring, the principal then requests a copy of the page from the mirror. Always On 가용성 그룹Always On availability groups의 경우에는 주 데이터베이스가 해당 요청을 모든 보조 데이터베이스에 브로드캐스팅하고 응답할 첫 번째 데이터베이스에서 페이지를 가져옵니다.For Always On 가용성 그룹Always On availability groups, the primary broadcasts the request to all the secondaries and gets the page from the first to respond. 이 요청에는 페이지 ID와 현재 플러시된 로그 끝에 있는 LSN이 지정됩니다.The request specifies the page ID and the LSN that is currently at the end of the flushed log. 페이지가 복원 보류로 표시되므로The page is marked as restore pending. 자동 페이지 복구 시도 중에는 액세스할 수 없습니다.This makes it inaccessible during the automatic page-repair attempt. 복구 시도 중에 이 페이지에 액세스하려고 하면 오류 829(복원 보류)가 발생하며 실패합니다.Attempts to access this page during the repair attempt will fail with error 829 (restore pending).

  2. 페이지 요청을 받으면 미러/보조 데이터베이스는 요청에 지정된 LSN까지 로그를 다시 수행할 때까지 대기합니다.After receiving the page request, the mirror/secondary waits until it has redone the log up to the LSN specified in the request. 그런 다음 미러/보조 데이터베이스는 데이터베이스의 해당 복사본에 있는 페이지에 액세스하려고 시도합니다.Then, the mirror/secondary tries to access the page in its copy of the database. 페이지에 액세스할 수 있는 경우 미러/보조 데이터베이스는 해당 페이지의 복사본을 주/기본 데이터베이스로 보냅니다.If the page can be accessed, the mirror/secondary sends the copy of the page to the principal/primary. 액세스할 수 없는 경우 미러/보조 데이터베이스는 주/기본 데이터베이스로 오류를 반환하고 자동 페이지 복구 시도가 실패합니다.Otherwise, the mirror/secondary returns an error to the principal/primary, and the automatic page-repair attempt fails.

  3. 주/기본 데이터베이스는 해당 페이지의 새 복사본이 포함된 응답을 처리합니다.The principal/primary processes the response that contains the fresh copy of the page.

  4. 자동 페이지 복구 시도로 주의 대상 페이지가 수정되면 해당 페이지는 suspect_pages 테이블에 복원된 것으로(event_type = 5) 표시됩니다.After the automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 5).

  5. 페이지 I/O 오류로 인해 지연된 트랜잭션이 발생한 경우 페이지를 복구하고 나면 주/기본 데이터베이스에서 이러한 트랜잭션을 해결하려고 시도합니다.If the page I/O error caused any deferred transactions, after you repair the page, the principal/primary tries to resolve those transactions.

Handling I/O Errors on the Mirror/Secondary DatabaseHandling I/O Errors on the Mirror/Secondary Database

미러/보조 데이터베이스에서 발생하는 데이터 페이지에 대한 I/O 오류는 일반적으로 데이터베이스 미러링 및 Always On 가용성 그룹Always On availability groups에서와 동일한 방식으로 처리됩니다.I/O errors on data pages that occur on the mirror/secondary database are handled in generally the same way by database mirroring and by Always On 가용성 그룹Always On availability groups.

  1. 데이터베이스 미러링을 사용하는 경우 로그 레코드를 다시 실행할 때 미러 데이터베이스에 하나 이상의 페이지 I/O 오류가 발생한 경우 미러링 세션은 SUSPENDED 상태가 됩니다.With database mirroring, if the mirror encounters one or more page I/O errors when it redoes a log record, the mirroring session enters the SUSPENDED state. Always On 가용성 그룹Always On availability groups을 사용하는 경우 로그 레코드를 다시 실행할 때 보조 복제본에 하나 이상의 페이지 I/O 오류가 발생한 경우 보조 데이터베이스는 SUSPENDED 상태가 됩니다.With Always On 가용성 그룹Always On availability groups, if a secondary replica encounters one or more page I/O errors when it redoes a log record, the secondary database enters the SUSPENDED state. 이때 미러/보조 데이터베이스는 해당 오류 상태와 함께 suspect_pages 테이블에 행을 삽입합니다.At that point, the mirror/secondary inserts a row in the suspect_pages table with the appropriate error status. 그런 다음 미러/보조 데이터베이스는 주/기본 데이터베이스에 해당 페이지의 복사본을 요청합니다.The mirror/secondary then requests a copy of the page from the principal/primary.

  2. 주/기본 데이터베이스는 데이터베이스의 해당 복사본에 있는 페이지에 액세스하려고 시도합니다.The principal/primary tries to access the page in its copy of the database. 페이지에 액세스할 수 있는 경우 주/기본 데이터베이스는 해당 페이지의 복사본을 미러/보조 데이터베이스로 보냅니다.If the page can be accessed, the principal/primary sends the copy of page to the mirror/secondary.

  3. 미러/보조 데이터베이스가 요청한 모든 페이지의 복사본을 받을 경우 미러/보조 데이터베이스는 미러링 세션을 다시 시작합니다.If the mirror/secondary receives copies of every page it has requested, the mirror/secondary tries to resume the mirroring session. 자동 페이지 복구 시도로 주의 대상 페이지가 수정되면 해당 페이지는 suspect_pages 테이블에 복원된 것으로(event_type = 4) 표시됩니다.If an automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 4).

    미러/보조 데이터베이스가 요청한 페이지를 주/기본 데이터베이스로부터 받지 못할 경우 자동 페이지 복구 시도가 실패합니다.If a mirror/secondary does not receive a page that it requested from the principal/primary, the automatic page-repair attempt fails. 데이터베이스 미러링을 사용하는 경우 미러링 세션은 일시 중단된 상태로 남게 됩니다.With database mirroring, the mirroring session remains suspended. Always On 가용성 그룹Always On availability groups을 사용하는 경우에는 보조 데이터베이스가 일시 중단된 상태로 남게 됩니다With Always On 가용성 그룹Always On availability groups, the secondary database remains suspended. 미러링 세션 또는 보조 데이터베이스를 수동으로 다시 시작하는 경우 손상된 페이지는 동기화 단계 중에 다시 나타납니다.If the mirroring session or secondary database is resumed manually, the corrupted pages will be hit again during the synchronization phase.

Developer Best PracticeDeveloper Best Practice

자동 페이지 복구는 백그라운드로 실행되는 비동기 프로세스입니다.An automatic page repair is an asynchronous process that runs in the background. 따라서 읽을 수 없는 페이지를 요청하는 데이터베이스 작업은 실패하게 되고 오류를 일으킨 조건과 상관없이 오류 코드가 반환됩니다.Therefore, a database operation that requests an unreadable page fails and returns the error code for whatever condition caused the failure. 미러된 데이터베이스 또는 가용성 데이터베이스에 대한 응용 프로그램을 개발하는 경우 실패한 작업에 대한 예외를 차단해야 합니다.When developing an application for a mirrored database or an availability database, you should intercept exceptions for failed operations. SQL ServerSQL Server 오류 코드가 823, 824 또는 829인 경우 작업을 나중에 다시 시도해야 합니다.If the SQL ServerSQL Server error code is 823, 824, or 829, you should retry the operation later.

How To: View Automatic Page-Repair AttemptsHow To: View Automatic Page-Repair Attempts

다음 동적 관리 뷰는 지정된 가용성 데이터베이스 또는 미러된 데이터베이스에 대한 최근 자동 페이지 복구 시도에 해당하는 행을 데이터베이스당 최대 100개까지 반환합니다.The following dynamic management views return rows for the latest automatic page-repair attempts on a given availability database or mirrored database, with a maximum of 100 rows per database.

  • Always On 가용성 그룹:Always On Availability Groups:

    sys.dm_hadr_auto_page_repair(Transact-SQL)sys.dm_hadr_auto_page_repair (Transact-SQL)

    서버 인스턴스가 모든 가용성 그룹에 대해 호스팅하는 가용성 복제본의 모든 가용성 데이터베이스에 대해 수행하는 자동 페이지 복구 시도당 한 개의 행을 반환합니다.Returns a row for every automatic page-repair attempt on any availability database on an availability replica that is hosted for any availability group by the server instance.

  • 데이터베이스 미러링:Database mirroring:

    sys.dm_db_mirroring_auto_page_repair(Transact-SQL)sys.dm_db_mirroring_auto_page_repair (Transact-SQL)

    서버 인스턴스의 미러된 데이터베이스에 대한 각 자동 페이지 복구 시도당 하나의 행을 반환합니다.Returns a row for every automatic page-repair attempt on any mirrored database on the server instance.

참고 항목See Also

suspect_pages 테이블 관리(SQL Server) Manage the suspect_pages Table (SQL Server)
Always On 가용성 그룹 개요(SQL Server) Overview of Always On Availability Groups (SQL Server)
데이터베이스 미러링(SQL Server)Database Mirroring (SQL Server)