Einstellen des Protokolliergrads (Ablaufverfolgungsebene)

Mit dem Parameter TRACE_LEVEL können Sie die Ausführlichkeit der in der Ereignistabelle gespeicherten Ereignisverfolgungsdaten steuern.

TRACE_LEVEL ist sowohl ein Objektparameter als auch ein Sitzungsparameter, d. h. Sie können den Parameter für Objekte und Sitzungen festlegen.

Erläuterungen zum Protokolliergrad (Ablaufverfolgungsebene)

Mit dem Parameter TRACE_LEVEL können Sie den Umfang der in der Ereignistabelle gespeicherten Ablaufverfolgungsereignisse festlegen. Sie können den TRACE_LEVEL-Parameter auf einen der folgenden Werte einstellen:

OFF

Keine Bereiche (Spans) oder Ablaufverfolgungsereignisse erfassen.

ALWAYS

Alle Bereiche (Spans) und Ablaufverfolgungsereignisse erfassen.

ON_EVENT

Ablaufverfolgungsereignisse nur erfassen, wenn Ihre gespeicherten Prozeduren oder UDFs explizit Ereignisse hinzufügen.

Einstellen des Protokolliergrads (Ablaufverfolgungsebene) für ein Objekt

Sie können den Protokolliergrad (Ablaufverfolgungsebene) für die folgenden Objekte einstellen:

  • Gespeicherte Prozedur

  • Benutzerdefinierte Funktion (UDF)

  • Datenbank oder Schema, die gespeicherte Prozeduren und UDFs enthalten

Gehen Sie wie folgt vor, um den Protokolliergrad (Ablaufverfolgungsebene) für ein Objekt festzulegen:

  1. Überprüfen Sie, ob Sie die Berechtigung haben, den Protokolliergrad (Ablaufverfolgungsebene) für das Objekt festzulegen.

    Sie müssen eine Rolle verwenden, der die folgenden Berechtigungen erteilt wurden oder die diese geerbt hat:

    • Die globale Berechtigung MODIFY TRACE LEVEL für das Konto

    • Die Berechtigung MODIFY für das Objekt, für das Sie den TRACE_LEVEL-Wert festlegen möchten

    Um beispielsweise der Rolle central_event_admin die Berechtigung zu erteilen, den Protokolliergrad (Ablaufverfolgungsebene) für jede Datenbank, jedes Schema, jede gespeicherte Prozedur oder UDF im Konto festzulegen (auch für diejenigen, für die die Rolle central_event_admin keine anderen Berechtigungen hat), führen Sie die folgende Anweisung aus:

    GRANT MODIFY TRACE LEVEL ON ACCOUNT TO ROLE central_event_admin;
    
    Copy

    Beachten Sie, dass die Rolle, um den Protokolliergrad (Ablaufverfolgungsebene) für eine gespeicherte Prozedur oder UDF einzustellen, auch die Berechtigung USAGE für die Datenbank und das Schema haben muss, in denen die gespeicherte Prozedur oder UDF enthalten ist.

  2. Verwenden Sie den Befehl ALTER <Objekt>, um den Parameter TRACE_LEVEL für das Objekt festzulegen.

    Um beispielsweise den Protokolliergrad (Ablaufverfolgungsebene) für eine bestimmte UDF einzustellen, stellen Sie mit ALTER FUNCTION den Parameter TRACE_LEVEL für diese UDF ein. Oder um beispielsweise den Standard-Protokolliergrad (Standard-Ablaufverfolgungsebene) für alle Funktionen und Prozeduren in einer Datenbank festzulegen, stellen Sie mit ALTER DATABASE den Parameter TRACE_LEVEL für diese Datenbank ein.

    Im folgenden Beispiel wird der Protokolliergrad (Ablaufverfolgungsebene) für alle Funktionen und Prozeduren in der Datenbank db1 auf ON_EVENT gesetzt. Im Beispiel wird dann der Protokolliergrad (Ablaufverfolgungsebene) für die UDF f1(int) in ALWAYS geändert.

    USE ROLE central_event_admin;
    
    ALTER DATABASE db1 SET TRACE_LEVEL = ON_EVENT;
    ALTER FUNCTION f1(int) SET TRACE_LEVEL = ALWAYS;
    
    Copy

    Weitere Informationen darüber, wie Snowflake den effektiven Protokolliergrad (Ablaufverfolgungsebene) bestimmt, wenn TRACE_LEVEL auf verschiedene Objekte gesetzt ist, finden Sie unter Erläuterungen zur Bestimmung des effektiven Protokolliergrads (Ablaufverfolgungsebene) durch Snowflake.

Einstellen des Protokolliergrads (Ablaufverfolgungsebene) für die aktuelle Sitzung

So stellen Sie den Protokolliergrad (Ablaufverfolgungsebene) für Aufrufe von Funktionen und Prozeduren ein, die in der aktuellen Sitzung ausgeführt werden:

  1. Überprüfen Sie, ob Sie die Berechtigung haben, den Protokolliergrad (Ablaufverfolgungsebene) für das Objekt festzulegen.

    Sie müssen eine Rolle verwenden, der die Berechtigung MODIFY SESSION TRACE LEVEL erteilt wurde oder die diese Berechtigung geerbt hat.

    Um beispielsweise der Rolle developer_debugging die Berechtigung zu erteilen, die Protokolliergrade (Ablaufverfolgungsebenen) für die aktuelle Sitzung festzulegen, führen Sie die folgende Anweisung aus:

    GRANT MODIFY SESSION TRACE LEVEL ON ACCOUNT TO ROLE developer_debugging;
    
    Copy
  2. Verwenden Sie den Befehl ALTER SESSION, um den Parameter TRACE_LEVEL für die aktuelle Sitzung festzulegen.

    USE ROLE developer_debugging;
    
    ALTER SESSION SET TRACE_LEVEL = ALWAYS;
    
    Copy

Wenn der Parameter TRACE_LEVEL für die aktuelle Sitzung und für die in dieser Sitzung aufgerufenen Funktionen und Prozeduren auf unterschiedliche Protokolliergrade (Ablaufverfolgungsebenen) gesetzt ist, bestimmt Snowflake den zu verwendenden effektiven Protokolliergrad. Siehe Erläuterungen zur Bestimmung des effektiven Protokolliergrads (Ablaufverfolgungsebene) durch Snowflake.

Erläuterungen zur Bestimmung des effektiven Protokolliergrads (Ablaufverfolgungsebene) durch Snowflake

TRACE_LEVEL ist sowohl ein Objektparameter als auch ein Sitzungsparameter.

Die Typen sowohl der Sitzungsparameter als auch der Objektparameter weisen eine Hierarchie auf, die es Ihnen ermöglicht, einen Parameter zu überschreiben, der auf einer höheren Ebene festgelegt ist:

  • Die Hierarchie für Sitzungsparameter ist: Konto » Benutzer » Sitzung.

    Das bedeutet: Sie können den Parameter für ein Konto festlegen, und dann können Sie den Parameter für einen Benutzer auf Kontoebene überschreiben und Sie können den Parameter für die aktuelle Sitzung auf Benutzerebene überschreiben.

  • Die Hierarchie für Objektparameter ist: Konto » Datenbank » Schema » Objekt.

    Das bedeutet: Sie können den Parameter für ein Konto festlegen, und dann können Sie den Parameter für eine Datenbank oder ein Schema auf Kontoebene überschreiben und Sie können den Datenbank- bzw. Schema-spezifischen Parameter für gespeicherte Prozeduren und UDFs in dieser Datenbank bzw. in diesem Schema überschreiben.

So überschreibt beispielsweise der TRACE_LEVEL für eine Funktion den TRACE_LEVEL für das Konto, das die Funktion enthält. Wenn der TRACE_LEVEL für das Konto ON_EVENT ist und der TRACE_LEVEL für eine UDF in dem Konto ALWAYS ist, dann ist der effektive TRACE_LEVEL ALWAYS (der Grad für die Funktion, nicht der Grad für das Konto):

Im folgenden Beispiel wird der Protokolliergrad ALWAYS verwendet, da die Funktion MY_UDF in der Hierarchie niedriger als die Funktion ACCOUNT ist.

ALTER ACCOUNT SET TRACE_LEVEL = ON_EVENT;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = ALWAYS;
Copy

In Fällen, in denen TRACE_LEVEL sowohl in der Sitzungs- als auch in der Objektparameterhierarchie gesetzt ist, wird der ausführlichste TRACE_LEVEL verwendet. Mit anderen Worten: ALWAYS überschreibt ON_EVENT und OFF; ON_EVENT überschreibt OFF.

Im folgenden Beispiel wird der Protokolliergrad ALWAYS verwendet, da ALWAYS ausführlicher ist als OFF.

ALTER SESSION SET TRACE_LEVEL = ALWAYS;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = OFF;
Copy