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:

  1. Erstellen Sie ein Azure Storage-Konto, oder suchen Sie nach einem geeigneten nutzbaren vorhandenen Konto.
  2. Erstellen eines Containers in diesem Speicherkonto
  3. Erstellen eines SAS-Tokens mit dem erforderlichen Zugriff für diesen Container
  4. Erstellen Sie eine Anmeldeinformation zum Speichern des SAS-Tokens in der Datenbank, in der Sie die Ereignissitzung erstellen.
  5. Erstellen, Starten und Verwenden einer 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.
  • 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 sich die Namen des verwendeten Speicherkontos und des verwendeten Containers.

Erstellen eines SAS-Token

Die Datenbank-Engine, die die Ereignissitzung ausführt, benötigt spezifischen Zugriff auf den Speichercontainer. Sie gewähren diesen Zugriff, indem Sie ein SAS-Token für den Container erstellen. Dieser Token muss die folgenden Anforderungen erfüllen:

  • Über die Berechtigungen rwl (Read, Write, List) verfügen
  • die Startzeit und die Ablaufzeit haben, die die Lebensdauer der Ereignissitzung umfasst
  • Keine Einschränkungen für IP-Adressen haben

Suchen Sie im Azure-Portal das Speicherkonto und den Container, den Sie erstellt haben. Wählen Sie den Container aus, und navigieren Sie zu Einstellungen > freigegebene Zugriffstoken. Legen Sie Berechtigungen auf Read, Write und List fest und legen Sie das Start- und Ablaufdatum und die Uhrzeit fest. Das von Ihnen erstellte SAS-Token funktioniert nur innerhalb dieses Zeitintervalls.

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.

Screenshot des Bildschirms „Freigegebene Zugriffstoken“ für einen Azure Storage-Container mit einem generierten SAS-Token für einen Beispielcontainer.

Erstellen einer Anmeldeinformationen zum Speichern des SAS-Tokens.

In Azure SQL-Datenbank verwenden Sie zum Speichern des SAS-Tokens eine datenbankbezogene Anmeldeinformationen. In Azure SQL Managed Instance verwenden Sie eine serverbezogene Anmeldeinformation.

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 der db_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://exampleaccount4xe.blob.core.windows.net/xe-example-container'
          )
    DROP DATABASE SCOPED CREDENTIAL [https://exampleaccount4xe.blob.core.windows.net/xe-example-container];

/*
The secret is the SAS token for the container. The Read, Write, and List permissions are set.
*/
CREATE DATABASE SCOPED CREDENTIAL [https://exampleaccount4xe.blob.core.windows.net/xe-example-container]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = 'sp=rwl&st=2023-10-17T23:28:32Z&se=2023-10-18T07:28:32Z&spr=https&sv=2022-11-02&sr=c&sig=REDACTED';

Bevor Sie diesen Batch ausführen, nehmen Sie die folgenden Änderungen vor:

  • Ersetzen Sie bei allen drei Vorkommen von https://exampleaccount4xe.blob.core.windows.net/xe-example-container exampleaccount4xe durch den Namen Ihres Speicherkontos und xe-example-container durch den Namen Ihres Containers.
  • Ersetzen Sie die gesamte Zeichenfolge zwischen den einzelnen Anführungszeichen in der SECRET-Klausel durch das SAS-Token, das Sie im vorherigen Schritt kopiert haben.

Erstellen, Starten und Beenden einer Ereignissitzung

Nachdem die Anmeldeinformationen mit dem SAS-Token erstellt wurden, können Sie die Ereignissitzung erstellen. Für das Erstellen einer Ereignissitzung ist die CONTROL-Berechtigung nicht erforderlich. Wenn die Anmeldeinformationen mit dem richtigen SAS-Token bereits in der Datenbank vorhanden sind, können Sie Ereignissitzungen erstellen, auch wenn Sie über einen eingeschränkteren Satz von 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.

Screenshot des Dialogfelds „Neue Sitzungs-SSMS“ mit der Seite „Ereignisauswahl“ mit ausgewähltem sql_batch_starting Ereignis.

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://exampleaccount4xe.blob.core.windows.net/xe-example-container/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.

Screenshot des Dialogfelds „Neue Sitzungs-SSMS“ mit der Seite „Datenspeicherauswahl“ mit ausgewähltem event_file Ziel und einer eingegebenen Speicher-URL.

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://exampleaccount4xe.blob.core.windows.net/xe-example-container/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.

Während T-SQL-Batches in dieser Datenbank ausgeführt werden, schreibt die Sitzung Ereignisse in das example-session.xel-Blob im xe-example-container-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. Wenn Sie diese Funktion in einer Datenbank verwenden möchten, die von der Datenbank abweicht, in der die Ereignissitzung erstellt wird, erstellen Sie datenbankbezogene Anmeldeinformationen, um der Datenbank-Engine Zugriff auf den Speichercontainer mit den Ereignis-Blobs zu gewähren.

Eine ausführlichere exemplarische Vorgehensweise finden Sie unter Erstellen einer Ereignissitzung in SSMS.