Reparación automática de la página durante una sesión de creación de reflejo de la base de datos

A partir de SQL Server 2008, un asociado de creación de reflejo de la base de datos intenta recuperar automáticamente las páginas dañadas de la base de datos reflejada resolviendo ciertos tipos de errores que impiden leer una página de datos. El socio que no puede leer una página solicita una copia nueva al otro socio. Si la solicitud se realiza correctamente, la copia sustituirá a la página que no se puede leer, de forma que se resuelve el error en la mayoría de los casos.

Nota

La reparación automática de la página por parte de asociados de creación de reflejo de la base de datos difiere de la reparación de DBCC. Una reparación automática de la página conserva todos los datos. En cambio, es posible que sea necesario eliminar algunas páginas y, por lo tanto, algunos datos cuando se utiliza la opción REPAIR_ALLOW_DATA_LOSS de DBCC para la corrección de errores.

Tipos de errores que provocan un intento de reparación de página automática

La reparación de página automática de la creación de reflejo de la base de datos intenta reparar únicamente aquellas páginas de un archivo de datos en las que una operación no se ha realizado correctamente debido a uno de los errores que se muestran en la siguiente tabla.

Número de error

Descripción

Instancias que provocan el intento de una reparación de página automática

823

Se toman medidas solo cuando el sistema operativo ha realizado una prueba cíclica de redundancia (CRC) en la que se ha producido un error en los datos.

ERROR_CRC. El valor del sistema operativo para este error es de 23.

824

Errores lógicos.

Los errores de datos lógicos, como la escritura incompleta o la suma incorrecta de comprobación de página.

829

Se ha marcado una página como pendiente de restauración.

Todos.

Para visualizar los errores más recientes 823 de CRC y 824, consulte la tabla suspect_pages en la base de datos msdb.

Tipos de páginas que no se pueden reparar automáticamente

La creación de reflejo de la base de datos puede reparar los tipos de páginas de control siguientes:

  • Página de cabecera del archivo (Id. 0 de página).

  • Página 9 (la página de arranque de la base de datos).

  • Páginas de asignación: páginas del mapa de asignación global (GAM), páginas del mapa de asignación global compartido (SGAM) y páginas de espacio disponible en páginas (PFS).

Control de errores de E/S en la base de datos principal

En la base de datos principal, solo se intentará realizar la reparación de página automática cuando el nodo esté en el estado SYNCHRONIZED y el servidor principal todavía esté enviando las entradas del registro al servidor reflejado. A continuación se muestra la secuencia básica de acciones en un intento de reparación de página automática:

  1. Cuando se produce un error de lectura en una página de datos de la base de datos principal, el servidor principal inserta una fila en la tabla suspect_pages con el estado del error adecuado. El servidor principal solicita a continuación una copia de la página del servidor reflejado. La solicitud especifica el identificador de la página y el LSN que se encuentra actualmente al final del registro vaciado. La página se marca como pendiente de restauración. Esto hace que no se pueda tener acceso a ella durante el intento de reparación de página automática. Si se pretende tener acceso a esta página durante el intento de reparación, se producirá el error 829 (pendiente de restauración).

  2. Después de recibir la solicitud de la página, el servidor reflejado espera hasta que haya vuelto a crear el registro del LSN especificado en la solicitud. A continuación, el servidor reflejado intenta tener acceso a la página en la base de datos reflejada. Si se puede tener acceso a la página, el servidor reflejado envía la copia de la página al servidor principal. De lo contrario, el servidor reflejado devuelve un error al servidor principal y se produce un error en el intento de reparación de página automática.

  3. El servidor principal procesa la respuesta que contiene la copia nueva de la página.

  4. Después de que el intento de reparación de página automática repare una página sospechosa, la página se marcará en la tabla suspect_pages como restaurada (event_type = 4).

  5. Si el error de E/S de la página ha producido transacciones diferidas después de reparar la página, el servidor principal intentará resolver esas transacciones.

Control de los errores de E/S en la base de datos reflejada

Los errores de E/S en las páginas de datos que se producen en la base de datos reflejada se controlan de la siguiente manera.

  1. Si el servidor reflejado encuentra uno o más errores de E/S en las páginas cuando vuelve a generar una entrada del registro, la sesión de creación de reflejo establece el estado SUSPENDED. En ese momento, el servidor reflejado inserta una fila en la tabla suspect_pages con el estado de error correspondiente. A continuación, el servidor reflejado solicita al servidor principal una copia de la página.

  2. El servidor principal intenta tener acceso a la página en la base de datos principal. Si se puede tener acceso a la página, el servidor principal envía la copia de la página al servidor reflejado.

  3. Si el servidor reflejado recibe copias de cada página que ha solicitado, el servidor reflejado intentará reanudar la sesión de creación de reflejo. Si un intento de reparación de página automática repara una página sospechosa, la página se marca en la tabla suspect_pages como restaurada (event_type = 5).

    Si un servidor reflejado no recibe ninguna de las páginas solicitadas por el servidor principal, el intento de reparación de página automática no se realizará correctamente y la sesión de creación de reflejo permanecerá suspendida. Si se reanuda la sesión de creación de reflejo manualmente, se tendrán en cuenta de nuevo las páginas dañadas durante la fase de sincronización.

Prácticas recomendadas para el desarrollador de software

La reparación de página automática es un proceso asincrónico que se ejecuta en segundo plano. Por consiguiente, incluso para una base de datos reflejada, se producirá un error en una operación de base de datos que solicite una página que no se pueda leer, y ésta devolverá el código de error acerca de las condiciones que han provocado el error. Al desarrollar una aplicación para una base de datos reflejada, debería interceptar las excepciones relativas a las operaciones con errores. Si el código de error de SQL Server es 823, 824 u 829, debería volver a intentar dicha operación más adelante.