Reparo automático de página (Grupos de Disponibilidade: espelhamento de banco de dados)Automatic Page Repair (Availability Groups: Database Mirroring)

Aplica-se a:Applies to: simSQL ServerSQL Server (todas as versões compatíveis) yesSQL ServerSQL Server (all supported versions) Aplica-se a:Applies to: simSQL ServerSQL Server (todas as versões compatíveis) yesSQL ServerSQL Server (all supported versions)

O reparo automático de página tem suporte do espelhamento de banco de dados e de Grupos de disponibilidade AlwaysOnAlways On availability groups.Automatic page repair is supported by database mirroring and by Grupos de disponibilidade AlwaysOnAlways On availability groups. Depois que certos tipos de erros corrompem uma página, tornando-a ilegível, um parceiro de espelhamento de banco de dados (entidade de segurança ou espelho) ou uma réplica de disponibilidade (primária ou secundária) tenta recuperar a página automaticamente.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. O parceiro/réplica que não puder ler a página solicitará uma cópia atualizada da página do seu parceiro ou de outra réplica.The partner/replica that cannot read the page requests a fresh copy of the page from its partner or from another replica. Se essa solicitação tiver êxito, a página ilegível será substituída pela cópia legível. Isso costuma resolver o erro.If this request succeeds, the unreadable page is replaced by the readable copy, and this usually resolves the error.

Em geral, o espelhamento de banco de dados e Grupos de disponibilidade AlwaysOnAlways On availability groups tratam erros de E/S de formas equivalentes.Generally speaking, database mirroring and Grupos de disponibilidade AlwaysOnAlways On availability groups handle I/O errors in equivalent ways. As poucas diferenças são destacadas explicitamente aqui.The few differences are explicitly called out here.

Observação

O reparo automático de página difere do reparo de DBCC.Automatic page repair differs from DBCC repair. Todos os dados são preservados por um reparo automático de página.All of the data is preserved by an automatic page repair. Por outro lado, a correção de erros usando a opção DBCC REPAIR_ALLOW_DATA_LOSS pode exigir que algumas páginas e, portanto, dados, sejam excluídos.In contrast, correcting errors by using the DBCC REPAIR_ALLOW_DATA_LOSS option might require that some pages, and therefore data, be deleted.

Tipos de erro que causam uma tentativa de reparo automático de páginaError Types That Cause an Automatic Page-Repair Attempt

O reparo automático de página do espelhamento de banco de dados tenta reparar apenas páginas em um arquivo de dados no qual houve falha na operação de um dos erros listados na tabela a seguir.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.

Número do erroError number DescriçãoDescription Instâncias que causam uma tentativa de reparo automático de páginaInstances that cause automatic page-repair attempt
823823 Ação realizada apenas se o sistema operacional tiver executado uma CRC (verificação de redundância cíclica) que falhou nos dados.Action is taken only if the operating system performed a cyclic redundancy check (CRC) that failed on the data. ERROR_CRC.ERROR_CRC. O valor do sistema operacional desse erro é 23.The operating-system value for this error is 23.
824824 Erros lógicos.Logical errors. Erros de dados lógicos, como gravação interrompida ou soma de verificação de página inválida.Logical data errors, such as torn write or bad page checksum.
829829 Uma página foi marcada como restauração pendente.A page has been marked as restore pending. Todos.All.

Para exibir erros 823 CRC e erros 824 recentes, veja a tabela suspect_pages no banco de dados msdb .To view recent 823 CRC errors and 824 errors, see the suspect_pages table in the msdb database.

Tipos de página que não podem ser reparados automaticamentePage Types That Cannot Be Automatically Repaired

O reparo automático de página não pode reparar os seguintes tipos de página de controle:Automatic page repair cannot repair the following control page types:

  • Página de cabeçalho do arquivo (ID da página 0).File header page (page ID 0).

  • Página 9 (a página de inicialização do banco de dados).Page 9 (the database boot page).

  • Páginas de alocação: páginas GAM (Global Allocation Map), páginas SGAM (Shared Global Allocation Map) e páginas PFS (Page Free Space).Allocation pages: Global Allocation Map (GAM) pages, Shared Global Allocation Map (SGAM) pages, and Page Free Space (PFS) pages.

Manipulando erros de E/S no banco de dados principal/primárioHandling I/O Errors on the Principal/Primary Database

No banco de dados principal/primário, haverá a tentativa de reparo automático de página apenas quando o estado do banco de dados for SYNCHRONIZED e o principal/primário ainda estiver enviando registros de log do banco de dados ao espelho/secundário.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. A sequência básica de ações em uma tentativa de reparo automático de página é a seguinte:The basic sequence of actions in an automatic page-repair attempt are as follows:

  1. Quando ocorre um erro de leitura em uma página de dados no banco de dados principal/primário, o principal/primário insere uma linha na tabela suspect_pages com o status de erro apropriado.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. Para o espelhamento de banco de dados, o principal solicita uma cópia da página do espelho.For database mirroring, the principal then requests a copy of the page from the mirror. Para Grupos de disponibilidade AlwaysOnAlways On availability groups, o primário transmite a solicitação a todos os secundários e obtém a página do primeiro a responder.For Grupos de disponibilidade AlwaysOnAlways On availability groups, the primary broadcasts the request to all the secondaries and gets the page from the first to respond. A solicitação especifica a ID da página e o LSN que estão atualmente na parte final do log liberado.The request specifies the page ID and the LSN that is currently at the end of the flushed log. A página é marcada como restauração pendente.The page is marked as restore pending. Isso a torna inacessível durante a tentativa de reparo automático de página.This makes it inaccessible during the automatic page-repair attempt. Ocorrerá falha com o erro 829 nas tentativas de acesso a essa página durante a tentativa de reparo (restauração pendente).Attempts to access this page during the repair attempt will fail with error 829 (restore pending).

  2. Após o recebimento da solicitação de página, o espelho/secundário espera o log ser refeito para o LSN especificado na solicitação.After receiving the page request, the mirror/secondary waits until it has redone the log up to the LSN specified in the request. Depois, o espelho/secundário tenta acessar a página em sua cópia do banco de dados.Then, the mirror/secondary tries to access the page in its copy of the database. Se a página puder ser acessada, o espelho/secundário enviará a cópia da página ao principal/primário.If the page can be accessed, the mirror/secondary sends the copy of the page to the principal/primary. Caso contrário, o espelho/secundário retornará um erro ao principal/primário e ocorrerá uma falha na tentativa de reparo automático de página.Otherwise, the mirror/secondary returns an error to the principal/primary, and the automatic page-repair attempt fails.

  3. O principal/primário processa a resposta que contém a cópia atualizada da página.The principal/primary processes the response that contains the fresh copy of the page.

  4. Depois que a tentativa de reparo automático de página reparar uma página suspeita, a página será marcada na tabela suspect_pages como restaurada (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. Se o erro de E/S de página causar quaisquer transações adiadas, após a página ser reparada, o principal/primário tentará resolver essas transações.If the page I/O error caused any deferred transactions, after you repair the page, the principal/primary tries to resolve those transactions.

Manipulando erros de E/S no banco de dados espelho/secundárioHandling I/O Errors on the Mirror/Secondary Database

Os erros de E/S em páginas de dados que ocorrem no banco de dados espelho/secundário costumam ser tratados da mesma forma pelo espelhamento de banco de dados e pelo Grupos de disponibilidade AlwaysOnAlways 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 Grupos de disponibilidade AlwaysOnAlways On availability groups.

  1. Com o espelhamento de banco de dados, se o espelho encontrar um ou mais erros de E/S de página ao refazer um registro de log, a sessão de espelhamento entrará no estado 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. Com o Grupos de disponibilidade AlwaysOnAlways On availability groups, se uma réplica secundária encontrar um ou mais erros de E/S de página ao refazer um registro de log, o banco de dados secundário entrará no estado SUSPENDED.With Grupos de disponibilidade AlwaysOnAlways 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. Nesse ponto, o espelho/secundário insere uma linha na tabela suspect_pages com o status de erro apropriado.At that point, the mirror/secondary inserts a row in the suspect_pages table with the appropriate error status. O espelho/secundário solicita uma cópia da página do principal/primário.The mirror/secondary then requests a copy of the page from the principal/primary.

  2. O principal/primário tenta acessar a página em sua cópia do banco de dados.The principal/primary tries to access the page in its copy of the database. Se a página puder ser acessada, o principal/primário enviará a cópia da página ao espelho/secundário.If the page can be accessed, the principal/primary sends the copy of the page to the mirror/secondary.

  3. Se o espelho/secundário receber cópias de cada página solicitada, ele tentará retomar a sessão de espelhamento.If the mirror/secondary receives copies of every page it has requested, the mirror/secondary tries to resume the mirroring session. Se uma tentativa de reparo automático de página reparar uma página suspeita, a página será marcada na tabela suspect_pages como restaurada (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).

    Se um espelho/secundário não receber uma página solicitada do principal/primário, ocorrerá falha na tentativa de reparo automático de página.If a mirror/secondary does not receive a page that it requested from the principal/primary, the automatic page-repair attempt fails. Com o espelhamento de banco de dados, a sessão de espelhamento permanece suspensa.With database mirroring, the mirroring session remains suspended. Com o Grupos de disponibilidade AlwaysOnAlways On availability groups, o banco de dados secundário permanece suspenso.With Grupos de disponibilidade AlwaysOnAlways On availability groups, the secondary database remains suspended. Se a sessão de espelhamento ou o banco de dados secundário for retomado de forma manual, as páginas corrompidas serão acionadas novamente durante a fase de sincronização.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

Um reparo automático de página é um processo assíncrono executado em segundo plano.An automatic page repair is an asynchronous process that runs in the background. Portanto, ocorre falha na operação de banco de dados que solicita uma página ilegível e o código de erro é retornado para qualquer condição que causou a falha.Therefore, a database operation that requests an unreadable page fails and returns the error code for whatever condition caused the failure. Ao desenvolver um aplicativo para um banco de dados espelho ou um banco de dados de disponibilidade, você deve interceptar as exceções para operações com falha.When developing an application for a mirrored database or an availability database, you should intercept exceptions for failed operations. Se o código de erro SQL ServerSQL Server for 823, 824 ou 829, você deverá tentar novamente a operação mais tarde.If the SQL ServerSQL Server error code is 823, 824, or 829, you should retry the operation later.

Como exibir tentativas de reparo automático de páginaHow To: View Automatic Page-Repair Attempts

As exibições de gerenciamento dinâmico a seguir retornam linhas para as últimas tentativas de reparo automático de página em determinado banco de dados de disponibilidade ou banco de dados espelho, com um máximo de 100 linhas por banco de dados.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.

  • Grupos de Disponibilidade AlwaysOn:Always On Availability Groups:

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

    Retorna uma linha para cada tentativa de reparo automático de página em qualquer banco de dados de disponibilidade em uma réplica de disponibilidade hospedada para qualquer grupo de disponibilidade pela instância do servidor.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.

  • Espelhamento de banco de dados:Database mirroring:

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

    Retorna uma linha para cada tentativa de reparo automático de página em qualquer banco de dados espelho na instância de servidor.Returns a row for every automatic page-repair attempt on any mirrored database on the server instance.

Consulte TambémSee Also

Gerenciar a tabela suspect_pages (SQL Server) Manage the suspect_pages Table (SQL Server)
Visão geral dos grupos de disponibilidade AlwaysOn (SQL Server) Overview of Always On Availability Groups (SQL Server)
Espelhamento de banco de dados (SQL Server)Database Mirroring (SQL Server)