03. Manteniendo integridad en base de datos
En un mundo perfecto siempre que guardamos en disco se escribe correctamente, se lee correctamente y nunca exiten problemas... "Desafortunadamente", vivimos en un mundo imperfecto, al igual que nuestro querido SQL Server, y aunque raramente ocurre los datos nuestras db pueden volverse corruptas debido a fallas en el disco.
Una página de datos en SQL Server contiene 8KB, pero SQL, la divide en 16 bloques de 512 bytes. Si SQL comienza a escribir un bloque y se encuentra con un problema (durante la operación), solo una porción de los mismos querán escritos, produciendo lo que se denomina un "torn page".
Como se vio anteriormente SQL Server cuenta con la opción PAGE_VERIFY la cual puede ser seteada como TORN_PAGE_DETECTION o CHECKSUM, aunque "TORN_PAGE_DETECTION" existe por compatibilidad (esta NO debe utilizarce).
Con lo cual solo nos queda CHECKSUM, cuando habilitamos dicha opción, SQL calcula un checksum antes de escribir. cada vez que la página es leída desde disco un checksum es recalculado y comparado con el escrito en la página. Si el checksum no coincide la página se a corronpido, nos aparece un error, la operación es abortada, y se crea una entrada en la tabla suspect_pages en la db msdb.
--- SIEMPRE DEBE ESTAR ACTIVA EN ENTORNOS PRODUCTIVOS ---
Ahora bien, existe una alternativa a esperar a que al usuario se salte un error en pantalla y ocurra todo lo anteriormente descripto y la misma es forzar a un control de páginas, esto lo podemos hacer con el siguiente comando:
DBCC CHECKDB ( 'TK432');
En realidad el comando tiene muchas opciones más, si les interesa... book online. Lo importante es saber lo siguiente. Si se encuentra un error y el mismo pertenece a un índice, bastará con borrarlo y volver a crearlo. Si el error es de datos hay que buscar el último backup y restaurar. Por último tener en cuenta que si la db en cuestión esta participando de un mirroring, SQL intentará reemplazar dicha página con una copia que se encuentre sana, esta acción la podemos ver en la vista sys.dm_db_mirroring_auto_page_repair.
Cuano ejecutamos este comando, se realizan las siguientes acciones:
- Controla la asignación de páginas de la db
- Controla la integridad estructural de todas las tablas y vistas indexadas
- Calcula un nuevo checksum para cada página de datos e índices y los compara con el almacenado
- Valida el contenido de cada vista indexada
- DBCC CHECKALLOCK
- DBCC CHECKCATALOG
- DBCC CHECKTABLE

Comentarios recientes