sql >> Base de Datos >  >> RDS >> Sqlserver

Formas de arreglar SQL Server detectó un error de E/S basado en consistencia lógica

Resumen: El problema de inaccesibilidad de la base de datos SQL es el problema común que enfrentan los usuarios de la base de datos. Por lo tanto, en este blog de solución de problemas se tratará SQL Server detectó un error de E/S basado en coherencia lógica. Vamos a discutir la razón detrás de este error y las mejores formas posibles de saber cómo abordar este problema. Para acceder y recuperar la base de datos SQL inaccesible, el usuario puede tomar la ayuda de la herramienta Recuperar base de datos de SQL Server.

Razones detrás del error de E/S basado en la consistencia lógica de la base de datos:

  • Apagado/bloqueo repentino del sistema o apagado restringido
  • El administrador de SQL intenta consultar o cambiar los datos de SQL

En el momento en que una base de datos de SQL Server encuentra un error basado en coherencia lógica, el paso inicial es detectar el error.

Las estrategias adjuntas pueden ayudar a detectar el error:

  • Utilice la herramienta Best Practice Analyzer (BPA):la herramienta BPA ayuda a identificar errores básicos de coherencia. Esta herramienta es explícita para la variante SQL, lo que significa que se puede acceder a BPA 2008 con SQL 2008, etc.
  • Compruebe el sistema de Windows a nivel de marco de registro de eventos, errores relacionados con el controlador o el disco
  • Verifique la respetabilidad del marco de archivos ejecutando chkdsk order
  • Ejecute los diagnósticos sugeridos por los productores de hardware para el marco o el disco
  • Para SQL Server 2008, ejecute la utilidad SQLIOSim en la unidad de la base de datos que ha anunciado un error de E/S.
  • Póngase en contacto con el vendedor de hardware o el fabricante del dispositivo para verificar que los requisitos previos del hardware cumplan con las necesidades de E/S del servidor SQL.

Formas manuales de abordar SQL Server detectó un error de E/S basado en consistencia lógica

Técnica 1:comprobar el hardware y la red de aplicaciones

El error de irregularidad de la base de datos se puede solucionar mediante la creación de una red adecuada entre la base de datos y la aplicación SQL.

Técnica 2:restaurar desde una copia de seguridad de SQL

La solución más alcanzable es utilizar una copia de seguridad para la recuperación de la base de datos SQL. Antes de restaurar desde una copia de seguridad, asegúrese de que:

  • Tienes una copia de seguridad completa en curso
  • La copia de seguridad se actualiza, solo antes de la corrupción, y no es muy antigua para mantener una distancia estratégica de la pérdida de datos básicos.
  • La corrupción está a nivel de página, ya que los problemas de corrupción a nivel de página se pueden resolver con la ayuda de la restauración a nivel de página.

Paso 1: Utilice el pedido adjunto para restaurar la base de datos SQL desde una copia de seguridad completa

Copia de seguridad del registro de transacciones

Copia de seguridad LOG PageLevelRestores TO

Placa ='g:PageLevelRestores_LOG1.bak'

CON INICIO

IR

Paso 2: Realice el cambio de restauración para reflejar las progresiones en línea.

Copia de seguridad de la cola del registro...

Copia de seguridad LOG PageLevelRestores TO

Círculo ='g:PageLevelRestores_LOG_TAIL.bak'

CON INICIO

IR

Nota:No hay ninguna razón convincente para restaurar la base de datos del servidor SQL completa si la corrupción está vinculada a una sola página. Puede restaurar la base de datos desde la copia de seguridad accesible para esa página que está socavada. Realizar pedidos adjuntos ayudará a restaurar la copia de seguridad de una página solitaria:

Restaurar todas las copias de seguridad de registros accesibles en la solicitud correcta

Restaurar LOG PageLevelRestores DESDE

Círculo ='g:PageLevelRestores_LOG1.bak'

SIN RECUPERACIÓN

IR

Finalmente, restaure la copia de seguridad del registro de seguimiento

Restaurar LOG PageLevelRestores DESDE

Círculo ='g:PageLevelRestores_LOG_TAIL.bak'

SIN RECUPERACIÓN

IR

Finalmente, termine con la secuencia de restauración

Restaurar BASE DE DATOS PageLevelRestores CON RECUPERACIÓN

IR

Cuando la copia de seguridad de la base de datos haya restaurado la base de datos SQL, ejecute la consulta DBCC CHECKDB nuevamente para ver que la proclamación de selección prevalece sin el error de E/S basado en la consistencia lógica de la base de datos SQL. Esta orden además vigila que no haya pérdida de datos en esta tabla.

Limitaciones de la copia de seguridad de la base de datos SQL:

  1. Es absurdo esperar restaurar desde una copia de seguridad de la base de datos SQL cuando la copia de seguridad accesible no está actualizada.
  2. En caso de que el error de E/S basado en coherencia lógica se extienda por la base de datos del servidor SQL, en ese momento esta estrategia no será legítima.
  3. Para aquellas situaciones en las que la página defectuosa existe en un índice no agrupado, la base de datos SQL se puede reparar eliminando y recreando el índice de la base de datos SQL.

Técnica 3:reparar la base de datos SQL corrupta con REPAIR_ALLOW_DATA_LOSS

REPAIR_ALLOW_DATA_LOSS es el nivel fijo base para los errores analizados.

Notas:antes de utilizar REPAIR_ALLOW_DATA_LOSS, realice lo siguiente:

Realice una copia de seguridad de la base de datos del servidor SQL y guárdela con otro nombre

Establecer base de datos SQL en modo de usuario único

Obtenga el recuento de registros de todas las tablas usando los comandos adjuntos

Proclamar @COUNT INT

Proclamar @SQL VARCHAR(2000)

Hacer TABLA #T_Info(ID INT IDENTIDAD(1,1),T_Name VARCHAR(200),D_Count INT)

Proclamar TINFO_CUR CURSOR PARA

SELECCIONE NOMBRE_TABLA DE INFORMACION_ESQUEMA.TABLAS

WHERE TABLE_TYPE='TABLA BASE'

ABRIR TINFO_CUR

Obtenga SIGUIENTE DE TINFO_CUR A @T_Name

MIENTRAS @@FETCH_STATUS =0

Comenzar

SET @SQL='INSERT INTO #T_Info(T_Name,D_Count) SELECT ”’[email protected]_Name+”’,COUNT(*) FROM ‘[email protected]_Name+”

EJECUTAR (@SQL)

Obtenga SIGUIENTE DE TINFO_CUR A @T_Name

FIN

CERRAR TINFO_CUR

DESASIGNAR TINFO_CUR

SELECCIONE * DE #T_Info ORDENAR POR T_NAME

Los avances adjuntos ayudan a reparar la base de datos SQL y resolver el error de E/S coherente basado en la consistencia:

Ejecute el comando:

DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)

Una vez que la base de datos SQL esté reparada, repita el procedimiento de 'Recuento de registros de tabla' y contraste con el recuento de registros anterior.

No debe haber ninguna distinción entre el recuento inicial y el último registro de la tabla.

Restricciones :

REPAIR_ALLOW_DATA_LOSS puede corregir el error de E/S basado en la consistencia lógica de la base de datos, pero existe un problema importante de pérdida de datos, en el que una conexión puede perder datos básicos.

Solución Electiva

Si las técnicas anteriores no funcionan, en ese momento, consulte una herramienta de reparación de archivos SysTools SQL. Esta herramienta corrige archivos MDF y NDF corruptos y restaura todos los objetos de la base de datos. Además, esta herramienta ayuda a recuperar todos los objetos de la base de datos, como tablas, disparadores, índices, claves, reglas, archivos eliminados y procedimientos almacenados. Es de increíble ayuda en medio de una emergencia, ya que el producto brinda una solución de reparación inconfundible y es compatible con todas las versiones de la base de datos SQL.

Conclusión

Lea también: Cómo comprobar si la base de datos SQL está dañada 

En esta publicación, presentamos el motivo por el que SQL Server detectó un error de E/S basado en coherencia lógica y las técnicas para resolver este problema.

En vista del error, hemos intentado localizar la técnica correcta. En caso de que el hardware o el marco sean responsables del error, se recomienda determinar los problemas relacionados con el hardware y, en caso de que DBCC CHECKDB informe un error de coherencia, intente restaurar la base de datos SQL utilizando una copia de seguridad actualizada. /P>

Si el problema no se soluciona con el hardware y la copia de seguridad, en ese momento intente arreglar la base de datos con la ayuda de REPAIR_ALLOW_DATA_LOSS. Este es el grado base de corrección para identificar todos los errores de CHECKDB, pero esto no significa que realmente corregirá el error. Además, podría provocar la pérdida de datos.