Erstellen einer Sitzung mit einem event_file-Ziel in Azure Storage
Gilt für: Azure SQL-Datenbank Azure SQL Managed Instance
Die allgemeinen Schritte in dieser exemplarischen Vorgehensweise sind:
- Erstellen Sie ein Azure Storage-Konto, oder suchen Sie nach einem vorhandenen geeigneten Konto für die Verwendung.
- Erstellen Sie einen Container in diesem Speicherkonto.
- Gewähren Sie dem Datenbankmodul den erforderlichen Zugriff auf den Container mithilfe einer RBAC-Rollenzuweisung oder eines SAS-Tokens.
- Erstellen Sie Anmeldeinformationen in der Datenbank oder verwalteten Instanz, in der Sie die Ereignissitzung erstellen.
- Erstellen, starten und verwenden Sie eine Ereignissitzung.
Erstellen eines Speicherkontos und Containers
Eine detaillierte Beschreibung zum Erstellen eines Speicherkontos in Azure Storage finden Sie unter Erstellen eines Speicherkontos. Sie erfahren, wie Sie mithilfe von Azure-Portal, PowerShell, Azure SQL, einer ARM-Vorlage oder einer Bicep-Vorlage ein Speicherkonto erstellen.
Wir empfehlen Ihnen, ein Benutzerkonto mit folgenden Eigenschaften zu verwenden:
- Ist ein
Standard general-purpose v2
-Konto. - Weist den Redundanztyp auf, der der Redundanz der Azure SQL-Datenbank oder des elastischen Pools entspricht, in denen Ereignissitzungen erstellt werden.
- Verwenden Sie für lokal redundante Azure SQL-Ressourcen LRS, GRS oder RA-GRS. Verwenden Sie für zonenredundante Azure SQL-Ressourcen ZRS, GZRS oder RA-GZRS. Weitere Informationen finden Sie unter Azure Storage-Redundanz.
- Verwendet die
Hot
-Blob-Zugriffsebene. - Befindet sich in derselben Azure-Region wie die Azure SQL-Datenbank oder der elastische Pool.
Als nächstes erstellen Sie einen Container in diesem Speicherkonto mit Azure-Portal. Sie können auch einen Container mit PowerShell oder mithilfe der Azure CLI erstellen.
Notieren Sie die Namen des Speicherkontos und des Containers, die Sie erstellt haben. Sie verwenden sie in den folgenden Schritten.
Gewähren des Zugriffs auf den Container
Zum Lesen und Schreiben von Ereignisdaten benötigt das Datenbankmodul einen bestimmten Zugriff auf den Container. Je nach gewähltem Authentifizierungstyp können Sie diesen Zugriff auf eine von zwei Arten gewähren:
Wenn Sie die verwaltete Identität mit Microsoft Entra-Authentifizierung verwenden, weisen Sie der verwalteten Identität des logischen Azure SQL-Servers oder der verwalteten Azure SQL-Instanz die RBAC-Rolle Mitwirkender an Storage-Blobdaten für den Container zu.
Hinweis
Die Verwendung einer verwalteter Identität mit erweiterten Ereignissitzungen befindet sich in der Vorschau.
Wenn Sie die geheimnisbasierte Authentifizierung verwenden, erstellen Sie ein SAS-Token für den Container.
Um diesen Authentifizierungstyp zu verwenden, muss die Option Zugriff auf Speicherkontoschlüssel erlauben aktiviert sein. Weitere Informationen finden Sie unter Verhindern der Autorisierung mit gemeinsam verwendeten Schlüsseln für ein Azure Storage-Konto.
Gewähren von Zugriff mithilfe einer verwalteten Identität
Navigieren Sie im Azure-Portal zur Seite Identität des logischen Azure SQL-Servers oder der verwalteten Azure SQL-Instanz, und stellen Sie sicher, dass eine verwaltete Identität zugewiesen ist. Weitere Informationen finden Sie unter Verwaltete Identitäten in Microsoft Entra für Azure SQL.
Navigieren Sie im Azure-Portal zu dem Speichercontainer, in dem Ereignisdaten gespeichert werden sollen. Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Option Hinzufügen aus, um der verwalteten Identität des logischen Servers oder der verwalteten SQL-Instanz die RBAC-Rolle Mitwirkender an Storage-Blobdaten zuzuweisen.
Wenn für den logischen Server oder die verwaltete SQL-Instanz die systemseitig zugewiesene verwaltete Identität aktiviert ist, weisen Sie die Rolle dieser Identität zu. Wenn die systemseitig zugewiesene Identität deaktiviert ist, aber mindestens eine benutzerseitig zugewiesene Identität vorhanden ist, weisen Sie die Rolle der benutzerseitig zugewiesenen Identität zu, die als primäre Identität festgelegt ist.
Weitere Informationen finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten.
Erstellen Sie Anmeldeinformationen, um das Datenbankmodul anzuweisen, sich bei Azure Storage mithilfe der verwalteten Identität für eine bestimmte Container-URL zu authentifizieren.
Erstellen Sie datenbankweite Anmeldeinformationen. Stellen Sie mithilfe eines Clienttools wie SSMS oder ADS eine Verbindung mit der Datenbank her, in der Sie die Ereignissitzung erstellen, und fügen Sie den folgenden T-SQL-Batch in ein neues Abfragefenster ein. Stellen Sie sicher, dass Sie mit Ihrer Benutzerdatenbank und nicht mit der
master
-Datenbank verbunden sind.Hinweis
Zum Ausführen des folgenden T-SQL-Batches ist die
CONTROL
-Datenbankberechtigung erforderlich, über die der Datenbankbesitzer (dbo
), die Mitglieder derdb_owner
-Datenbankrolle und der Administrator des logischen Servers verfügen./* (Re-)create a database scoped credential. The name of the credential must match the URL of the blob container. */ 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>]; /* 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';
Bevor Sie diesen Batch ausführen, nehmen Sie die folgende Änderung vor:
- Ersetzen Sie bei allen drei Vorkommen von
https://<storage-account-name>.blob.core.windows.net/<container-name>
<storage-account-name>
durch den Namen Ihres Speicherkontos und<container-name>
durch den Namen Ihres Containers.
- Ersetzen Sie bei allen drei Vorkommen von
Gewähren des Zugriffs mithilfe eines SAS-Tokens
Navigieren Sie im Azure-Portal zu dem Speicherkonto und dem Container, die Sie erstellt haben. Wählen Sie den Container aus, und navigieren Sie zu Einstellungen > freigegebene Zugriffstoken.
Das SAS-Token muss die folgenden Anforderungen erfüllen:
- Berechtigungen müssen auf
Read
,Write
,Delete
,List
festgelegt sein. - Die Startzeit und die Ablaufzeit müssen die Lebensdauer der Ereignissitzung umfassen. Das von Ihnen erstellte SAS-Token funktioniert nur innerhalb dieses Zeitintervalls.
- Keine Einschränkungen für IP-Adressen haben.
Wählen Sie die Schaltfläche SAS-Token und -URL generieren aus. Das SAS-Token befindet sich im Blob SAS-Token-Feld. Sie können es kopieren, um ihn im nächsten Schritt verwenden.
Wichtig
Das SAS-Token bietet Lese- und Schreibzugriff auf diesen Container. Behandeln Sie es so, als würde es sich um ein Kennwort oder ein anderes Geheimnis handeln.
- Berechtigungen müssen auf
Erstellen Sie Anmeldeinformationen zum Speichern des SAS-Tokens.
Speichern Sie als Nächstes das SAS-Token in datenbankbezogenen Anmeldeinformationen. Stellen Sie mithilfe eines Clienttools wie SSMS oder ADS eine Verbindung mit der Datenbank her, in der Sie die Ereignissitzung erstellen, und fügen Sie den folgenden T-SQL-Batch in ein neues Abfragefenster ein. Stellen Sie sicher, dass Sie mit Ihrer Benutzerdatenbank und nicht mit der
master
-Datenbank verbunden sind.Hinweis
Zum Ausführen des folgenden T-SQL-Batches ist die
CONTROL
-Datenbankberechtigung erforderlich, über die der Datenbankbesitzer (dbo
), die Mitglieder derdb_owner
-Datenbankrolle und der Administrator des logischen Servers verfügen./* 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. The name of the credential must match the URL of the blob container. */ 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 secret is the SAS token for the container. The Read, Write, and List permissions are set. */ CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<sas-token>';
Bevor Sie diesen Batch ausführen, nehmen Sie die folgenden Änderungen vor:
- Ersetzen Sie bei allen drei Vorkommen von
https://<storage-account-name>.blob.core.windows.net/<container-name>
<storage-account-name>
durch den Namen Ihres Speicherkontos und<container-name>
durch den Namen Ihres Containers. - Ersetzen Sie in der
SECRET
-Klausel<sas-token>
durch das SAS-Token, das Sie im vorherigen Schritt kopiert haben.
- Ersetzen Sie bei allen drei Vorkommen von
Erstellen, Starten und Beenden einer Ereignissitzung
Nachdem die Anmeldeinformationen erstellt wurden, können Sie die Ereignissitzung erstellen. Im Gegensatz zum Erstellen der Anmeldeinformationen erfordert das Erstellen einer Ereignissitzung nicht die Berechtigung CONTROL
. Nachdem die Anmeldeinformationen erstellt wurden, können Sie Ereignissitzungen auch dann erstellen, wenn Sie über eingeschränktere Berechtigungen verfügen. Informationen zu den erforderlichen Berechtigungen finden Sie unter Berechtigungen.
Um eine neue Ereignissitzung in SSMS zu erstellen, erweitern Sie den Knoten Erweiterte Ereignisse. Dieser Knoten befindet sich unter dem Datenbankordner in Azure SQL-Datenbank und unter dem Verwaltungsordner in Azure SQL Managed Instance. Klicken Sie mit der rechten Maustaste auf den Ordner Sitzungen, und wählen Sie Neue Sitzung… aus. Geben Sie auf der Seite Allgemein einen Namen für die Sitzung ein, die sich in diesem Beispiel example-session
befindet. Wählen Sie auf der Seite Ereignisse ein oder mehrere Ereignisse aus, die der Sitzung hinzugefügt werden sollen. In diesem Beispiel wählen wir das Ereignis sql_batch_starting
aus.
Wählen Sie auf der Seite Datenspeicher event_file
als Zieltyp aus, und fügen Sie die URL des Speichercontainers in das Feld Speicher-URL ein. Geben Sie am Ende dieser URL einen Schrägstrich (/
) gefolgt von dem Namen der Datei (BLOB) ein. In unserem Beispiel lautet der BLOB-Name example-session.xel
und die gesamte URL https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel
.
Hinweis
Verwenden Sie für SQL Managed Instance anstelle der Speichercontainer-URL auf der Seite „Datenspeicher“ die Schaltfläche „Skript“, um ein T-SQL-Skript der Sitzung zu erstellen. Geben Sie die Container-URL als Wert für das filename
-Argument an, ähnlich wie das folgende Beispiel einer SQL Managed Instance, und führen Sie das Skript aus, um die Sitzung zu erstellen.
Nachdem die Sitzung konfiguriert ist, können Sie die Schaltfläche „Skript“ auswählen, um ein T-SQL-Skript der Sitzung zu erstellen, um sie für später zu speichern. Hier ist das Skript für unsere Beispielsitzung:
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
Wählen Sie OK aus, um die Sitzung zu erstellen.
Erweitern Sie in Objekt-Explorer den Ordner Sitzungen, um die von Ihnen erstellte Ereignissitzung anzuzeigen. Standardmäßig wird die Sitzung beim Erstellen nicht gestartet. Um die Sitzung zu starten, klicken Sie mit der rechten Maustaste auf den Sitzungsnamen, und wählen Sie Sitzung starten aus. Sie können sie später beenden, indem Sie auf ähnliche Weise Sitzung beenden auswählen, sobald die Sitzung ausgeführt wird.
Wenn T-SQL-Batches in dieser Datenbank oder verwalteten Instanz ausgeführt werden, schreibt die Sitzung Ereignisse in das Blob example-session.xel
im Speichercontainer.
Um die Sitzung zu beenden, klicken Sie in Objekt-Explorer mit der rechten Maustaste darauf, und wählen Sie Sitzung beenden aus.
Anzeigen von Ereignisdaten
Sie können Ereignisdaten in der Benutzeroberfläche der SQL Server Management Studio (SSMS)-Ereignisanzeige anzeigen, in der Sie Filter und Aggregationen verwenden können, um die erfassten Daten zu analysieren. Weitere Informationen zur Verwendung der Ereignisanzeige in SSMS finden Sie unter Anzeigen von Ereignisdaten in SSMS.
Dateien aus dem Azure Blob Storage herunterladen
Tipp
Wenn Sie SSMS v19.2 oder höher verwenden, müssen Sie keine Dateien herunterladen xel
, wie in diesem Abschnitt beschrieben. In diesen Versionen liest SSMS die xel
Dateien für jede Sitzung direkt aus Azure Storage. Weitere Informationen finden Sie im Blog Verbessern erweiterter Ereignisse in Azure SQL.
Laden Sie dazu den xel
-BLOB für die Sitzung aus dem Speichercontainer herunter, und speichern Sie es als lokale Datei. Suchen Sie in Azure-Portal das verwendete Speicherkonto, wählen Sie Container unter Datenspeicher aus, und wählen Sie den Container aus, den Sie für Ihre Ereignissitzung erstellt haben. Der Blob für die Sitzung weist den Sitzungsnamen als ersten Teil seines Namens mit einem numerischen Suffix auf. Wählen Sie die Auslassungspunkte (...) aus, um das Kontextmenü für das Blob anzuzeigen, und wählen Sie Herunterladen aus.
Sie können Azure Storage-Explorer installieren, um mehrere xel
-Blobs in einem Vorgang herunterzuladen.
Sobald die xel
-Datei heruntergeladen wurde, öffnen Sie sie in SSMS. Wechseln Sie im Menü „SSMS Standard“ zu Datei, und wählen Sie Öffnen aus. Wenn Sie über eine einzelne xel
-Datei verfügen, wählen Sie Datei aus, und navigieren Sie zu der Datei, die Sie heruntergeladen haben. Wenn mehrere xel
-Dateien von derselben Ereignissitzung generiert wurden (auch als Rolloverdateien bezeichnet), können Sie das Dialogfeld Erweiterte Ereignisdateien zusammenführen verwenden, um alle Dateien in der Ereignisanzeige zu öffnen.
Anzeigen von Ereignisdaten mit T-SQL
Verwenden Sie die funktion sys.fn_xe_file_target_read_file() zum Lesen von Ereignissitzungsdaten mit T-SQL. Um diese Funktion in einer Datenbank oder einer verwalteten Instanz zu verwenden, die sich von der unterscheidet, in der die Ereignissitzung erstellt wird, gewähren Sie Zugriff auf das Datenbankmodul im Speichercontainer mit den Ereignisdatenblobs.
Eine ausführlichere exemplarische Vorgehensweise finden Sie unter Erstellen einer Ereignissitzung in SSMS.