¿Cómo corregir la corrupción de páginas en SQL Server?

Summary: En este post, vamos a hablar de la causa raíz detrás de la corrupción a nivel de página en SQL Server. También vamos a discutir las formas de solucionar la corrupción y restaurar la base de datos. Además, usted encontrará acerca de un software de reparación de base de datos SQL que puede reparar fácilmente una base de datos corrupta y restaurar todos sus objetos.

Las bases de datos pueden corromperse en cualquier momento y es un problema preocupante para los administradores de bases de datos, ya que pone en riesgo todos los datos cruciales en el servidor SQL. Además, los datos se vuelven inaccesibles, lo que afecta al flujo de trabajo de la organización. Por lo tanto, es importante solucionar la corrupción de inmediato. Sin embargo, es igualmente importante entender las causas de la corrupción, de lo contrario, volverá a ocurrir. Este blog cubre información esencial sobre cómo solucionar la corrupción de páginas en SQL Server.

Causas de la corrupción a nivel de página de SQL Server

Estas son algunas de las principales razones que pueden conducir a la corrupción de bases de datos SQL Server.

  1. Error de software en el programa SQL Server: En este caso, los datos se escriben mal en el disco. Mira estos documentos de Microsoft:

Podemos evitar este tipo de problemas instalando la última actualización acumulativa (CU) de la versión de SQL Server.

  1. Problemas de Memoria: Estamos hablando de problemas de hardware que pueden afectar a todo el sistema y no sólo al MS SQL Server. Existen programas para verificar la corrección de los datos en memoria.
  2. Problemas del subsistema de E/S: En este caso, entender la causa del problema no es fácil porque el sistema de almacenamiento puede tener una arquitectura complicada. Por ejemplo, antes de escribir en el disco físico, puede que tengamos que atravesar una red o puede que tengamos un controlador de disco y sus controladores. Cualquiera de estos componentes puede fallar.
  3. Apagado repentino del servidor: Existe un riesgo sustancial de corrupción de la base de datos, si por alguna razón el servidor se apaga repentinamente. Esto puede ocurrir por un fallo físico del servidor o por falta de electricidad.

¿Cómo detectar la corrupción a nivel de página en SQL Server?

Las bases de datos de MS SQL Server constan de páginas de datos de 8 KB. Ocho páginas físicamente contiguas forman una extensión, que tiene un tamaño de 64 KB. La corrupción de páginas significa que tenemos una o más páginas que contienen valores incorrectos.

Si tenemos una base de datos corrupta, podemos comprobarlo de tres maneras:

1. La ejecución de la sentencia SELECT en la tabla dañada muestra un error

En este caso, aparece el mensaje de error:

2. Ejecute la sentencia DBCC CHECKDB

Este comando comprueba la integridad física y lógica de los objetos de la base de datos, las relaciones entre índices y otras comprobaciones estructurales. Basta con escribir DBCC CHECK con el nombre de la base de datos entre paréntesis.

En este caso, aparece el error:

3. Ejecutar SELECT en la tabla [msdb].[dbo].[suspect_pages]

El comando SELECT devolverá una cuadrícula con una fila de cada página dañada. En este caso, podemos ver que en la base de datos con ID = 31 la página 1:368 está dañada.

¿Cómo corregir la corrupción a nivel de página en SQL Server?

Aquí hemos mencionado dos formas diferentes de reparar y recuperar la base de datos.

1. Recuperación manual mediante comandos T-SQL

Nota: Realice una copia de seguridad de las bases de datos y/o copia de los ficheros físicos antes de proceder. El proceso manual es arriesgado.

Para proceder a la recuperación manualmente a través de comandos T-SQL para arreglar la corrupción de páginas en SQL server, siga las siguientes instrucciones.

Utilice el comando no documentado DBCC IND para asegurarse de que la página 368 es una página de datos.

DBCC IND('Recovery_test',Person,-1)

Este comando muestra todas las páginas relativas a la tabla, indicada en el segundo parámetro, con la información relativa al tipo de página. En el ejemplo siguiente,

Para visualizar los datos contenidos en la página 1:368, podemos abrir el archivo recovery_test.mdf con un editor hexadecimal e ir al desplazamiento 2e0000.

El carácter rojo ‘b’ (ver imagen inferior) parece sospechoso ya que mi nombre es “Luca” y no “Lucb”.

2. Utilice el comando DBCC PAGE:

Para obtener el resultado del comando DBCC PAGE, primero debe activarse el indicador Trace 3604.

DBCC TRACEON (3604)
DBCC PAGE('Recovery_test',1,368,2) WITH TABLERESULTS

Los parámetros requeridos son:

Los valores del parámetro printopt son:

Los datos mostrados son los mismos.

Tenemos que cambiar el valor del carácter del valor hexadecimal 62 (b) al valor hexadecimal 61 (a).

Podemos utilizar otro comando no documentado, que es el comando DBCC WRITEPAGE. Se trata de un potente comando que permite escribir directamente en una página.

Para utilizar el comando DBCC WRITEPAGE, necesitamos la siguiente información:

En primer lugar, ponga la base de datos en modo SINGLE_USER:

ALTER DATABASE recovery_test SET SINGLE_USER WITH ROLLBACK IMMEDIATE

A continuación, ejecute el comando WRITEPAGE:

DBCC WRITEPAGE ('prueba_recuperación', 1, 368, 116, 1, 0x61,1)

Ahora, ejecútelo de nuevo para ver si los datos han cambiado:

DBCC TRACEON (3604)
DBCC PAGE('Recovery_test',1,368,2) WITH TABLERESULTS

Sí, los datos han cambiado.

Poner la base de datos en modo MULTI_USUARIO:

ALTER DATABASE recovery_test SET MULTI_USER WITH ROLLBACK IMMEDIATE

Compruebe el estado de salud de la base de datos:

DBCC CHECKDB ('prueba_recuperación')

En el registro, podemos ver que no hay errores. Esto significa que la base de datos ya no está corrupta.

Repare la base de datos con Stellar Repair for MS SQL

Consideremos, que el problema que hemos resuelto manualmente es un caso notablemente simple. Pero reparar casos complejos de corrupción requiere conocimientos avanzados e implica el riesgo de dañar más los datos. Sin embargo, una aplicación dedicada como Stellar Repair for MS SQL puede resolver el mismo problema de forma segura y rápida. Sólo se requieren unos sencillos pasos para recuperar una base de datos corrupta. Estos son:

Se escaneará la estructura de la base de datos para repararla. Una barra de progreso muestra el progreso del trabajo.

Para concluir

La base de datos SQL se corrompe debido a una variedad de razones. En este post, hemos discutido las causas detrás de la corrupción a nivel de página en SQL Server. También hemos visto cómo detectar la corrupción en la base de datos y cómo reparar la base de datos dañada manualmente a través de comandos T-SQL y el uso de software de reparación de SQL. El software puede hacer un trabajo encomiable de resolver el problema y conseguir la base de datos de nuevo a un estado perfecto funcionamiento.

Related Post

Exit mobile version