Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:Database SQL di Azure
Istanza gestita di SQL di Azure
Database SQL in Fabric
I passaggi generali di questa procedura dettagliata sono i seguenti:
- Creare un account Archiviazione di Azure oppure trovare un account appropriato da usare.
- Creare un contenitore in questo account di archiviazione.
- Concedere all'motore di database necessario l'accesso al contenitore usando un'assegnazione di ruolo controllo degli accessi in base al ruolo o un token di firma di accesso condiviso.
- Creare credenziali nel database o nell'istanza in cui si crea la sessione eventi.
- Creare, avviare e usare una sessione eventi.
Creare un account di archiviazione e un contenitore
Per una descrizione dettagliata della creazione di un account di archiviazione in Archiviazione di Azure, vedere Creare un account di archiviazione. Si apprenderà come creare un account di archiviazione usando portale di Azure, PowerShell, Azure SQL, un modello di ARM o un modello Bicep.
Usare un account che:
- È un account
Standard general-purpose v2. - Ha il tipo di ridondanza corrispondente alla ridondanza del database SQL di Azure, del pool elastico o dell'istanza gestita in cui vengono create sessioni di eventi.
- Per le risorse SQL di Azure con ridondanza locale, usare l’archiviazione con ridondanza locale, l'archiviazione con ridondanza geografica o RA-GRS. Per le risorse SQL di Azure con ridondanza della zona, usare ZRS, archiviazione con ridondanza geografica della zona o RA-GZRS. Per altre informazioni, vedere Ridondanza di Archiviazione di Azure.
- Usa il
Hotlivello di accesso BLOB. - Si trova nella stessa area di Azure del database SQL di Azure, del pool elastico, della capacità Fabric o dell'istanza gestita di SQL.
- Lo spazio dei nomi gerarchico non è abilitato.
Quindi creare un contenitore in questo account di archiviazione usando il portale di Azure. È anche possibile creare questa configurazione tramite Azure PowerShell o tramite l'interfaccia della riga di comando di Azure.
Prendere nota dei nomi dell'account di archiviazione e del contenitore creati. Verranno usati nei passaggi seguenti.
Prima di tutto, concedere l'accesso al contenitore. Per leggere e scrivere i dati degli eventi, il motore di database richiede un accesso specifico al contenitore. È possibile concedere questo accesso in due modi, a seconda del tipo di autenticazione scelto:
Se si usa l'identità gestita con l'autenticazione Microsoft Entra, si assegna il ruolo Controllo degli accessi in base al ruolo collaboratore ai dati dei BLOB di archiviazione per il contenitore all'identità gestita del server logico SQL di Azure o all'istanza gestita di SQL di Azure.
Se si usa l'autenticazione basata su segreto, si crea un token di firma di accesso condiviso per il contenitore.
Per usare questo tipo di autenticazione, è necessario abilitare l'opzione Consenti l'accesso alla chiave dell'account di archiviazione. Per altre informazioni, vedere Impedire l'autorizzazione con chiave condivisa per un account di archiviazione di Azure.
Concedere l'accesso usando l'identità gestita
Nella portale di Azure passare alla pagina Identità del server logico SQL di Azure o dell'istanza gestita di SQL di Azure e assicurarsi che sia assegnata un'identità gestita. Per altre informazioni, vedere Identità gestite in Microsoft Entra per Azure SQL.
Nella portale di Azure passare al contenitore di archiviazione in cui archiviare i dati degli eventi. Nella pagina Controllo di accesso (IAM) selezionare Aggiungi per assegnare il ruolo Controllo degli accessi in base al ruolo Collaboratore ai dati dei BLOB di archiviazione all'identità gestita del server logico o dell'istanza gestita di SQL.
Se al server logico o all'istanza gestita di SQL è abilitata l'identità gestita assegnata dal sistema, assegnare il ruolo a tale identità. Se l'identità assegnata dal sistema è disabilitata, ma esiste una o più identità assegnate dall'utente, assegnare il ruolo all'identità assegnata dall'utente designata come identità primaria.
Per altre informazioni, vedere Assegnare un ruolo di Azure per l'accesso ai dati BLOB.
Creare una credenziale per indicare al motore di database di eseguire l'autenticazione per Archiviazione di Azure usando l'identità gestita per un URL del contenitore specifico.
Nel database SQL di Azure e nel database SQL di Microsoft Fabric, creare una credenziale con ambito di database. Usando uno strumento client come SSMS, aprire una nuova finestra di query, connettersi al database in cui si crea la sessione eventi e incollare il batch T-SQL seguente. Assicurarsi di essere connessi al database utente e non al database
master.Note
L'esecuzione del batch T-SQL seguente richiede l'autorizzazione del
CONTROLdatabase. Per impostazione predefinita, l'autorizzazione viene mantenuta dal proprietario del database (dbo), dai membri deldb_ownerruolo del database e dall'amministratore del server logico./* (Re-)create a database scoped credential if needed. */ IF EXISTS (SELECT 1 FROM sys.database_credentials WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>' ) DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]; /* The name of the credential must match the URL of the blob container. When using managed identity, the credential does not contain a secret. */ CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'MANAGED IDENTITY';
Prima di eseguire questo batch, apportare le modifiche seguenti:
- In tutte e tre le occorrenze di
https://<storage-account-name>.blob.core.windows.net/<container-name>, sostituire<storage-account-name>con il nome dell'account di archiviazione e sostituire<container-name>con il nome del contenitore.
Concedere l'accesso usando un token di firma di accesso condiviso
Nella portale di Azure passare all'account di archiviazione e al contenitore creato. Selezionare il contenitore e passare a Impostazioni > Token di accesso condiviso.
Il token di firma di accesso condiviso deve soddisfare i requisiti seguenti:
-
Autorizzazioni impostate su
Read,Write,Delete,List. - L'ora di inizio e l'ora di scadenza devono includere la durata della sessione eventi. Il token di firma di accesso condiviso creato funziona solo entro questo intervallo di tempo.
- Non aver restrizioni degli indirizzi IP.
Selezionare il pulsante Genera URL e token SAS. Il token di firma di accesso condiviso si trova nella casella Token di firma di accesso condiviso BLOB. Sarà possibile copiarlo nel passaggio successivo.
Important
Il token di firma di accesso condiviso fornisce l'accesso in lettura e scrittura a questo contenitore. Considerarlo come se fosse una password o qualsiasi altro segreto.
-
Autorizzazioni impostate su
Creare una credenziale per archiviare il token di firma di accesso condiviso.
Archiviare il token di firma di accesso condiviso in una credenziale con ambito database. Usando uno strumento client come SSMS, aprire una nuova finestra di query, connettersi al database in cui si crea la sessione eventi e incollare il batch T-SQL seguente. Assicurarsi di essere connessi al database utente e non al database
master.Note
L'esecuzione del batch T-SQL seguente richiede l'autorizzazione del
CONTROLdatabase. Per impostazione predefinita, l'autorizzazione viene mantenuta dal proprietario del database (dbo), dai membri deldb_ownerruolo del database e dall'amministratore del server logico./* Create a master key to protect the secret of the credential */ IF NOT EXISTS (SELECT 1 FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##') CREATE MASTER KEY; /* (Re-)create a database scoped credential if needed. */ IF EXISTS ( SELECT 1 FROM sys.database_credentials WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>' ) DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]; /* The name of the credential must match the URL of the blob container. The secret is the SAS token for the container. */ CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<sas-token>';Prima di eseguire questo batch, apportare le modifiche seguenti:
- In tutte e tre le occorrenze di
https://<storage-account-name>.blob.core.windows.net/<container-name>, sostituire<storage-account-name>con il nome dell'account di archiviazione e sostituire<container-name>con il nome del contenitore. -
SECRETNella clausola sostituire<sas-token>con il token di firma di accesso condiviso copiato nel passaggio precedente.
- In tutte e tre le occorrenze di
Creare, avviare e arrestare una sessione eventi
Dopo aver creato le credenziali, è possibile creare la sessione eventi. A differenza della creazione delle credenziali, la creazione di una sessione eventi non richiede l'autorizzazione CONTROL . Dopo aver creato le credenziali, è possibile creare sessioni di eventi anche se si dispone di autorizzazioni più limitate. Vedere Autorizzazioni per le autorizzazioni specifiche necessarie.
In SQL Server Management Studio (SSMS) connettersi al server logico del database SQL di Azure.
Espandere il nodo Eventi estesi nella cartella Gestione .
Fare clic con il pulsante destro del mouse sulla cartella Sessioni e scegliere Nuova sessione.
Nella pagina Generale immettere un nome per la sessione, che sarà
example-sessionper l'esempio di codice seguente.Nella pagina Eventi selezionare uno o più eventi da aggiungere alla sessione. In questo esempio, è stato selezionato l’evento
sql_batch_starting.Nella pagina Archiviazione dati selezionare
event_filecome tipo di destinazione.- Per un file di eventi locale, selezionare la destinazione del file locale.
- Per un blob di eventi archiviato in Archiviazione di Azure, incollare l'URL del contenitore nella casella URL di archiviazione. Digitare una barra (
/) alla fine di questo URL, seguita dal nome del file (BLOB). Ad esempio:https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.
Nella pagina Data Archiviazione selezionare
event_filecome tipo di destinazione e incollare l'URL del contenitore di archiviazione nella casella URL Archiviazione. Digitare una barra (/) alla fine di questo URL, seguita dal nome del file (BLOB). In questo esempio il nome del BLOB èexample-session.xele l'intero URL èhttps://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.Note
Per Istanza gestita di SQL, invece di incollare l'URL del contenitore di archiviazione nella pagina Archiviazione dati, usare il pulsante Script per creare uno script T-SQL della sessione. Specificare l'URL del contenitore come valore per l'argomento
filename, simile all'esempio di Istanza gestita di SQL riportato di seguito ed eseguire lo script per creare la sessione.Dopo aver configurato la sessione, è possibile selezionare il pulsante Script per creare uno script T-SQL della sessione per salvarlo per un secondo momento. Ecco lo script per la sessione di esempio:
CREATE EVENT SESSION [example-session] ON DATABASE ADD EVENT sqlserver.sql_batch_starting ADD TARGET package0.event_file (SET filename=N'https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel'); GO
Selezionare OK per creare la sessione.
In Esplora oggetti espandere la cartella Sessioni per visualizzare la sessione eventi creata. Per impostazione predefinita, la sessione non viene avviata al momento della creazione. Per avviare la sessione, fare clic con il pulsante destro del mouse sul nome della sessione e scegliere Avvia sessione. In modo analogo, mentre la sessione è in esecuzione, è possibile arrestarla in un secondo momento selezionando Arresta sessione.
Quando vengono eseguiti batch T-SQL, la sessione scrive gli eventi nel example-session.xel BLOB nel contenitore di archiviazione.
Per arrestare la sessione, fare clic con il pulsante destro del mouse in Esplora oggetti e scegliere Arresta sessione.
Risolvi i problemi delle sessioni eventi utilizzando un target event_file su Azure Storage.
L'elenco seguente contiene errori che possono verificarsi durante l'avvio di una sessione eventi estesa che usa Archiviazione di Azure, con le possibili spiegazioni per l'errore.
-
Il sistema operativo ha restituito l'errore 5: 'Accesso negato'.
- Se si usa l'autenticazione dell'identità gestita:
- L'identità gestita usata dal motore di database non ha il ruolo RBAC richiesto. Per altre informazioni, vedere Concedere l'accesso tramite identità gestita.
- Il firewall dell'account di archiviazione è abilitato e viene abilitata anche un'eccezione per consentire ai servizi di Azure attendibili di accedere all'account di archiviazione, ma non è stata aggiunta un'istanza
Microsoft.Sql/serversdi risorsa per il server logico all'elenco di istanze di risorse a cui viene concesso l'accesso. Per altre informazioni, vedere Concedere l'accesso dalle istanze di risorse di Azure. - Se si usa un perimetro di sicurezza di rete con modalità applicata, il database e l'account di archiviazione non si trovano nello stesso perimetro.
- Se si utilizza l'autenticazione tramite token SAS (Shared Access Signature):
- Il firewall dell'account di archiviazione è stato abilitato. Questa opzione non è supportata per le sessioni di eventi che utilizzano l'autenticazione con token SAS (Shared Access Signature).
- Il token di firma di accesso condiviso non dispone di autorizzazioni sufficienti o è scaduto. Per ulteriori informazioni, consultare Concedere l'accesso utilizzando un SAS token.
- Se si usa un perimetro di sicurezza di rete con modalità applicata, le regole di accesso per consentire la comunicazione in uscita senza restrizioni dal database e la comunicazione in ingresso senza restrizioni all'account di archiviazione non sono presenti.
- Se si usa l'autenticazione dell'identità gestita:
-
Il sistema operativo ha restituito l'errore 86: "La password di rete specificata non è corretta".
- Non sono presenti credenziali con ambito database (per il database SQL di Azure) o credenziali con ambito server (per Istanza gestita di SQL di Azure o SQL Server) con il nome corrispondente all'URL del contenitore BLOB. Per altre informazioni, vedere gli esempi per Concedere l'accesso usando l'identità gestita o Concedere l'accesso usando un token SAS.
- Il nome delle credenziali termina con una barra (
/). Il nome delle credenziali deve terminare con il nome del contenitore senza includere la barra finale.
-
Il sistema operativo ha restituito l'errore 3: 'Il sistema non riesce a trovare il percorso specificato'.
- Il contenitore specificato nell'URL del contenitore BLOB non esiste.
-
Il sistema operativo ha restituito l'errore 13: 'I dati non sono validi'.
- Esiste un criterio di immutabilità nel contenitore BLOB. L'archiviazione non modificabile non è supportata per le sessioni di eventi.
- L'account di archiviazione ha lo spazio dei nomi gerarchico abilitato. Gli account di archiviazione con spazio dei nomi gerarchico abilitato non sono supportati per le sessioni di eventi.
Visualizzare i dati degli eventi
È possibile visualizzare i dati degli eventi nell'interfaccia utente del Visualizzatore eventi di SQL Server Management Studio (SSMS), in cui è possibile usare filtri e aggregazioni per analizzare i dati acquisiti. Per altre informazioni sull'uso del visualizzatore eventi in SSMS, vedere Visualizzare i dati degli eventi in SQL Server Management Studio.
Visualizzare i dati degli eventi con T-SQL
Per leggere i dati della sessione eventi tramite T-SQL, usare la funzione sys.fn_xe_file_target_read_file(). Per usare questa funzione in un database o in un'istanza diversa da quella in cui viene creata la sessione eventi, è necessario concedere l'accesso al contenitore al motore di database nel contenitore di archiviazione con i BLOB di dati dell'evento. Vedere Concedere l'accesso usando l'identità gestita o Concedere l'accesso usando un token di firma di accesso condiviso.
Per una procedura dettagliata, vedere Creare una sessione eventi in SSMS.
Scaricare i file xel da Archiviazione di Azure
Tip
Se si usa SSMS v19.2 o versione successiva, non è necessario scaricare i file xel come descritto in questa sezione. In queste versioni SSMS legge i xel file per ogni sessione direttamente dal contenitore di Archiviazione di Azure. Per altre informazioni, vedere il blog Miglioramento degli eventi estesi in SQL di Azure.
Scaricare il BLOB xel per la sessione dal contenitore di archiviazione e salvarlo come file locale. In portale di Azure trovare l'account di archiviazione usato, selezionare Contenitori in Archiviazione dati e selezionare il contenitore creato per la sessione eventi. Il BLOB per la sessione ha il nome della sessione come prima parte del nome, con un suffisso numerico. Selezionare i puntini di sospensione (...) per visualizzare il menu di scelta rapida per il BLOB e selezionare Scarica.
È possibile installare Azure Storage Explorer per scaricare più BLOB xel in un'unica operazione.
Dopo aver scaricato il file xel, aprirlo in SSMS. Nel menu principale di SSMS passare a File e selezionare Apri. Se si dispone di un singolo file xel, selezionare File... e passare al file scaricato. Se sono presenti più file xel generati dalla stessa sessione eventi (noti come file di rollover), è possibile usare la finestra di dialogo Unisci file eventi estesi… per aprirli tutti nel visualizzatore eventi.
Contenuti correlati
- Eventi estesi in Azure SQL
- Panoramica degli eventi estesi
- destinazione event_file
- CREARE LA SESSIONE DI EVENTI (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) - Crea credenziali con ambito di database (Transact-SQL)
- CREATE CREDENTIAL (Transact-SQL)