Estoy trabajando en la implementación del método de Paul Randal de difundir manualmente DBCC CHECKDB durante varios días para bases de datos muy grandes, que básicamente consiste en:
- Dividiendo las tablas en la base de datos aproximadamente por igual entre 7 cubos
- Ejecutar un DBCC CHECKALLOC dos veces por semana
- Ejecutar un DBCC CHECKCATALOG una vez por semana
- Ejecutar un DBCC CHECKTABLE en un cubo cada día de la semana
¿Alguien ha usado esta técnica? ¿Hay guiones existentes por ahí?
Me preocupa que esto en realidad no cubra todo lo que CHECKDB hace; La documentación de Books Online para CHECKDB dice que además de CHECKALLOC, CHECKCATALOG y CHECKTABLE, también:
- Valida el contenido de cada vista indizada en la base de datos.
- Valida la consistencia a nivel de enlace entre los metadatos de la tabla y los directorios y archivos del sistema de archivos al almacenar datos varbinary (max) en el sistema de archivos usando FILESTREAM. (Solo SQL 2008)
- Valida los datos de Service Broker en la base de datos.
Asi que aqui están mis preguntas:
¿Son estos controles adicionales necesarios / importantes? (Las vistas indexadas son probablemente un poco más preocupantes para mí, no creo que estemos utilizando Service Broker o FILESTREAM todavía).
Si es así, ¿hay formas de realizar estas verificaciones adicionales por separado?
CHECKALLOC y CHECKCATALOG parecen ejecutarse muy rápidamente, incluso en dbs grandes. ¿Alguna razón para no ejecutar estos todos los días?
(Nota: esta será una rutina estándar para miles de bases de datos existentes en cientos de servidores, o al menos para todas las bases de datos de cierto tamaño. Esto significa que opciones como la reestructuración de todas las bases de datos para usar CHECKFILEGROUP no son realmente prácticas para nosotros).
fuente
Respuestas:
Puede ejecutar
DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS
directamente en las vistas indexadas . Verificar las vistas indexadas puede ser problemático en ciertas circunstancias , así que prepárese para investigar cualquier falso positivo que resulte. (Paul Randal también menciona en los comentarios al artículo referenciado que los falsos negativos también son posibles, pero no tengo experiencia directa en eso).No hay soporte para ejecutar Service Broker o
FILESTREAM
cheques por separado, no.No que yo sepa.
También podrías considerar correr
DBCC CHECKCONSTRAINTS
. Esta comprobación se no incluido enDBCC CHECKDB
, independientemente de las opciones que puede especificar. También es posible que desee pensar en correr ocasionalmenteCHECKDB
, cuando las circunstancias lo permitan.fuente
DBCC CHECKDB es vital para que las bases de datos de SQL Server estén 100% seguras de que no hay corrupción. Sin embargo, debido a que las bases de datos crecen en tamaño, es muy difícil encontrar una ventana de mantenimiento cuando afirmas que funciona 24x7. A lo largo de los años, el equipo de SQL Server ha implementado varios mecanismos que detectarán las formas más comunes de corrupción especialmente relacionadas con la corrupción física causada por el hardware.
SQL Server 2005 y versiones posteriores tienen PAGE_VERIFY = CHECKSUM que puede ayudarlo a detectar de manera proactiva la corrupción física en las páginas de la base de datos, lo que agrega una suma de verificación a cada página a medida que se escribe en el sistema de E / S y valida la suma de verificación a medida que se lee desde el disco.
Además, la copia de seguridad (completa o diferencial) con CHECKSUM garantizará detectar cualquier daño de E / S causado por el hardware.
Por lo tanto, desde el lado del hardware de la corrupción, SQL Server hace un buen trabajo al detectarlo e informarlo. (Asegúrese de establecer alertas importantes relacionadas con la corrupción también).
Dicho esto, sigue siendo corrupción lógica , errores inducidos por el garabateador , donde las páginas en memoria están dañadas por código de terceros que se ejecuta dentro del proceso de SQL Server o por controladores u otro software con privilegios suficientes que se ejecutan en modo kernel de Windows y / o SQL Server Los errores , etc. son indetectables utilizando los métodos anteriores y, por lo tanto, CHECKDB aparece en la imagen.
DBCC CHECKDB realiza verificaciones más exhaustivas que incluyen la verificación de encabezados de página para detectar posibles daños que no son detectables por ningún otro medio.
En lugar de reinventar la rueda, le recomiendo que eche un vistazo a la solución de comprobación de integridad del servidor SQL de Ola
Ejecución eficiente de DBCC CHECKDB:
Solo necesita ser creativo cuando tiene poco espacio de mantenimiento con grandes bases de datos o una gran cantidad de bases de datos para ejecutar CHECKDB.
Después de asistir a la capacitación SQLSkills, lo que he implementado en mi entorno es:
DBCC CHECKTABLE
junto con el corredorDBCC CHECKALLOC
yDBCC CHECKCATALOG
DBCC CHECKTABLE
,DBCC CHECKALLOC
yDBCC CHECKCATALOG
. Para que pueda tener una idea de cuánto tiempo tarda generalmente en ejecutarse sus cheques.NOINDEX
opción ya que acelerará la operación ya que no verifica los índices no agrupados en las tablas de usuario. Esto tiene cierta ventaja, ya que no es tan importante como la corrupción de datos, ya que no se pierden datos y puede soltar y volver a crear el índice si es necesario.Obviamente, la edición Enterprise puede aprovechar la ejecución paralela de las sentencias DBCC, pero tenga en cuenta la configuración MAXDOP, ya que podría acabar con toda su CPU. Esto puede ser difícilmente limitado por el gobernador de recursos.
Nota: Si tiene una columna SPARSE, su CHECKDB estará muy lento como se describe aquí .
Finalmente, es cómo prevenir la corrupción de la base de datos utilizando todo el conjunto de herramientas disponibles + su fe en el sistema de hardware de su servidor de base de datos y lo más importante el valor de sus datos.
Algunas excelentes referencias:
fuente