Uso del Agente SQL Server - Amazon Relational Database Service

Uso del Agente SQL Server

Con Amazon RDS, puede usar el Agente SQL Server en una instancia de base de datos en la que se ejecuta Microsoft SQL Server Enterprise Edition, Standard Edition o Web Edition. El Agente SQL Server es un servicio de Microsoft Windows que ejecuta tareas administrativas programadas que se denominan trabajos. Puede usar el Agente SQL Server para ejecutar trabajos de T-SQL que reconstruyan índices, ejecuten comprobaciones de daños y agrupen datos en una instancia de base de datos de SQL Server.

Cuando se crea una instancia de base de datos de SQL Server, el usuario maestro tiene asignado el rol SQLAgentUserRole.

El Agente SQL Server puede ejecutar un trabajo según un calendario, en respuesta a un evento concreto o bajo demanda. Para obtener más información, consulte SQL Server Agent en la documentación de Microsoft.

nota

Evite programar trabajos para que se ejecuten durante los periodos de mantenimiento y de copia de seguridad de la instancia de base de datos. Los procesos de mantenimiento y copia de seguridad lanzados por AWS podrían interrumpir el trabajo o hacer que se cancele.

En las implementaciones Multi-AZ, los trabajos de SQL Server Agent se replican desde el host principal al host secundario cuando la función de replicación de trabajos está activada. Para obtener más información, consulte Activación de la replicación de trabajos del agente de SQL Server.

Las implementaciones multi-AZ tienen un límite de 10 000 trabajos del Agente SQL Server. Si se necesitan límites más altos, solicite un aumento; para ello, contáctese con AWS Support. Abra la página del centro de AWS Support, inicie sesión si es preciso y, luego, elija Create Case (Crear caso). Seleccione Service limit increase (Aumento del límite de servicio). Rellene y envíe el formulario.

Para ver el historial de un trabajo individual del Agente de SQL Server en SQL Server Management Studio (SSMS), abra el explorador de objetos, haga clic con el botón derecho en el trabajo y, a continuación, elija View History (Ver historial).

Como el Agente SQL Server se ejecuta en un anfitrión administrado de una instancia de base de datos, algunas opciones no son compatibles:

  • No se admite la ejecución de trabajos de reproducción y de scripts de línea de comando por medio de ActiveX, el shell de comandos de Windows o Windows PowerShell.

  • No puede iniciar, detener ni reiniciar el Agente de SQL Server de forma manual.

  • Las notificaciones de email a través del Agente de SQL Server no están disponibles desde una instancia de base de datos.

  • No se admiten las alertas ni los operadores del Agente de SQL Server.

  • No se admite el uso del Agente de SQL Server para crear copias de seguridad. Utilice Amazon RDS para realizar una copia de seguridad de la instancia de base de datos.

Activación de la replicación de trabajos del agente de SQL Server

Puede activar la replicación de trabajos del agente de SQL Server mediante el siguiente procedimiento almacenado:

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob';

Puede ejecutar el procedimiento almacenado en todas las versiones de SQL Server compatibles con Amazon RDS for SQL Server. Los trabajos de las siguientes categorías se replican:

  • [Sin categoría (local)]

  • [Sin categoría (multiservidor)]

  • [Sin categoría]

  • Recopilador de datos

  • Asesor de ajuste del motor de base de datos

  • Mantenimiento de bases de datos

  • Texto completo

Solo se replican los trabajos que utilizan pasos de trabajo de T-SQL. Los trabajos con tipos de pasos como SQL Server Integration Services (SSIS), SQL Server Reporting Services (SSRS), Replication y PowerShell no se replican. Los trabajos que utilizan Database Mail y objetos de nivel de servidor no se replican.

importante

El host principal es el origen de información para la replicación. Antes de activar la replicación de trabajos, asegúrese de que sus trabajos de SQL Server Agent están en el principal. Si no lo hace, podría eliminar sus trabajos de SQL Server Agent si activa la característica cuando hay trabajos más nuevos en el host secundario.

Puede utilizar la siguiente función para confirmar si la replicación está activada.

SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();

La consulta T-SQL devuelve lo siguiente si los trabajos del agente de SQL Server se están replicando. Si no se están replicando, no devuelve nada para object_class.


                    Los trabajos del agente de SQL Server se están replicando

Puede utilizar la siguiente función para saber cuál fue la última vez que se sincronizaron los objetos con la configuración de hora UTC.

SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();

Por ejemplo, supongamos que modifica un trabajo de agente de SQL Server a las 01:00. Se espera que la hora de sincronización más reciente sea posterior a las 01:00, lo que indica que se ha producido la sincronización.

Tras la sincronización, se espera que los valores que se devuelven para date_created y date_modified en el nodo secundario coincidan.


                    La última vez que se sincronizaron los objetos del servidor fue a las 01:21:23

Si también utiliza la replicación con tempdb, puede habilitar la replicación tanto para los trabajos del Agente SQL como para la configuración de tempdb proporcionándolos en el parámetro @object_type:

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';

Para obtener información sobre la replicación con tempdb, consulte Configuración de TempDB para implementaciones multi-AZ.

Agregar un usuario al rol SQLAgentUser

Para que otro inicio de sesión o usuario pueda utilizar el agente de SQL Server, debe iniciar sesión como usuario maestro y hacer lo siguiente:

  1. Cree otro inicio de sesión de nivel de servidor con el comando CREATE LOGIN.

  2. Cree un usuario en msdb con el comando CREATE USER y, a continuación, vincule este usuario al inicio de sesión que creó en el paso anterior.

  3. Agregue el usuario a SQLAgentUserRole con el procedimiento almacenado en el sistema sp_addrolemember.

Por ejemplo, suponga que su nombre de usuario principal es admin y que desea dar acceso al agente de SQL Server a un usuario llamado theirname con la contraseña theirpassword. En ese caso, puede usar el siguiente procedimiento.

Para agregar un usuario al rol SQLAgentUser
  1. Inicie sesión como usuario maestro.

  2. Ejecute los comandos siguientes:

    --Initially set context to master database USE [master]; GO --Create a server-level login named theirname with password theirpassword CREATE LOGIN [theirname] WITH PASSWORD = 'theirpassword'; GO --Set context to msdb database USE [msdb]; GO --Create a database user named theirname and link it to server-level login theirname CREATE USER [theirname] FOR LOGIN [theirname]; GO --Added database user theirname in msdb to SQLAgentUserRole in msdb EXEC sp_addrolemember [SQLAgentUserRole], [theirname];

Eliminación de un trabajo del Agente de SQL Server

Utilice el procedimiento almacenado sp_delete_job para eliminar trabajos del Agente de SQL Server en Amazon RDS para Microsoft SQL Server.

No puede utilizar SSMS para eliminar trabajos del Agente de SQL Server. Si intenta hacerlo, obtendrá un mensaje de error similar al siguiente:

The EXECUTE permission was denied on the object 'xp_regread', database 'mssqlsystemresource', schema 'sys'.

Como servicio administrado, RDS tiene la restricción de ejecutar procedimientos que obtienen acceso al registro de Windows. Cuando utiliza SSMS, este intenta ejecutar un proceso (xp_regread) para el que RDS no está autorizado.

nota

En RDS para SQL Server, solo los miembros del rol de administrador del sistema pueden actualizar o eliminar trabajos que pertenezcan a un inicio de sesión diferente.

Para eliminar un trabajo del Agente de SQL Server
  • Ejecute la siguiente instrucción T-SQL:

    EXEC msdb..sp_delete_job @job_name = 'job_name';