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: Analisi della configurazione di Service Broker

Se le stored procedure attivate non vengono eseguite correttamente, l'utilità ssbdiagnose consente di cercare errori di configurazione nei servizi associati. Per ulteriori informazioni, vedere Utilità ssbdiagnose.

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

Se la stored procedure attivata genera risultati non corretti o non è in grado di leggere dalla coda, verificare la presenza nel log degli errori di SQL Server di errori e messaggi che consentano di individuare il problema. Le stored procedure attivate non sono associate ad alcuna applicazione. Le informazioni normalmente restituite all'applicazione chiamante vengono invece incluse nel log degli errori di SQL Server, che include gli errori, i messaggi e l'output delle istruzioni PRINT e RAISERROR.

Tecnica: Esecuzione della stored procedure da una sessione interattiva

Per risolvere i problemi relativi alle stored procedure di attivazione, è possibile 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.

Tuttavia, si possono ottenere risultati diversi se il contesto di protezione e le impostazioni del database sono differenti nella sessione interattiva rispetto al momento in cui la stored procedure viene attivata da Motore di database. Prima di eseguire la procedura, procedere come segue:

  • Utilizzare EXECUTE AS per impostare l'utente per la sessione interattiva sull'utente specificato per l'attivazione.

  • Configurare le opzioni per la sessione sulle impostazioni predefinite del database.

Per ulteriori informazioni, vedere Contesto di attivazione interna.

Sintomo: Mancata esecuzione delle stored procedure di attivazione

Per questo sintomo sono possibili le cause comuni seguenti:

  • È possibile che le impostazioni per la coda siano state modificate. Verificare le impostazioni per la coda utilizzando la vista del catalogo sys.service_queues. 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 delle autorizzazioni di esecuzione sulla stored procedure.

  • La stored procedure potrebbe non avviarsi o potrebbe interrompersi subito 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 non è attivo, 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. Per ulteriori informazioni, vedere la sezione "Sintomo: Mancata esecuzione delle stored procedure di attivazione" più indietro in questo argomento.

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 possono facilitare la risoluzione del problema.