En SQL Server, la correcta implementación de tareas de mantenimiento ha sido siempre esencial para el funcionamiento óptimo de las bases de datos. Con el traslado a la nube, la administración de bases de datos se ha simplificado y automatizado, lo que implica diversas ventajas. Sin embargo, la omisión de estas tareas afecta negativamente al rendimiento, repercutiendo en las aplicaciones y el negocio. Además, las bases de datos no optimizadas en la nube implican mayores costos para obtener mejor rendimiento.
Scripts de Ola Hallengren en SQL
Los scripts de Ola Hallengren son ampliamente reconocidos en nuestra comunidad de administradores de bases de datos SQL Server. Estos scripts automatizan tareas críticas como copias de seguridad, chequeos de integridad, mantenimiento de índices y actualización de estadísticas. Con esta solución, podemos personalizar nuestras acciones según las necesidades de nuestro entorno, garantizando así la integridad y el óptimo rendimiento de nuestras bases de datos.
Si dispones de un recurso SQL Server en Azure con varias bases de datos desplegadas y deseas utilizar tareas de mantenimiento para optimizar su funcionamiento, te invito a hacerlo empleando las herramientas que ofrece el propio portal de Azure. Es esencial permitir que los servicios y recursos de Azure accedan al servidor SQL Server. Para lograrlo, dirígete al portal de Azure, selecciona el servidor SQL Server correspondiente y marca la opción mencionada en la sección de redes. De esta manera, todos los recursos que crees podrán comunicarse con las bases de datos para realizar las tareas pertinentes.
Una vez cumplido este requisito, será necesario desplegar en el mismo grupo de recursos una cuenta de almacenamiento, una cuenta de automatización y un almacén de claves. Es importante asignar nombres intuitivos a estos recursos, respetando la nomenclatura recomendada por Microsoft, para que puedas trabajar con ellos de manera más sencilla.
En la cuenta de almacenamiento, crea un fileshare y añade manualmente un script de PowerShell similar al que se muestra a continuación. Como podrás observar, el script hace referencia a un almacén de claves desde donde se recuperarán el usuario y la contraseña del servidor SQL Server. Con estas credenciales, el script se conectará a las bases de datos especificadas e implementará las tareas de mantenimiento de Ola Hallengren, las cuales habrán sido descargadas y guardadas previamente en un directorio. Cuando completes los parámetros, podrás ejecutar este script a través de Azure CLI utilizando el fileshare que has creado.
#AzureDatabases
# Nombre del Key Vault
$vault_name = "summitkeyvaultverne"
# Nombre del secreto que contiene el nombre de usuario y contraseña para conectarse al servidor SQL
$user_secret_name = "summitkeyvaultverne-username"
$password_secret_name = "summitkeyvaultverne-password"
# Nombre del Servidor y BBDD
$server_name = "summitsqlserver.database.windows.net"
$database_names = @("summitsqldatabase")
# Crea la carpeta para los scripts si no existe
New-Item -ItemType Directory -Force -Path "ola-scripts"
# Descarga los scripts de Ola Hallengren y los reemplaza si ya existen
Invoke-WebRequest -Uri "https://ola.hallengren.com/scripts/CommandLog.sql" -OutFile "ola-scripts/CommandLog.sql"
Invoke-WebRequest -Uri "https://ola.hallengren.com/scripts/CommandExecute.sql" -OutFile "ola-scripts/CommandExecute.sql"
Invoke-WebRequest -Uri "https://ola.hallengren.com/scripts/IndexOptimize.sql" -OutFile "ola-scripts/IndexOptimize.sql"
Invoke-WebRequest -Uri "https://ola.hallengren.com/scripts/DatabaseIntegrityCheck.sql" -OutFile "ola-scripts/DatabaseIntegrityCheck.sql"
# Recuperar los secretos del Key Vault
$user_name = (az keyvault secret show --name $user_secret_name --vault-name $vault_name --query value -o tsv)
$password = (az keyvault secret show --name $password_secret_name --vault-name $vault_name --query value -o tsv)
# Conecta al servidor SQL y ejecuta los scripts en cada base de datos
foreach ($database_name in $database_names) {
# Ejecuta el script CommandLog.sql
sqlcmd -S $server_name -U $user_name -P $password -d $database_name -i "ola-scripts/CommandLog.sql"
# Ejecuta el script CommandExecute.sql
sqlcmd -S $server_name -U $user_name -P $password -d $database_name -i "ola-scripts/CommandExecute.sql"
# Ejecuta el script IndexOptimize.sql
sqlcmd -S $server_name -U $user_name -P $password -d $database_name -i "ola-scripts/IndexOptimize.sql"
# Ejecuta el script DatabaseIntegrityCheck.sql
sqlcmd -S $server_name -U $user_name -P $password -d $database_name -i "ola-scripts/DatabaseIntegrityCheck.sql"
}
Desde Verne Tech podemos ayudarte con los Scripts de Mantenimiento de Ola Hallengren.
Habla con uno de nuestros técnicos y cuéntanos las necesidades de tu empresa.
Automatizar tareas de mantenimiento en SQL Server
Una vez implementadas las tareas de mantenimiento en tus bases de datos, el siguiente paso será automatizar su ejecución. Para ello, utiliza la cuenta de automatización. Dado que emplearemos comandos escritos en Transact-SQL, importa el módulo “SQL Server” previamente. Luego, procede a crear runbooks para llevar a cabo la ejecución de las tareas de mantenimiento.
Los runbooks que necesitarás serán de tipo PowerShell y emplearán la versión 5.1 para una mayor compatibilidad. Estos runbooks se conectarán a la base de datos utilizando las credenciales nativas de SQL Server que les asignemos. Puedes proteger estas credenciales creando variables en la cuenta de automatización y llamándolas desde el código de los runbooks.
DatabaseIntegrityCheck
$myCredential = GET-AutomationPSCredential -Name 'summitcredentials'
$userName = $myCredential.UserName $securePassword = $myCredential.Password
$password = $myCredential.GetNetworkCredential().Password Invoke-Sqlcmd -
ServerInstance "summitsqlserver.database.windows.net" -DATABASE
"summitsqldatabase" -Username $userName -Password $password -Query "EXECUTE
dbo.DatabaseIntegrityCheck @Databases = 'summitsqldatabase', @LogToTable =
'Y', @CheckCommands = 'CHECKDB'"
IndexOptimize
$myCredential = Get-AutomationPSCredential -Name 'summitcredentials'
$userName = $myCredential.UserName
$securePassword = $myCredential.Password
$password = $myCredential.GetNetworkCredential().Password
Invoke-Sqlcmd -ServerInstance "summitsqlserver.database.windows.net" -
Database "summitsqldatabase" -Username $userName -Password $password -Query
"EXECUTE dbo.IndexOptimize @Databases = 'summitsqldatabase', @LogToTable =
'Y', @MinNumberOfPages = 5, @FragmentationLow = NULL, @FragmentationMedium =
'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5, @FragmentationLevel2 = 30"
Es importante que, una vez creados los runbooks, los ejecutes manualmente para verificar que no se produce ningún error. Si todo ha ido bien, consulta la tabla CommandLog creada en la base de datos master para asegurarte de que la tarea de mantenimiento se ha ejecutado correctamente. Una vez confirmado su correcto funcionamiento, podrás programar las ejecuciones en la cuenta de automatización y asignarlas a los runbooks según tus necesidades.
Conclusiones
Has adquirido conocimientos fundamentales sobre el despliegue y automatización de tareas de mantenimiento para tus bases de datos en Azure. Has aplicado técnicas de optimización de índices y chequeos de integridad, mejorando el rendimiento y la estabilidad de las bases de datos.
Aunque no has implementado las copias de seguridad con los scripts de Ola Hallengren, en Azure estas tareas están automatizadas de forma nativa, garantizando una protección adecuada de los datos y una recuperación fiable.
Ahora cuentas con una solución de mantenimiento fácil de implementar y altamente flexible, lo que te permite aprovechar al máximo los recursos en la nube, optimizando procesos y reduciendo costes. Además, puedes integrar otros recursos de Azure para construir una solución de mantenimiento a mayor escala en el futuro. Con imaginación y dedicación, seguirás mejorando tu eficiencia operativa en Azure.