Executando restaurações de página

 Este tópico é relevante para bancos de dados do SQL Server que estão usando os modelos de recuperação completa ou bulk-logged. Só há suporte para restauração de página para grupos de arquivos de leitura/gravação.

A meta da restauração de uma página é restaurar uma ou mais páginas danificadas sem restaurar todo o banco de dados. Geralmente, as páginas candidatas à restauração foram marcadas como "suspeitas" por causa de um erro encontrado durante seu acesso. Páginas suspeitas são identificadas na tabela suspect_pages do banco de dados msdb.

ObservaçãoObservação

Nem todas as páginas com erro requerem uma restauração. Pode ocorrer um problema nos dados armazenados em cache, como um índice secundário, que pode ser resolvido pelo recálculo dos dados. Por exemplo, se o administrador de banco de dados cancela um índice secundário e o recria, os dados corrompidos, embora fixos, não são indicados como tal na tabela suspect_pages.

Várias páginas de banco de dados podem ser restauradas imediatamente. Os backups de arquivo de log são aplicados a todos os arquivos do banco de dados que contêm uma página a ser recuperada. Assim como em uma restauração de arquivo, o conjunto roll forward é avançado com uma única passagem de restauração de log.

A restauração de página é para restaurar páginas danificadas isoladas. A restauração e recuperação de algumas páginas individuais pode ocorrer mais rapidamente do que a restauração de arquivo, reduzindo a quantidade de dados offline durante a operação de restauração. No entanto, se for necessário restaurar mais do que algumas páginas em um arquivo, será geralmente mais eficaz restaurar todo o arquivo. Por exemplo, se várias páginas em um dispositivo indicarem uma falha de dispositivo pendente, considere restaurar o arquivo, possivelmente em outro local, e reparar o dispositivo.

Cenários de restauração de página

Todas as edições do SQL Server 2005 e versões posteriores oferecem suporte à restauração de páginas quando o banco de dados estiver offline (restauração de página offline). No SQL Server 2005 Enterprise Edition e versões posteriores, se o banco de dados estiver online durante a restauração de uma página, ele permanecerá online. A restauração e recuperação de uma página enquanto o banco de dados está online é denominada uma restauração de página online.

Esses cenários de restauração de página são os seguintes:

  • Restauração de página offline

    O SQL Server 2005 Standard, o SQL Server 2005 Express Edition e o SQL Server 2005 Workgroup, bem como versões posteriores, só oferecem suporte à restauração offline. O SQL Server 2005 Enterprise Edition e versões posteriores usam a restauração offline se o banco de dados já está offline. Em uma restauração de página offline, o banco de dados fica offline enquanto as páginas danificadas são restauradas. Ao término da seqüência de restauração, o banco de dados fica online.

    Para que a restauração da página tenha êxito, as páginas restauradas devem ser recuperadas para um estado consistente com o banco de dados. Uma cadeia uniforme de backups de log deve ser aplicada à última restauração completa ou diferencial para trazer o grupo de arquivos que contém a página até o arquivo de log atual.

  • Restauração de página online

    No SQL Server 2005 Enterprise Edition e versões posteriores, quando as condições permitem, as restaurações de página são executadas automaticamente online. Na maioria dos casos, uma página danificada pode ser restaurada enquanto o banco de dados, inclusive o grupo de arquivos para o qual uma página está sendo restaurada, permanece online. A restauração de página online é especialmente útil para páginas danificadas por erro de hardware.

    Ocasionalmente, uma página danificada pode requerer uma restauração offline. Por exemplo, os danos a certas páginas importantes podem impedir a inicialização do banco de dados. Nesses casos, a restauração offline deve ser usada.

    ObservaçãoObservação

    Uma restauração online tenta atualizar metadados e essa atualização poderá falhar se uma página importante estiver envolvida. Se houver falha em uma tentativa de restauração online, a restauração deverá ser executada offline.

A restauração de página beneficia-se do relatório aprimorado de erro no nível da página (incluindo somas de verificação de página) e do controle no SQL Server 2005 e versões posteriores. As páginas detectadas como corrompidas por soma de verificações ou uma gravação interrompida, páginas danificadas, podem ser restauradas especificando as páginas em uma instrução RESTORE. A restauração de página destina-se a restaurar somente algumas páginas danificadas. Cada página especificada em uma instrução RESTORE é substituída por uma página do conjunto de backup especificado. As páginas restauradas devem ser recuperadas para um estado consistente com o banco de dados. Somente páginas explicitamente especificadas são restauradas.

Limitações de restaurações de página

Somente páginas de banco de dados podem ser restauradas. A restauração de página não pode ser usada para restaurar o seguinte:

  • Log de transações

  • Páginas de alocação: páginas GAM (Mapa de Alocação Global), páginas SGAM (Mapa de Alocação Global Compartilhada) e páginas PFS (Páginas de Espaço Livre). Para obter mais informações, consulte Gerenciando alocações de extensão e espaço livre.

  • Página 0 de todos os arquivos de dados (a página de inicialização de arquivo)

  • Página 1:9 (a página de inicialização do banco de dados)

  • Catálogo de texto completo

Se uma página individual não puder ser restaurada, você deverá usar o backup completo do banco de dados ou o backup completo do arquivo ou grupo de arquivos existente.

ObservaçãoObservação

Se a página que estiver sendo restaurada for um caso especial, como páginas de metadados, a restauração online da página falhará. Nesses casos, tente uma restauração de página offline.

Requisitos para restauração de páginas

Uma restauração de página está sujeita aos seguintes requisitos:

  • Os bancos de dados devem usar o modelo de recuperação completa ou bulk-logged. Haverá alguns problemas se você estiver usando o modelo com log de operações em massa. Para obter mais informações, consulte a seguinte seção:

  • Páginas em grupos de arquivos somente leitura não podem ser restauradas. A tentativa de transformar um grupo de arquivos em somente leitura falhará se houver uma página em restauração ao mesmo tempo no grupo de arquivos.

  • A seqüência de restauração deve iniciar com backup completo do arquivo ou de um grupo de arquivos

  • Uma restauração de página requer uma cadeia uniforme de backups de log no arquivo do log atual e todos devem ser aplicados para que a página seja atualizada com o arquivo de log atual.

  • Como em uma seqüência de restauração de arquivo, em cada etapa da restauração você pode adicionar mais páginas ao conjunto de roll forward.

  • Um backup de banco de dados e uma restauração de página não podem ser executados ao mesmo tempo.

Modelo de recuperação bulk-logged e restauração de página

Para um banco de dados que usa o modelo de recuperação bulk-logged, a restauração de página tem as seguintes condições adicionais:

  • Fazer um backup enquanto um grupo de arquivos ou dados de página estão offline é problemático para dados com log de operações em massa porque os dados offline não são registrados no log. Qualquer página offline pode impedir o backup do log. Nesses casos, considere usar DBCC REPAIR, pois isso pode causar menos perda de dados do que a restauração do backup mais recente.

  • Se um backup de log de um banco de dados com log de operações em massa encontrar uma página danificada, falhará a menos que WITH CONTINUE_AFTER_ERROR esteja especificado.

  • A restauração de página geralmente não funciona em recuperação bulk-logged.

    Uma prática recomendada para executar restauração de página é definir o banco de dados como modelo de recuperação completa e tentar um backup de log. Se o backup de log funcionar, você poderá continuar com a restauração da página. Se o backup de log falhar, você perderá trabalho desde o backup de log anterior ou terá de tentar executar DBCC com a opção REPAIR_ALLOW_DATA_LOSS.

Sintaxe básica de restauração de página

Para especificar uma página em uma instrução RESTORE DATABASE, você precisará da ID do arquivo que contém a página e da ID da página. A sintaxe necessária é a seguinte:

RESTORE DATABASE database_name

PAGE ='arquivo:página [ ,...n ]' [ ,...n ]

   FROM <backup_device> [ ,...n ]

WITH NORECOVERY

Para obter mais informações sobre os parâmetros da opção PAGE, consulte Argumentos de RESTORE (Transact-SQL). Para obter mais informações sobre a sintaxe RESTORE DATABASE, consulte RESTORE (Transact-SQL).

Procedimento para uma restauração de página

As etapas básicas para uma restauração de página são as seguintes:

  1. Obtenha a ID das páginas a serem restauradas. Uma soma de verificação ou um erro de gravação interrompida retorna a ID da página, fornecendo as informações necessárias para especificar as páginas. Para consultar a ID de uma página danificada, use qualquer uma das fontes a seguir.

  2. Inicie uma restauração de página com um backup completo do banco de dados, do arquivo ou do grupo de arquivos que contém a página. Na instrução RESTORE DATABASE, use a cláusula PAGE para listar as IDs de página de todas as páginas a serem restauradas.

    PAGE ='file:page [ ,...n ]'

  3. Aplique os diferenciais mais recentes.

  4. Aplique os backups de log subseqüentes.

  5. Crie um novo backup de log do banco de dados que inclui o LSN final das páginas restauradas, ou seja, o ponto no qual a última página restaurada foi colocada offline. O LSN final, que é definido como parte da primeira restauração na seqüência, é o LSN refeito de destino. O roll forward Online do arquivo que contém a página pode parar no LSN refeito de destino. Para saber qual é o LSN refeito de destino de um arquivo, consulte a coluna redo_target_lsn de sys.master_files. Para obter mais informações, consulte sys.master_files (Transact-SQL).

  6. Restaure o novo backup de log. Depois que o novo backup de log é aplicado, a restauração da página está concluída e as páginas podem ser usadas.

ObservaçãoObservação

Essa seqüência é análoga à seqüência de restauração de um arquivo. Na realidade, restaurações de página e arquivo podem ser executadas como parte da mesma seqüência.

Exemplo

O exemplo a seguir restaura quatro páginas danificadas do arquivo B com NORECOVERY. Em seguida, dois backups de log são aplicados com NORECOVERY, seguido pelo backup do final do log que é restaurado com RECOVERY.

Observação importanteImportante

Se as páginas danificadas estiverem armazenando metadados de bancos de dados importantes, uma seqüência de restauração de página offline poderá ser necessária. Para executar uma restauração offline, será necessário fazer backup de log de transações WITH NORECOVERY.

O exemplo a seguir executa uma restauração online. No exemplo, a ID de arquivo de B é 1, e as IDs de página das páginas danificadas são 57, 202, 916 e 1016.

RESTORE DATABASE <database> PAGE='1:57, 1:202, 1:916, 1:1016'
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY; 
BACKUP LOG <database> TO <new_log_backup> 
RESTORE LOG <database> FROM <new_log_backup> WITH RECOVERY;
GO