Uso do SQL Server Agent - Amazon Relational Database Service

Uso do SQL Server Agent

Com o Amazon RDS, você pode usar o SQL Server Agent em uma instância de banco de dados que executa o Microsoft SQL Server Enterprise Edition, Standard Edition ou Web Edition. SQL Server Agent é um serviço do Microsoft Windows que executa tarefas administrativas programadas, chamadas de trabalhos. É possível usar SQL Server Agent para executar trabalhos T-SQL para recompilar índices, executar verificações de corrupção e agregar dados em uma instância de banco de dados SQL Server.

Ao criar uma instância de banco de dados do SQL Server, o nome de usuário principal é registrado na função SQLAgentUserRole.

SQL Server Agent pode executar um trabalho agendado em resposta a um evento específico ou sob demanda. Para ter mais informações, consulte a página SQL Server Agent na documentação do SQL Server.

nota

Evite programar trabalhos para execução durante as janelas de manutenção e backup da sua instância de banco de dados. Os processos de manutenção e backup que são iniciados pela AWS podem interromper um trabalho ou fazer com que ele seja cancelado.

Em implantações multi-AZ, os trabalhos do SQL Server Agent são replicados do host primário para o host secundário quando o recurso de replicação de trabalhos é ativado. Para obter mais informações, consulte Ativar a replicação de trabalhos do SQL Server Agent.

As implantações multi-AZ têm um limite de cem trabalhos do SQL Server Agent. Se um limite mais alto for necessário, solicite um aumento de cota entrando em contato com o AWS Support. Abra a página do AWS Support Center, faça login, se necessário, e escolha Create case (Criar caso). Escolha Service limit increase (Aumento de limite do serviço). Preencha e envie o formulário.

Para visualizar o histórico de um trabalho específico do SQL Server Agent no SQL Server Management Studio (SSMS), abra o Object Explorer, clique com o botão direito no trabalho e, em seguida, escolha View History (Visualizar histórico).

Como o SQL Server Agent está sendo executado em um host gerenciado em uma instância de banco de dados, algumas ações não são aceitas:

  • Não é possível executar trabalhos de replicação e de scripts da linha de comando usando o ActiveX, o shell de comando do Windows ou o Windows PowerShell.

  • Não é possível iniciar, interromper ou reiniciar manualmente o SQL Server Agent.

  • As notificações de e-mail por meio do SQL Server Agent não estão disponíveis a partir de uma instância de banco de dados.

  • Alertas e operadores do SQL Server Agent não são aceitos.

  • O uso do SQL Server Agent para criar backups não é aceito. Use o Amazon RDS para fazer backup de sua instância de banco de dados.

Ativar a replicação de trabalhos do SQL Server Agent

Você pode ativar a replicação de trabalhos do SQL Server Agent usando o seguinte procedimento armazenado:

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

É possível executar o procedimento armazenado em todas as versões do SQL Server compatíveis com o Amazon RDS para SQL Server. Os trabalhos nas seguintes categorias são replicados:

  • [Sem categoria (local)]

  • [Sem categoria (vários servidores)]

  • [Sem categoria]

  • Coletor de dados

  • Database Engine Tuning Advisor

  • Manutenção do banco de dados

  • Texto completo

Somente trabalhos que usam etapas de trabalho T-SQL são replicados. Trabalhos com tipos de etapas, como o SQL Server Integration Services (SSIS), o SQL Server Reporting Services (SSRS), a Replicação e o PowerShell, não são replicados. Os trabalhos que usam o Database Mail e objetos no nível do servidor não são replicados.

Importante

O host principal é a fonte da verdade para replicação. Antes de ativar a replicação do trabalho, verifique se os trabalhos do SQL Server Agent estão no host primário. Se você não fizer isso, poderá ocorrer a exclusão de seus trabalhos do SQL Server Agent se você ativar o recurso quando os trabalhos mais recentes estiverem no host secundário.

Você pode usar a função a seguir para confirmar se a replicação está ativada.

SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();

A consulta T-SQL retornará o seguinte se os trabalhos do SQL Server Agent estiverem sendo replicados. Se eles não estiverem sendo replicados, não retornará nada paraobject_class.


                    Os trabalhos do SQL Server Agent estão sendo replicados

Você pode usar a função a seguir para descobrir a última vez que os objetos foram sincronizados no horário UTC.

SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();

Por exemplo, suponha que você modifique um trabalho do SQL Server Agent às 01:00. Você espera que o tempo de sincronização mais recente seja após a 01:00, indicando que a sincronização ocorreu.

Após a sincronização, espera-se que os valores retornados para date_created e date_modified no nó secundário coincidam.


                    A última vez que os objetos do servidor foram sincronizados foi às 01:21:23.

Se você também estiver usando a replicação tempdb, poderá habilitar a replicação tanto para os trabalhos do SQL Agent quanto para a configuração tempdb fornecendo-os no parâmetro @object_type:

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

Para ter mais informações sobre a replicação tempdb, consulte Configuração TempDB para implantações multi-AZ.

Adicionar um usuário à função SQLAgentUser

Para permitir que um usuário ou login adicional use o SQL Server Agent, faça login com o usuário principal e realize as seguintes etapas:

  1. Crie outro login no nível do servidor usando o comando CREATE LOGIN.

  2. Crie um usuário no msdb usando o comando CREATE USER e, então, vincule esse usuário ao login criado na etapa anterior.

  3. Adicione o usuário ao SQLAgentUserRole usando o procedimento armazenado pelo sistema sp_addrolemember.

Por exemplo, digamos que o nome de usuário principal seja admin e que você deseja conceder acesso ao SQL Server Agent para um usuário chamado theirname com uma senha theirpassword. Nesse caso, é possível ignorar o procedimento a seguir.

Para adicionar um usuário à função SQLAgentUser
  1. Faça login como usuário mestre.

  2. Execute os seguintes comandos:

    --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];

Excluir um trabalho do SQL Server Agent

Você usa o procedimento armazenado sp_delete_job para excluir trabalhos do SQL Server Agent em Amazon RDS para Microsoft SQL Server.

Você não pode usar SSMS para excluir trabalhos do SQL Server Agent. Quando você tenta fazer isso, recebe uma mensagem de erro semelhante à seguinte:

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

Como um serviço gerenciado, o RDS é restrito na execução de procedimentos que acessam o Registro do Windows. Quando você usa o SSMS, ele tenta executar um processo (xp_regread) para o qual o RDS não está autorizado.

nota

No RDS para SQL Server, somente membros da função sysadmin podem atualizar ou excluir trabalhos pertencentes a um login diferente.

Para excluir um trabalho do SQL Server Agent
  • Execute a seguinte instrução T-SQL:

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