Hay dos opciones diferentes en SQL Server moderno para la verificación de página; siendo detección de página rota y suma de verificación . Ninguno es, por supuesto, una opción.
Creo que Checksum se introdujo en SQL Server 2005 y que actualizar o restaurar una base de datos de una versión anterior mantendría su método de verificación de página anterior. es decir, no hubo actualización implícita.
El problema involucrado es que tenemos una base de datos de producción que entró en producción usando SQL Server 2000 y desde entonces se mudó a un servidor SQL Server 2008 R2. La verificación de página está establecida en Ninguno cuando esperaba que fuera Detección de página rota . Volviendo a esta cantidad de tiempo, parece que pensamos que la base de datos se desarrolló originalmente en SQL Server 7.0 y luego migró a SQL Server 2000 y esto puede explicar el resultado observado.
Me preguntaba cuándo Torn Page Detection and Checksum se convirtió en una característica de SQL Server, y cómo se comportaron cuando migraron o actualizaron a versiones más nuevas.
Editar: Resumiendo algunas de las respuestas:
Hay un poco de discrepancia en algunas de las fechas en que Torn Page Detection entró en SQL Server.
Enlace 1: http://support.microsoft.com/kb/230785
Enlace 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx
El primer enlace indica SQL 7.0 y el segundo SQL2000. Tiendo a confiar en la sugerencia de SQL7.0 y ese enlace dos estaba confundido porque estaba desactivado por defecto en SQL7.0 y activado por defecto en SQL2000.
fuente
Respuestas:
En SQL Server 2000, si desea identificar páginas corruptas, la opción de base de datos TORN_PAGE_DETECTION debe establecerse en TRUE.
Pero en SQL 2005 y versiones posteriores, una nueva configuración PAGE_VERIFY reemplazó la antigua TORN_PAGE_DETECTION que permite elegir entre dos tipos diferentes de verificación de página: TORN_PAGE_DETECTION y CHECKSUM.
Ahora viene la pregunta de cuál configurar: TORN_PAGE_DETECTION o CHECKSUM.
TORN_PAGE_DETECTION: escribe un bit por cada 512 bytes en una página, lo que le permite detectar cuándo una página no se escribió correctamente en el disco. El problema es que no le dirá si los datos almacenados en esos 512 bytes son realmente correctos o no debido al hecho de que un par de bytes pueden haberse escrito incorrectamente.
CHECKSUM: calculará una suma de verificación de la página tanto cuando se escribe una página como cuando se lee una página, suponiendo que tenga una suma de verificación.
Referencia: suma de comprobación en SQL2005
Para responder específicamente a sus preguntas:
Sí, CHECKSUM se introdujo en SQL Server 2005 y es el PREDETERMINADO . Cuando actualice de 2000 a 2005, debe cambiar explícitamente la opción de base de datos Verificación de página para usar CHECKSUM.
Si restaura la base de datos ya creada en sql 2005 a otro servidor que ejecuta sql 2005, no tiene que configurarla. Persistirá a lo que haya configurado la opción de verificación de página.
De: http://support.microsoft.com/kb/230785
Por lo tanto, TORN_PAGE_DETECTION ha existido desde SQL Server 7.0. Incluso entonces, el valor predeterminado era que no estaba habilitado (mismo enlace) .
Por lo tanto, si la base de datos se desarrolló contra una instancia 7.0 y se actualizó posteriormente, se habría actualizado con la opción PAGE VERIFY existente de NONE (como señaló @ThomasStringer en su respuesta).
Editar: 24/09/2013 Para mejorar la respuesta:
Refiriéndome a mis notas internas de SQL Server de SQLSkills, descubrí que usando un volcado de página, puede verificar si la detección de bits rotos - TORN_PAGE_DETECTION o CHECKSUM estaba habilitada o no:
m_tornBits : contiene la suma de comprobación de la página o los bits que fueron desplazados por los bits de protección de página desgarrada, dependiendo de qué forma de protección de página esté activada para la base de datos.
Nota : No tengo ninguna versión anterior de servidor sql ejecutándose. A continuación se confirma desde el servidor SQL 2000 y superior . Si tienes un 7.0 o 6.5 corriendo, puedes confirmarlo también :-)
fuente
Echa un vistazo a la referencia de BOL :
Esto dicta que antes de SQL Server 2005
TORN_PAGE_DETECTION
existía la opción para , pero noCHECKSUM
.Y para responder a su segundo punto:
Si, eso es correcto. Debería establecer explícitamente la base de datos para utilizar el
CHECKSUM
método de verificación de página.fuente
Hay tres como usted dijo: TORN_PAGE_DETECTION, CHECKSUM y NONE.
Como se cita en este artículo de MSDN titulado "Administración del búfer": la detección de páginas rasgadas se introdujo en SQL Server 2000. La suma de verificación se introdujo en SQL Server 2005.
Una sinopsis de otras cosas señaladas en este artículo es que el mecanismo de verificación de página se especifica en el momento de creación de la base de datos. Por lo tanto, depende de quién y cómo crearon la base de datos en cuanto a lo que está configurado, también podría controlarse según la base de datos modelo configurada. También es interesante tener en cuenta que si cambia la configuración, no tiene efecto en toda la base de datos, solo cuando la página se escribe a continuación. De acuerdo con Paul Randal, esto solo se hace cuando la página se lee en la memoria, se cambia y luego se vuelve a escribir en el disco; Esa información está aquí .
Cualquier persona que tenga permisos para la instancia de la base de datos puede modificar ese valor. Podría haber persistido a través de actualizaciones como se indica en MSDN aquí :
También podría haberse modificado más adelante porque alguien entendió mal la configuración y estaba disparando en la oscuridad para tratar de resolver un problema.
SQL Server 2000 como se indicó anteriormente.
La configuración anterior se conserva durante la actualización como se indicó anteriormente.
Ahora me gustaría señalar el hecho de que otros enlaces proporcionados por la gente indican que SQL Server 7.0 es cuando la detección de páginas desgarradas estaba disponible. Lo cual, como se indica en esos artículos, es cierto, sin embargo, se ha comprobado muchas veces que la documentación de Microsoft no debe considerarse verdadera en todas las circunstancias. Hay muchos donde están equivocados. Entonces, dicho esto, ¿cómo puedes determinar qué respuesta es aceptable? Todos proporcionamos documentación de Microsoft para respaldar nuestra respuesta.
Además, tenga en cuenta que la detección de páginas desgarradas está en la lista de depreciación a partir de SQL Server 2012, entonces, ¿cuál es la preocupación sobre cómo se estableció en sus bases de datos para empezar? Si lo vi configurado en otra cosa que no sea CHECKSUM, lo cambio inmediatamente y paso a otra tarea más importante. No me preocupa cómo se estableció una mala configuración, es más importante corregirla y luego asegurarme de que aquellos que tienen permisos para cambiarla estén informados de por qué ese elemento de configuración no debe cambiarse a otra cosa. Solo mis $ 0.02
fuente
Como dijeron @Thomas Stringer y @Kin, se introdujo en SQL Server 2005 y creo que funciona en todas las ediciones de SQL Server. Para TempDB, aunque CHECKSUM se introdujo en SQL Server 2008
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx
fuente