

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo di SQL Server Agent per Amazon RDS
<a name="Appendix.SQLServer.CommonDBATasks.Agent"></a>

Con Amazon RDS puoi utilizzare SQL Server Agent su un'istanza database che esegue Microsoft SQL Server Enterprise Edition, Standard Edition o Web Edition. SQL Server Agent è un servizio di Microsoft Windows che esegue attività pianificate di amministrazione, dette processi. Puoi utilizzare SQL Server Agent per eseguire processi T-SQL che ricostruiscono indici, eseguono controlli anticorruzione e aggregano i dati in un'istanza database SQL Server.

Quando crei un'istanza database SQL Server, l'utente master è iscritto nel ruolo `SQLAgentUserRole`.

SQL Server Agent può eseguire un processo pianificato, in risposta a un evento specifico, oppure su richiesta. Per ulteriori informazioni, consulta [SQL Server Agent](http://msdn.microsoft.com/en-us/library/ms189237) nella documentazione Microsoft.

**Nota**  
Evita di pianificare i processi da eseguire durante le finestre di manutenzione e backup per l'istanza DB. I processi di manutenzione e backup che vengono avviati da AWS potrebbero interrompere un processo o causarne l'annullamento.  
Nelle distribuzioni Multi-AZ, i processi di SQL Server Agent vengono replicati dall'host principale all'host secondario quando la funzionalità di replica del processo è attivata. Per ulteriori informazioni, consulta [Attivazione della replica di processo SQL Server Agent](#SQLServerAgent.Replicate).  
Le implementazioni multi-AZ hanno un limite di 10.000 processi di SQL Server Agent. Se sono necessari limiti superiori, richiedere un aumento contattando Supporto. Aprire la pagina del [Centro di supporto Supporto AWS](https://console.aws.amazon.com/support/home#/) effettuando l'accesso se necessario, quindi selezionare **Crea caso**. Selezionare **Service limit increase (Aumento limiti del servizio)**. Compilare e inviare il modulo.

Per visualizzare la cronologia di uno specifico processo di SQL Server Agent in SQL Server Management Studio (SSMS), apri Object Explorer, fai clic con il pulsante destro del mouse sul processo e seleziona **View History (Visualizza cronologia)**.

Poiché SQL Server Agent è in esecuzione su un host gestito in un'istanza DB, alcune azioni non sono supportate:
+ L'esecuzione di processi di replica e di script da riga di comando con ActiveX, la shell dei comandi di Windows o con Windows PowerShell non è supportata.
+ Non è possibile avviare, arrestare o riavviare manualmente SQL Server Agent.
+ Le notifiche e-mail tramite SQL Server Agent non sono disponibili da un'istanza database.
+ Gli avvisi e gli operatori di SQL Server Agent non sono supportati.
+ L'utilizzo di SQL Server Agent per creare backup non è supportato. Utilizza Amazon RDS per il backup dell'istanza database.
+ Attualmente, RDS per SQL Server non supporta l’utilizzo di token SQL Server Agent.

## Attivazione della replica di processo SQL Server Agent
<a name="SQLServerAgent.Replicate"></a>

È possibile attivare la replica dei processi SQL Server Agent utilizzando la seguente stored procedure:

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

È possibile eseguire la stored procedure su tutte le versioni di SQL Server supportate da Amazon RDS for SQL Server. I processi vengono replicati nelle seguenti categorie:
+ [Senza categoria (locale)]
+ [Senza categoria (multi-server)]
+ [Senza categoria]
+ Raccoglitore di dati
+ Tuning Advisor del motore del database
+ Manutenzione database
+ Full text

Vengono replicati solo i processi che utilizzano i passaggi del processo T-SQL. I processi con tipi di passaggi quali SQL Server Integration Services (SSIS), SQL Server Reporting Service (SSRS), Replication e PowerShell non vengono replicati. I processi che utilizzano Database Mail e gli oggetti a livello di server non vengono replicati.

**Importante**  
L'host principale è l'origine della replica. Prima di attivare la replica di processo, assicurarsi che i processi SQL Server Agent siano sul principale. In caso contrario, è possibile che i processi SQL Server Agent vengano eliminati se la funzionalità viene attivata quando i processi più recenti si trovano sull'host secondario.

Utilizza la seguente funzione per verificare se la replica è attivata.

```
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
```

 Se i processi di SQL Server Agent sono in fase di replica, la query T-SQL restituisce quanto segue. Se i processi non si stanno replicando, non restituisce nulla per `object_class`.

![\[I processi SQL Server Agent sono in fase di replica\]](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/UserGuide/images/SQLAgentJob.png)


È possibile utilizzare la seguente funzione per trovare l'ultima volta che gli oggetti sono stati sincronizzati in base al fuso orario UTC.

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

Supponi, ad esempio, di modificare un processo SQL Server Agent all'01:00. Prevedi che l'orario di sincronizzazione più recente sia dopo l'01:00, il che suggerisce che la sincronizzazione è avvenuta.

Dopo la sincronizzazione, i valori restituiti per `date_created` e `date_modified` sul nodo secondario dovrebbero corrispondere.

![\[L'ultima volta che gli oggetti server sono stati sincronizzati è stato alle 01:21:23\]](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/UserGuide/images/SQLAgentJob_last_sync_time.png)


Se utilizzi anche la replica `tempdb`, puoi abilitare la replica sia per i processi di SQL Agent sia per la configurazione di `tempdb` specificandoli nel parametro `@object_type`:

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

Per ulteriori informazioni sulla replica `tempdb`, consulta [Configurazione di TempDB per le implementazioni Multi-AZ](SQLServer.TempDB.MAZ.md).

# Ruoli di SQL Server Agent
<a name="SQLServerAgent.AgentRoles"></a>

RDS per SQL Server supporta i seguenti ruoli di SQL Server Agent con diversi livelli di autorizzazioni per la gestione dei processi:
+ **SQLAgentUserRole**

  Autorizzazioni
  + Creare e gestire i propri processi, programmi e operatori
  + Visualizzare le proprietà dei propri processi e programmi
  + Non è possibile visualizzare o gestire i processi creati da altri utenti

  Questo ruolo è adatto agli utenti che devono creare e gestire i propri processi ma non richiedono l’accesso ai processi creati da altri utenti.
+ **SQLAgentReaderRole**

  Autorizzazioni
  + Tutte le autorizzazioni di SQLAgentUserRole
  + Visualizzare un elenco di tutti i processi e programmi, inclusi quelli creati da altri
  + Visualizzare le proprietà di tutti i processi
  + Rivedere la cronologia dei processi

  Questo ruolo è adatto agli utenti che devono monitorare lo stato di tutti i processi ma non devono gestirli.
+ **SQLAgentOperatorRole**

  Autorizzazioni
  + Tutte le autorizzazioni di SQLAgentUserRole e SQLAgentReaderRole
  + Eseguire, arrestare o avviare i processi
  + Gestire la cronologia dei processi
  + Abilitare/disabilitare processi e programmi
  + Visualizzare operatori e proxy

  Questo ruolo fornisce le autorizzazioni più estese ed è adatto agli utenti che devono avere il pieno controllo su tutti i processi.

Utilizza il comando seguente per assegnare i ruoli al tuo accesso SQL Server:

```
USE msdb;
EXEC sp_addrolemember 'SQLAgentOperatorRole', 'username';
```

## Gestione di SQLAgentOperatorRole in RDS per SQL Server
<a name="SQLServerAgent.AgentRoles.ManageSQLAgentOperatorRole"></a>

Per visualizzare i processi correnti, è necessario aggiungere SQLAgentOperatorRole all’accesso SQL Server e rimuoverlo prima di disconnettersi dal database.

Per visualizzare la struttura ad albero di SQL Server Agent in SQL Server Management Studio, segui queste istruzioni:

**Visualizzazione di SQL Server Agent in SQL Server Management Studio (SSMS)**

1. Utilizzando le credenziali di utente master RDS, accedi all’istanza RDS per SQL Server e concedi all’utente desiderato il ruolo SQLAgentUserRole.

   ```
   USE msdb
   GO
   IF NOT EXISTS(SELECT name FROM sys.database_principals WHERE name = 'UserName')
   BEGIN
   CREATE USER UserName FROM LOGIN UserName
   END
   GO
   ALTER ROLE SQLAgentUserRole ADD MEMBER UserName
   GO
   GRANT ALTER ON ROLE::[SQLAgentOperatorRole] to UserName
   GO
   ```

   Questi comandi creano l’utente nel database `msdb`, nel caso in cui non esista. Aggiungono inoltre l’utente in SQLAgentUserRole, in modo da rendere visibile la struttura ad albero di SQL Server Agent in SSMS. Infine, concedono all’utente le autorizzazioni di modifica sul ruolo SQLAgentOperatorRole. In questo modo, l’utente può aggiungere/rimuovere se stesso da tale ruolo. 

1. Per aggiungerti a questo ruolo, connettiti all’istanza RDS per SQL Server come utente che deve visualizzare i processi ed esegui lo script seguente.

   ```
   use msdb
   go
   ALTER ROLE SQLAgentOperatorRole ADD MEMBER UserName
   GO
   ```

   Quindi, fai clic con il pulsante destro del mouse sulla cartella **Processi** e scegli **Aggiorna**.

1. Quando esegui questa azione, nella scheda **Processi** viene visualizzato il pulsante **\$1** (più). Fai clic per espandere l’elenco dei processi di SQL Server Agent.

1. 
**Importante**  
Prima di disconnetterti dall’istanza RDS per SQL Server, devi rimuoverti da SQLAgentOperatorRole.

   Per rimuovere il tuo accesso da SQLAgentOperatorRole, esegui la seguente query prima di disconnetterti o chiudere Management Studio:

   ```
   USE msdb
   GO
   ALTER ROLE SQLAgentOperatorRole DROP MEMBER UserName
   GO
   ```

Per ulteriori informazioni, consulta [Leveraging SQLAgentOperatorRole in RDS SQL Server](https://aws.amazon.com/blogs/database/leveraging-sqlagentoperatorrole-in-rds-sql-server/).

# Aggiunta di un utente al ruolo SQLagentUser
<a name="SQLServerAgent.AddUser"></a>

Per consentire un ulteriore accesso o utilizzo utente di SQL Server Agent, accedi come utente master ed esegui le operazioni seguenti.

1. Creazione di un altro login a livello di server con il comando `CREATE LOGIN`.

1. Creazione di un utente in `msdb` con il comando `CREATE USER` e collegamento di questo utente alle credenziali di accesso create nella fase precedente.

1. Aggiunta dell'utente al `SQLAgentUserRole` utilizzando la procedura memorizzata di sistema `sp_addrolemember`.

Supponi, ad esempio, che il tuo nome utente master sia **admin** e di voler concedere l'accesso a SQL Server Agent a un utente denominato **theirname** con una password **theirpassword**. In tal caso, puoi utilizzare la seguente procedura.

**Per aggiungere un utente al ruolo SQLAgentUser**

1. Accedi come utente master.

1. Esegui i comandi seguenti:

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

# Eliminazione di un processo SQL Server Agent
<a name="SQLServerAgent.DeleteJob"></a>

Puoi utilizzare la procedura archiviata `sp_delete_job` per eliminare i processi di SQL Server Agent su Amazon RDS for Microsoft SQL Server.

Non è possibile utilizzare SSMS per eliminare i processi di SQL Server Agent. Se provi a farlo, riceverai un messaggio di errore simile al seguente:

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

Come servizio gestito, a RDS viene impedita l'esecuzione di procedure che accedono al registro di Windows. Quando si utilizza SSMS, tenta di eseguire un processo (`xp_regread`) per il quale RDS non è autorizzato.

**Nota**  
In RDS per SQL Server, solo i membri del ruolo sysadmin possono aggiornare o eliminare i processi di proprietà di un account di accesso diverso. Per ulteriori informazioni, consulta [Leveraging SQLAgentOperatorRole in RDS SQL Server](https://aws.amazon.com/blogs/database/leveraging-sqlagentoperatorrole-in-rds-sql-server/).

**Per eliminare un processo di SQL Server Agent**
+ Eseguire la seguente istruzione T-SQL:

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