Condividi tramite


Risoluzione dei problemi relativi alle stored procedure di attivazione

Le stored procedure di attivazione vengono eseguite in una sessione in background. Pertanto, le tecniche per la risoluzione dei problemi relativi alle stored procedure di attivazione sono leggermente diverse rispetto alle tecniche utilizzate per la risoluzione dei problemi relativi alle stored procedure che fanno parte di una sessione interattiva.

Tecnica: Visualizzazione dell'output di una stored procedure di attivazione

Il Motore di database scrive l'output di una stored procedure di attivazione nel log degli errori di SQL Server. Se la stored procedure genera risultati non corretti o non può leggere dalla coda, controllarne l'output nel log degli errori di SQL Server. Nell'output sono spesso disponibili informazioni sufficienti per individuare il problema.

Tecnica: Esecuzione della stored procedure da una sessione interattiva

Uno dei modi più efficaci per risolvere i problemi relativi alle stored procedure di attivazione consiste nel disattivare l'attivazione sulla coda e quindi eseguire la stored procedure da SQL Server Management Studio o dall'utilità sqlcmd. L'esecuzione di una stored procedure da una sessione interattiva consente di visualizzare gli eventuali errori restituiti dalla stored procedure.

Quando la stored procedure viene attivata dal Motore di database, tuttavia, le impostazioni del database e il contesto di protezione possono essere diversi. Prima di eseguire la stored procedure, utilizzare EXECUTE AS per impostare l'utente specificato per l'attivazione come utente della sessione e impostare le opzioni della sessione sui valori predefiniti del database.

Per ulteriori informazioni, vedere Internal Activation Context.

Sintomo: Mancata esecuzione delle stored procedure di attivazione

Per questo sintomo sono possibili diverse cause comuni.

È possibile che le impostazioni per la coda siano state modificate. Verificare le impostazioni per la coda utilizzando la vista del catalogo sys.service_queues. In particolare, verificare che l'attivazione sia abilitata per la coda e che siano specificate la stored procedure e l'entità di protezione corrette. Verificare che l'entità di protezione disponga dell'autorizzazione di esecuzione sulla stored procedure.

È possibile che la stored procedure non si avvii o termini immediatamente dopo l'avvio. In questo caso controllare la presenza di errori generati dalla stored procedure nel log degli errori di SQL Server. È inoltre possibile eseguire la stored procedure da SQL Server Management Studio e controllare i risultati.

Sintomo: I messaggi rimangono nella coda

Verificare che le stored procedure vengano avviate correttamente:

  • Verificare che per la coda in questione sia attivo un monitor di coda controllando la vista a gestione dinamica sys.dm_broker_queue_monitors. Se il monitor di coda non è attivo, l'attivazione per la coda non è impostata su ON. Utilizzare l'istruzione ALTER QUEUE per impostare l'attivazione su ON.
  • Lo stato del monitor di coda relativo alla coda in questione deve corrispondere a RECEIVES_OCCURRING. Se lo stato del monitor di coda è diverso, verificare che le attività attivate per la coda siano in esecuzione controllando la vista a gestione dinamica sys.dm_broker_activated_tasks. Se non vi sono attività attivate, l'attivazione non è possibile. Vedere "Sintomo: Mancata esecuzione delle stored procedure di attivazione" in questa sezione.

Se le attività attivate sono in esecuzione ma i messaggi rimangono nella coda, significa che l'attività non è in grado di ricevere o di eseguire il commit delle transazioni. Controllare nel log degli errori di SQL Server la presenza di errori generati dalla stored procedure. L'interruzione dell'attivazione e l'esecuzione manuale della stored procedure può facilitare la risoluzione del problema.

Vedere anche

Altre risorse

sys.service_queues (Transact-SQL)
sys.dm_broker_queue_monitors
sys.dm_broker_activated_tasks

Guida in linea e informazioni

Assistenza su SQL Server 2005