Freigeben über


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 vorhandenen geeigneten Konto für die Verwendung.
  2. Erstellen Sie einen Container in diesem Speicherkonto.
  3. Gewähren Sie dem Datenbankmodul den erforderlichen Zugriff auf den Container mithilfe einer RBAC-Rollenzuweisung oder eines SAS-Tokens.
  4. Erstellen Sie Anmeldeinformationen in der Datenbank oder verwalteten Instanz, in der Sie die Ereignissitzung erstellen.
  5. 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.
  • 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

  1. 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.

  2. 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.

  3. 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 der db_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.

Gewähren des Zugriffs mithilfe eines SAS-Tokens

  1. 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.

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

  2. 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 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://<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.

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.

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://<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.

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://<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.