Secuencias de comandos por lotes para simplificar el mantenimiento de la base de datos de SQL Server
Además de crear copias de seguridad, hay una variedad de tareas y funciones que SQL Server pone a disposición que pueden mejorar el rendimiento y la confiabilidad de sus bases de datos. Anteriormente le mostramos cómo hacer una copia de seguridad de las bases de datos de SQL Server con un simple script de línea de comandos, de la misma manera estamos proporcionando un script que le permitirá realizar tareas de mantenimiento comunes.
Compactando / Encogiendo una Base de Datos [/ Compact]
Hay varios factores que contribuyen al espacio en disco físico que utiliza una base de datos de SQL Server. Sólo para nombrar unos pocos:
- Con el tiempo, a medida que se agregan, eliminan y actualizan los registros, SQL aumenta y reduce constantemente las tablas, además de generar estructuras de datos temporales para realizar manipulaciones de consulta. Para adaptarse a las necesidades de almacenamiento en disco, SQL Server aumentará el tamaño de la base de datos (generalmente en un 10%) según sea necesario para que el tamaño del archivo de la base de datos no cambie constantemente. Si bien esto es ideal para el rendimiento, puede provocar una desconexión con el espacio de almacenamiento utilizado porque, por ejemplo, si agrega una gran cantidad de registros que hacen que la base de datos crezca y luego elimine estos registros, SQL Server no los reclamará automáticamente. Espacio del disco.
- Si está utilizando el Modo de recuperación completa en sus bases de datos, el archivo de registro transaccional (LDF) puede crecer bastante, especialmente en las bases de datos con un gran volumen de actualizaciones..
Al compactar (o reducir) la base de datos se recuperará el espacio en disco no utilizado. Para bases de datos pequeñas (200 MB o menos), esto generalmente no será mucho, pero para bases de datos grandes (1 GB o más) el espacio reclamado puede ser significativo.
Reindexando una base de datos [/ Reindex]
Al igual que la constante creación, edición y eliminación de archivos puede provocar la fragmentación del disco, la inserción, actualización y eliminación de registros en una base de datos puede llevar a la fragmentación de tablas. Los resultados prácticos son los mismos en que las operaciones de lectura y escritura sufren un impacto en el rendimiento. Si bien no es una analogía perfecta, reindexar las tablas en una base de datos esencialmente las desfragmenta. En algunos casos, esto puede aumentar significativamente la velocidad de recuperación de datos.
Debido a la forma en que funciona SQL Server, las tablas deben reindexarse individualmente. Para las bases de datos con una gran cantidad de tablas, esto puede ser una verdadera molestia en forma manual, pero nuestro script golpea todas las tablas en la base de datos respectiva y reconstruye todos los índices..
Verificando la integridad [/ Verificar]
Para que una base de datos permanezca funcional y produzca resultados precisos, hay numerosos elementos de integridad que deben estar en su lugar. Afortunadamente, los problemas de integridad física y / o lógica no son muy comunes, pero es una buena práctica ejecutar ocasionalmente el proceso de verificación de integridad en sus bases de datos y revisar los resultados..
Cuando el proceso de verificación se ejecuta a través de nuestro script, solo se informan los errores, por lo que no hay noticias son buenas noticias.
Usando el Script
La secuencia de comandos por lotes de SQLMaint es compatible con SQL 2005 y superior y debe ejecutarse en una máquina que tenga instalada la herramienta SQLCMD (instalada como parte de la instalación de SQL Server). Se recomienda que coloque este script en una ubicación establecida en su variable PATH de Windows (es decir, C: Windows) para que pueda llamarlo fácilmente como cualquier otra aplicación desde la línea de comandos..
Para ver la información de ayuda, simplemente ingrese:
SQLMaint /?
Ejemplos
Para ejecutar un compacto y luego verificar en la base de datos "MyDB" usando una conexión de confianza:
SQLMaint MyDB / Compact / Verify
Para ejecutar una reindexación y luego compactar en "MyDB" en la instancia "Especial" con el usuario "sa" con la contraseña "123456":
SQLMaint MyDB /S:.Special / U: sa / P: 123456 / Reindex / Compact
Uso desde dentro de un script de lote
Si bien la secuencia de comandos por lotes de SQLMaint se puede usar como una aplicación desde la línea de comandos, cuando se usa dentro de otra secuencia de comandos por lotes, debe ir precedida por la palabra clave CALL.
Por ejemplo, esta secuencia de comandos ejecuta todas las tareas de mantenimiento en todas las bases de datos que no son del sistema en una instalación predeterminada de SQL Server usando una autenticación confiable:
@ECHO OFF
SETLOCAL EnableExtensions
SET DBList = "% TEMP% DBList.txt"
SqlCmd -E -h-1 -w 300 -Q “SET NoCount ON; SELECCIONE Nombre DESDE master.dbo.sysDatabases DONDE Nombre No EN ('master', 'model', 'msdb', 'tempdb') ”>% DBList%
FOR / F “usebackq tokens = 1” %% i IN (% DBList%) DO (
CALL SQLMaint "%% i" / Compact / Reindex / Verify
ECO +++++++++++
)
IF EXIST% DBList% DEL / F / Q% DBList%
ENDLOCAL
Descargue la secuencia de comandos SQLMaint Batch desde SysadminGeek.com