Published on

July 3, 2019

Explorando los trabajos elásticos de Azure en SQL Server

Los trabajos elásticos de Azure proporcionan funcionalidad similar en Azure como el Agente de SQL Server para bases de datos de SQL Server en las instalaciones. Sin embargo, uno de los desafíos con los trabajos elásticos de Azure es la falta de herramientas gráficas para administrarlos. La mayoría de las operaciones con estos trabajos deben realizarse utilizando T-SQL o PowerShell.

Para implementar un agente de trabajos elásticos, necesitará una base de datos vacía con al menos el nivel S0. Esta base de datos contendrá todos los metadatos del trabajo. Es importante tener en cuenta que esta función está actualmente en modo de vista previa, por lo que deberá aceptar los términos de vista previa.

Descripción general de los trabajos elásticos de Azure

Hay cuatro elementos importantes necesarios para usar los trabajos elásticos de Azure: trabajos, pasos, grupos de destino y credenciales.

La entidad principal es un trabajo, que puede consistir en uno o varios pasos de trabajo. Los atributos de un trabajo incluyen el nombre del trabajo, la descripción, el estado (habilitado o deshabilitado) y los atributos de tiempo del programador.

Un destino es una colección de servidores de bases de datos de Azure o grupos elásticos. Puede excluir bases de datos particulares de un destino si es necesario.

Una credencial es una cuenta y contraseña almacenadas en la base de datos del agente de trabajos elásticos, que se utilizará para conectarse a un destino.

Un paso de trabajo es el código que se ejecuta en un destino. Combina un destino, una credencial y un trabajo, y define el código que se ejecutará en un destino utilizando una credencial especificada según el programador definido por el trabajo. Un paso de trabajo también puede registrar los resultados de su ejecución en una tabla de base de datos.

Creación de una credencial

Crear una credencial es la parte más fácil de implementar trabajos elásticos de Azure. Puede crear una credencial utilizando el siguiente código T-SQL:

CREATE DATABASE SCOPED CREDENTIAL elastic_jobs 
WITH IDENTITY = 'CuentaAdmin',
SECRET = 'MiSuperContraseñaAdminSecreta';

Cuando crea una credencial, debe proporcionar un nombre de credencial, un nombre de cuenta remota (nombre de inicio de sesión en el lado remoto) y su contraseña. La credencial se almacenará de forma segura en la base de datos de trabajos elásticos de Azure y los trabajos podrán ejecutar código de forma remota.

Creación de un destino

Un destino puede ser un grupo elástico, un servidor SQL o una base de datos de Azure. Los trabajos operan con un grupo de destino, no con un destino individual. Por lo tanto, primero deberá crear un grupo de destino.

Aquí hay un ejemplo de creación de un grupo de destino:

EXEC jobs.sp_add_target_group 'MiGrupoDestino';

Una vez que se crea un grupo de destino, puede agregar miembros del grupo utilizando el procedimiento almacenado correspondiente. Por ejemplo, para agregar un grupo elástico de SQL como destino:

EXEC jobs.sp_add_target_group_member
'MiGrupoDestino',
@target_type = 'SqlElasticPool',
@refresh_credential_name='elastic_jobs',
@server_name='MiServidor.database.windows.net',
@elastic_pool_name='MiGrupoElastico';

También puede agregar un servidor de bases de datos o una base de datos individual como destino:

EXEC jobs.sp_add_target_group_member
'MiGrupoDestino',
@target_type = 'SqlServer',
@refresh_credential_name='elastic_jobs',
@server_name='MiNombreServidor.database.windows.net';

EXEC [jobs].sp_add_target_group_member
@target_group_name = N'MiGrupoDestino',
@target_type = N'SqlDatabase',
@server_name = N'MiNombreServidor.database.windows.net',
@database_name =N'MiNombreBaseDatos';

Es posible combinar diferentes destinos en un grupo. Incluso puede crear un servidor de destino pero excluir algunas bases de datos de ese servidor:

EXEC [jobs].sp_add_target_group_member
@target_group_name = N'MiGrupoDestino',
@membership_type = N'Exclude',
@target_type = N'SqlDatabase',
@server_name = N'MiNombreServidor.database.windows.net',
@database_name =N'master';

Para ver todos los grupos de destino existentes y sus miembros, puede utilizar el siguiente script:

SELECT g.target_group_name, gm.membership_type, gm.target_type, gm.server_name, gm.database_name, gm.elastic_pool_name
FROM [jobs].target_groups g
LEFT OUTER JOIN [jobs].target_group_members gm
ON g.target_group_id = gm.target_group_id;

Creación de un trabajo

Para crear un trabajo, puede utilizar el siguiente código T-SQL como ejemplo:

DECLARE @JobName NVARCHAR(128) = N'Mi trabajo diario';
DECLARE @JobDescription NVARCHAR(512) = N'Este trabajo se ejecutará diariamente a partir de las 3AM';
DECLARE @Enabled BIT = 1;
DECLARE @ScheduleIntercalType NVARCHAR(50) = N'Days';
DECLARE @ScheduleIntervalCount INT = 1;
DECLARE @ScheduleStart DATETIME2 = N'20190101 3:00';

EXEC jobs.sp_add_job @job_name = @JobName,
@description = @JobDescription,
@enabled = @Enabled,
@schedule_interval_type = @ScheduleIntercalType,
@schedule_interval_count = @ScheduleIntervalCount,
@schedule_start_time = @ScheduleStart;

También deberá crear uno o varios pasos de trabajo para cada trabajo. Un paso de trabajo contiene el código que se ejecutará en un grupo de destino. Por ejemplo, el siguiente paso de trabajo ejecutará sp_updatestats en las bases de datos del grupo de destino ‘MiGrupoDestino’ cuando se ejecute el trabajo ‘Mi trabajo diario’:

DECLARE @JobName NVARCHAR(128) = N'Mi trabajo diario';
DECLARE @JobStepName NVARCHAR(128) = N'Actualizar estadísticas';
DECLARE @Command NVARCHAR(MAX) = N'exec sp_updatestats;';
DECLARE @CredentialName NVARCHAR(128) = N'elastic_jobs';
DECLARE @TargetGroupName NVARCHAR(128) = N'MiGrupoDestino';
DECLARE @retryAttempts INT = 0;

EXEC jobs.sp_add_jobstep @job_name = @JobName,
@step_name = @JobStepName,
@command = @Command,
@credential_name = @CredentialName,
@target_group_name = @TargetGroupName,
@retry_attempts = @retryAttempts;

El paso de trabajo utilizará la credencial ‘elastic_jobs’ para conectarse a las bases de datos de destino, y no volverá a intentar la ejecución de sp_updatestats si la primera ejecución falla.

Programación de un trabajo y monitoreo

Puede iniciar un trabajo manualmente utilizando el siguiente código T-SQL:

EXEC jobs.sp_start_job @job_name = N'Mi trabajo diario';

Para detener un trabajo, necesitará tener un job_execution_id, que puede obtener utilizando la siguiente consulta:

SELECT job_execution_id, job_name, step_name, lifecycle, start_time, target_server_name, target_database_name
FROM jobs.job_executions
WHERE is_active = 1
ORDER BY start_time DESC;

La misma consulta se puede utilizar para monitorear todos los trabajos que se están ejecutando actualmente. Para detener un trabajo, utilice el siguiente script:

EXEC jobs.sp_stop_job '0BBDE512-263B-4EC0-B6B3-83C5A169FA96';

Reemplace ‘0BBDE512-263B-4EC0-B6B3-83C5A169FA96’ con su job_execution_id.

Para monitorear las fallas de los trabajos, puede utilizar el siguiente código T-SQL:

SELECT job_execution_id, job_name, step_name, last_message, start_time, end_time, target_server_name, target_database_name
FROM jobs.job_executions
WHERE lifecycle = 'Failed'
ORDER BY start_time DESC;

El portal de Azure también proporciona funcionalidad básica de monitoreo de trabajos elásticos.

Eliminación de trabajos y grupos de destino

Para eliminar un trabajo con todos sus pasos, puede utilizar el procedimiento almacenado [jobs].sp_delete_job. Por ejemplo:

EXEC [jobs].sp_delete_job @job_name = 'Mi trabajo diario';

Para eliminar un grupo de destino existente con todos sus miembros, puede utilizar el procedimiento almacenado [jobs].sp_delete_target_group. Por ejemplo:

EXEC [jobs].sp_delete_target_group @target_group_name = 'MiGrupoDestino';

Limpieza del historial de trabajos

Puede eliminar manualmente el historial de un trabajo en particular utilizando el procedimiento almacenado [jobs].sp_purge_jobhistory. Sin embargo, los trabajos elásticos de Azure eliminan automáticamente todos los registros de historial anteriores a 45 días, por lo que generalmente no se requiere una limpieza manual.

Conclusión

Los trabajos elásticos de Azure en Azure son un reemplazo para el Agente de SQL Server en las instalaciones, pero actualmente carecen de herramientas gráficas para administrar estos trabajos. Esperemos que esto se solucione en el futuro. Mientras tanto, puede utilizar T-SQL o PowerShell para trabajar con esta función.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.