Sdílet prostřednictvím


Rychlý start: Rozšířené události

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLDatabáze SQL v Microsoft Fabric

Rozšířené události je zjednodušená funkce monitorování výkonu, která uživatelům umožňuje shromažďovat data pro monitorování a odstraňování problémů. Pomocí rozšířených událostí můžete zobrazit podrobnosti o interních operacích databázového stroje, které jsou relevantní pro účely monitorování výkonu a řešení potíží. Další informace o rozšířených událostech najdete v tématu Přehled rozšířených událostí.

Cílem tohoto článku je pomoct správcům, technikům a vývojářům SQL, kteří s rozšířenými událostmi teprve začínají a chtějí je za pár minut používat a vidět data událostí.

Rozšířené události se také označují jako XEvents a někdy jen XE.

Po přečtení tohoto článku můžete:

  • Podívejte se, jak vytvořit relaci událostí v aplikaci SQL Server Management Studio (SSMS) s ukázkovými snímky obrazovky.
  • Korelace snímků obrazovky s ekvivalentními příkazy Transact-SQL
  • Seznamte se podrobně s pojmy a koncepty uživatelského rozhraní SSMS a příkazy T-SQL XEvents.
  • Zjistěte, jak otestovat relaci události.
  • Pochopení výsledků relace, mezi které patří:
    • Dostupné možnosti úložiště výsledků
    • Zpracované a nezpracované výsledky
    • Nástroje pro zobrazení výsledků různými způsoby a v různých časových měřítkech
  • Podívejte se, jak můžete vyhledat a zjistit všechny dostupné události.
  • Seznamte se s relacemi mezi zobrazeními systémových rozšířených událostí.

Návod

Další informace o rozšířených událostech ve službě Azure SQL Database, včetně ukázek kódu, najdete v tématu Rozšířené události ve službě Azure SQL Database a azure SQL Managed Instance.

Požadavky

Abyste mohli začít, musíte:

  • Nainstalujte nejnovější verzi aplikace SQL Server Management Studio (SSMS).
  • Ujistěte se, že váš účet má CREATE ANY EVENT SESSION (zavedený v SQL Serveru 2022) nebo ALTER ANY EVENT SESSIONoprávnění serveru.
  • Kromě toho při použití aplikace SSMS a pro zobrazení vytvořených relací vyžaduje přihlášení oprávnění VIEW SERVER PERFORMANCE STATE.
  • V případě Azure SQL Database, Azure SQL Managed Instance a SQL databáze ve Fabric jsou soubory událostí rozšířených událostí ukládány ve službě Azure Storage. Budete potřebovat účet úložiště Azure.

Podrobnosti o zabezpečení a oprávněních souvisejících s rozšířenými událostmi jsou k dispozici na konci tohoto článku v dodatku.

Rozšířené události ve SQL Server Management Studio (SSMS)

SSMS poskytuje plně funkční uživatelské rozhraní pro rozšířené události. Mnoho scénářů lze provést pomocí tohoto uživatelského rozhraní, aniž byste museli používat zobrazení T-SQL nebo zobrazení dynamické správy .

V následující části můžete vidět postup pro vytvoření relace rozšířených událostí a jak zobrazit data, která hlásí. Jakmile si projdete praktické kroky nebo si je projdete v tomto článku, můžete si přečíst o konceptech, které jsou součástí kroků pro hlubší pochopení.

Vytvořte relaci událostí v SSMS

Když vytvoříte relaci rozšířených událostí, sdělíte systému:

  • Které události vás zajímají.
  • Jak chcete, aby systém hlásil data za vás.

Ukázka otevře dialogové okno Nová relace, ve které se dozvíte, jak používat jeho čtyři stránky nazvané:

  • General
  • Events
  • Úložiště dat
  • Rozšířený

Text a podpůrné snímky obrazovky se můžou mírně lišit ve vaší verzi aplikace SSMS, ale přesto by měly být relevantní pro vysvětlení základních konceptů.

  1. Připojte se k instanci databázového stroje. Rozšířené události se podporují od SQL Serveru 2014 (12.x), ve službě Azure SQL Database a ve spravované instanci Azure SQL.

  2. V Průzkumníku objektů vyberte Možnost Správa > rozšířených událostí. Ve službě Azure SQL Database jsou relace událostí omezené na databázi, takže možnost Rozšířené události se nachází v každé databázi, nikoli ve Správě.

  3. Klikněte pravým tlačítkem myši na složku Relace a vyberte Možnost Nová relace.... Dialogové okno Nová relace... je vhodnější než Průvodce novou relací, i když jsou obě podobné.

    Návod

    V těchto krocích kurzu se nedostanete na OK , dokud nepřejdete na všechny čtyři stránky: Obecné, Události, Úložiště dat a Upřesnit.

  4. Vyberte stránku Obecné . Do textového pole YourSession zadejte nebo jakýkoli název, který se vám líbí. Zatím nevybírejte OK , protože stále potřebujete zadat některé podrobnosti na jiných stránkách.

  5. Vyberte stránku Události .

  6. V oblasti Knihovna událostí v rozevíracím seznamu zvolte pouze názvy událostí.

    • Zadejte sql_statement do textového pole. Tento filtr filtruje seznam tak, aby zobrazoval pouze události s sql_statement názvem.
    • Posuňte se a vyberte událost s názvem sql_statement_completed.
    • Výběrem tlačítka > šipky vpravo přesuňte událost do pole Vybrané události .
  7. Zůstaňte na stránce Události a vyberte tlačítko Konfigurovat . Otevře se okno Možnosti konfigurace události pro vybrané události.

    Snímek obrazovky > nové relace > s výběrem z knihovny událostí. sql_statement_completed je vybrána. Tlačítko Konfigurovat je další akce.

  8. Vyberte kartu Filtr (predikát ). Dále vyberte nový řádek filtru s textem Kliknutím sem přidejte klauzuli. V tomto kurzu nakonfiguruje tento filtr (označovaný také jako predikát) tak, aby zachytil všechny SELECT příkazy pomocí HAVING klauzule.

  9. V rozevíracím seznamu Pole zvolte sqlserver.sql_text.

    • V části Operátor zvolte like_i_sql_unicode_string. Zde i v názvu operátoru znamená nerozlišující velikost písmen.
    • Do pole Hodnota zadejte %SELECT%HAVING%. V této části jsou znaky procenta (%) zástupnými znaky, které nahrazují libovolný řetězec znaků.

    Poznámka:

    V názvu sqlserver pole se dvěma částmi je název balíčku a sql_text název pole. Událost, která jsme zvolili dříve, musí být ve stejném balíčku jako pole, sql_statement_completedkteré zvolíme.

    > Events > Configure > Filter (Predicate) > Field.

  10. Vyberte stránku Úložiště dat .

  11. V oblasti Cíle vyberte nový řádek Typ cíle s textem Kliknutím sem přidejte cíl. V tomto kurzu napíšeme data zachycených rozšířených událostí do souboru události. To znamená, že data události jsou uložená v souboru, který můžeme otevřít a zobrazit později. Počínaje SQL Serverem 2019 (15.x) je možné zapsat také data událostí, která se mají ukládat do Služby Azure Storage. V případě Azure SQL Database, Azure SQL Managed Instance a databáze SQL v Azure Fabric jsou soubory událostí vždy uložené ve službě Azure Storage.

    • V rozevíracím seznamu Typ zvolte event_file.
  12. Do oblasti Vlastnosti zadejte úplnou cestu a název souboru do názvu souboru v textovém poli serveru. Můžete také použít tlačítko Procházet . Přípona názvu souboru musí být xel. V našem příkladu jsme použili C:\temp\YourSession_Target.xel.

    >

  13. Vyberte stránku Pokročilé. Při výchozí konfiguraci by tento cíl rozšířené relace událostí .xel měl mít minimální nebo žádný vliv na výkon serveru, a tato nastavení na stránce Upřesnit lze použít k úpravě využití prostředků a latence.

    Snímek obrazovky nové relace > Pokročilé.

  14. Výběrem tlačítka OK dole vytvořte tuto relaci události.

  15. Zpátky v Průzkumníku objektů SSMS otevřete nebo aktualizujte složku Sezení a zobrazte nový uzel pro relaci rozšířených YourSession událostí. Relace ještě nezačala. V tomto kurzu ho spustíme později.

Úprava seance událostí v SSMS

V Průzkumníku objektů SSMS můžete relaci události upravit tak, že kliknete pravým tlačítkem myši na její uzel a vyberete Vlastnosti. Zobrazí se stejné dialogové okno s více stránkami.

Vytvořte relaci událostí pomocí T-SQL

V nástroji SSMS můžete vygenerovat skript T-SQL pro vytvoření relace událostí následujícím způsobem:

  • Klikněte pravým tlačítkem myši na uzel relace události a pak vyberte Skriptovat relaci jako > VYTVOŘIT do > schránky.
  • Vložte ho do libovolného textového editoru.

Tady je vygenerovaný CREATE EVENT SESSION příkaz T-SQL pro YourSession:

CREATE EVENT SESSION [YourSession]
    ON SERVER -- For SQL Server and Azure SQL Managed Instance
    -- ON DATABASE -- For Azure SQL Database
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION(sqlserver.sql_text)
        WHERE
        ( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
        )
    )
    ADD TARGET package0.event_file
    (SET filename=N'C:\temp\YourSession_Target.xel');
GO

Poznámka:

Ve službě Azure SQL Database použijte ON DATABASE místo ON SERVER.

Podmíněné odstranění relace události

Před příkazem CREATE EVENT SESSION můžete podmíněně spustit DROP EVENT SESSION příkaz pro případ, že relace se stejným názvem již existuje. Tím se odstraní existující relace. Bez toho pokus o vytvoření relace se stejným názvem vyvolá chybu.

IF EXISTS (SELECT *
      FROM sys.server_event_sessions
      WHERE name = 'YourSession')
BEGIN
    DROP EVENT SESSION YourSession
          ON SERVER;
END
GO

Spuštění a zastavení relace událostí pomocí T-SQL

Když vytvoříte relaci událostí, výchozí hodnota je, aby se nespustí automaticky. Relaci událostí můžete kdykoli spustit nebo zastavit pomocí následujícího ALTER EVENT SESSION příkazu T-SQL.

ALTER EVENT SESSION [YourSession]
      ON SERVER
    STATE = START; -- STOP;

Máte možnost nakonfigurovat relaci událostí tak, aby se automaticky spustila při spuštění instance databázového stroje. Podívejte se na klíčové slovo STARTUP STATE = ON v CREATE EVENT SESSION.

Uživatelské rozhraní SSMS nabízí odpovídající zaškrtávací políčko Spustit relaci událostí při startu serveru na stránce Nové sezení - Obecné>.

Testovat událostní relaci

Otestujte relaci události pomocí následujícího postupu:

  1. V Průzkumníku objektů klikněte pravým tlačítkem myši na uzel relace události a pak vyberte Spustit relaci.
  2. Během připojení ke stejnému serveru (nebo stejné databázi ve službě Azure SQL Database), ve které jste vytvořili relaci událostí, spusťte několikrát následující SELECT...HAVING příkaz. Zvažte změnu hodnoty v HAVING klauzuli pro každé spuštění a střídejte mezi hodnotami 2 a 3. To vám umožní zobrazit rozdíly ve výsledcích.
  3. Klikněte pravým tlačítkem na uzel relace a vyberte Zastavit relaci.
  4. Přečtěte si další dílčí část o tom, jak vybrat a zobrazit výsledky.
SELECT c.name,
    COUNT(*) AS [Count-Per-Column-Repeated-Name]
FROM sys.syscolumns AS c
INNER JOIN sys.sysobjects AS o
    ON o.id = c.id
WHERE o.type = 'V'
    AND c.name LIKE '%event%'
GROUP BY c.name
HAVING Count(*) >= 3 --2     -- Try both values during session.
ORDER BY c.name;

Pro úplnost zde je příklad výstupu z předchozího SELECT...HAVING.

/* Approximate output, 6 rows, all HAVING Count >= 3:
name                   Count-Per-Column-Repeated-Name
---------------------  ------------------------------
event_group_type       4
event_group_type_desc  4
event_session_address  5
event_session_id       5
is_trigger_event       4
trace_event_id         3
*/

Zobrazení dat relace událostí jako XML

V okně dotazu v SSMS spusťte následující SELECT příkaz, abyste viděli data událostí zachycená vaší relací. Každý řádek představuje jeden výskyt události. Změní CAST(... AS xml) datový typ sloupce z nvarcharu na xml. Díky tomu můžete vybrat hodnotu sloupce a otevřít ji v novém okně, abyste ji mohli snadněji číst.

Poznámka:

Cíl event_file vždy vloží číselnou část do xel názvu souboru. Před spuštěním následujícího dotazu musíte zkopírovat skutečný úplný název xel souboru, který obsahuje tuto číselnou část, a vložit ho SELECT do příkazu. V následujícím příkladu je číselná část _0_131085363367310000.

SELECT object_name,
    file_name,
    file_offset,
    event_data,
    'CLICK_NEXT_CELL_TO_BROWSE_XML RESULTS!' AS [CLICK_NEXT_CELL_TO_BROWSE_XML_RESULTS],
    CAST(event_data AS XML) AS [event_data_XML]
-- TODO: In the SSMS results grid, click this XML cell
FROM sys.fn_xe_file_target_read_file(
    'C:\Temp\YourSession_Target_0_131085363367310000.xel', NULL, NULL, NULL
);

Tento dotaz nabízí dva způsoby zobrazení úplných výsledků libovolného řádku události:

  • Spusťte SELECT v aplikaci SSMS a poté vyberte buňku ve sloupci event_data_XML.

  • Zkopírujte řetězec XML z buňky ve sloupci event_data . Vložte do libovolného textového editoru, jako je Poznámkový blok, a uložte soubor s příponou xml. Pak soubor otevřete v prohlížeči nebo editoru, který dokáže zobrazit data XML.

Data událostí v XML

Dále uvidíme část výsledků, které jsou ve formátu XML. Následující kód XML je upraven pro stručnost. <data name="row_count"> zobrazí hodnotu 6, která odpovídá našim šesti řádkům výsledků zobrazeným dříve. A tak vidíme celý SELECT výrok.

<event name="sql_statement_completed" package="sqlserver" timestamp="2016-05-24T04:06:08.997Z">
  <data name="duration">
    <value>111021</value>
  </data>
  <data name="cpu_time">
    <value>109000</value>
  </data>
  <data name="physical_reads">
    <value>0</value>
  </data>
  <data name="last_row_count">
    <value>6</value>
  </data>
  <data name="offset">
    <value>0</value>
  </data>
  <data name="offset_end">
    <value>584</value>
  </data>
  <data name="statement">
    <value>SELECT c.name,
            COUNT(*) AS [Count-Per-Column-Repeated-Name]
        FROM sys.syscolumns AS c
        INNER JOIN sys.sysobjects AS o
            ON o.id = c.id
        WHERE o.type = 'V'
            AND c.name LIKE '%event%'
        GROUP BY c.name
        HAVING Count(*) >= 3 --2     -- Try both values during session.
    ORDER BY c.name;</value>
      </data>
</event>

Zobrazení dat události relace v SSMS

V uživatelském rozhraní SSMS existuje několik pokročilých funkcí, které můžete použít k zobrazení dat zachycených relací událostí. Další informace naleznete v tématu Zobrazení dat událostí v aplikaci SQL Server Management Studio.

Začnete s možnostmi místní nabídky s popiskem Zobrazit cílová data a Sledovat živá data.

Zobrazení cílových dat

V Průzkumníku objektů SSMS můžete kliknout pravým tlačítkem myši na cílový uzel, který je pod uzlem relace události, například package0.event_counter. V místní nabídce vyberte Zobrazit cílová data. SSMS zobrazí data.

Zobrazení se neaktualizuje, když v relaci probíhají nové události. Můžete ale znovu vybrat Zobrazit cílová data .

Sledování živých dat

V Průzkumníku objektů SSMS můžete kliknout pravým tlačítkem myši na uzel relace události. V místní nabídce vyberte Sledovat živá data. SSMS zobrazuje příchozí data v reálném čase.

Termíny a koncepty v rozšířených událostech

Následující tabulka uvádí termíny používané pro rozšířené události a popisuje jejich významy.

Term Description
event session Konstruktor vycentrovaný kolem jedné nebo více událostí a podpůrných položek, jako jsou akce, jsou cíle. Příkaz CREATE EVENT SESSION vytvoří každou relaci události. Relaci události můžete ALTER spustit a zastavit najednou.

Relace událostí se někdy označuje jako jen relace, když je z kontextu jasné, že to znamená relace událostí.
Další podrobnosti o relacích událostí jsou popsány v tématu : Relace rozšířených událostí.
event Konkrétní výskyt v systému, který je sledovaný aktivní relací událostí.

sql_statement_completed Například událost představuje okamžik, kdy se dokončí všechny zadané příkazy T-SQL. Událost může hlásit dobu trvání a další data.
target Položka, která přijímá výstupní data z zachycené události. Cílové zařízení zobrazí data vám.

Mezi příklady patří cíl event_file, použitý dříve v tomto rychlém startu, a cíl ring_buffer, který uchovává nejnovější události v paměti.
Jakýkoli druh cíle lze použít pro jakoukoli událostní relaci. Podrobnosti najdete v tématu Cíle pro rozšířené události.
action Pole spojené s událostí. Data z pole se odesílají do cíle. Pole akce úzce souvisí s predikátem filtru.
predicatenebo filtr Test dat v poli události, který se používá, aby se do cíle odeslala jenom zajímavá podmnožina výskytů událostí.

Filtr může například obsahovat pouze výskyty sql_statement_completed událostí, ve kterých příkaz T-SQL obsahoval řetězec HAVING.
package Kvalifikátor názvu, který je připojen ke každé položce v sadě položek, jež se soustředí kolem jádra událostí.

Například balíček může obsahovat události týkající se textu T-SQL. Jedna událost může být o všech T-SQL v rámci dávky. Zatímco další užší událost je o jednotlivých příkazech T-SQL. Pro každý příkaz T-SQL navíc existují started a completed události.
Pole vhodná pro události jsou také v balíčku s událostmi. Většina cílů se nachází package0 a používá se s událostmi z mnoha dalších balíčků.

Rozšířené scénáře událostí a podrobnosti o využití

Existuje mnoho scénářů použití rozšířených událostí k monitorování a řešení potíží s databázovým strojem a dotazovacími úlohami. Následující články obsahují příklady použití scénářů souvisejících se zámkem:

Zjišťování událostí dostupných v balíčcích

Následující dotaz vrátí řádek pro každou dostupnou událost, jejíž název obsahuje tři znakové řetězce sql. Klauzuli LIKE můžete upravit a vyhledat různé názvy událostí. Sada výsledků také identifikuje balíček, který obsahuje událost.

SELECT -- Find an event you want.
    p.name AS [Package-Name],
    o.object_type,
    o.name AS [Object-Name],
    o.description AS [Object-Descr],
    p.guid AS [Package-Guid]
FROM sys.dm_xe_packages AS p
INNER JOIN sys.dm_xe_objects AS o
    ON p.guid = o.package_guid
WHERE o.object_type = 'event' --'action'  --'target'
    AND p.name LIKE '%'
    AND o.name LIKE '%sql%'
ORDER BY p.name,
    o.object_type,
    o.name;

Následující příklad výsledku ukazuje vrácený řádek, otočený sem do formátu column name = value. Data pocházejí z sql_statement_completed události, která byla použita v předchozích ukázkových krocích. Popis objektu (událost v tomto příkladu) slouží jako řetězec dokumentace.

Package-Name = sqlserver
object_type  = event
Object-Name  = sql_statement_completed
Object-Descr = Occurs when a Transact-SQL statement has completed.
Package-Guid = 655FD93F-3364-40D5-B2BA-330F7FFB6491

Vyhledání událostí pomocí uživatelského rozhraní SSMS

Další možností pro vyhledání událostí podle názvu je použití dialogového okna Nová relace Události Knihovna událostí, které je zobrazeno na předchozím snímku obrazovky. Můžete zadat částečný název události a najít všechny odpovídající názvy událostí.

Třídy událostí trasování SQL

Popis použití rozšířených událostí s třídami událostí trasování SQL a sloupci je k dispozici na adrese: Zobrazení ekvivalentů rozšířených událostí ke třídám událostí trasování SQL.

Trasování událostí pro Windows (ETW)

Popisy použití rozšířených událostí s trasováním událostí pro Windows (ETW) jsou k dispozici na adrese:

Systémové relace událostí

V SQL Serveru a službě Azure SQL Managed Instance se ve výchozím nastavení vytvoří několik relací systémových událostí a nakonfiguruje se tak, aby se spouštěly při spuštění databázového stroje. Stejně jako většina relací událostí spotřebovávají malé množství prostředků a nemají významný vliv na výkon úloh. Microsoft doporučuje, aby tyto relace zůstaly aktivované a běžely. Zdravotní relace, zejména relace system_health, jsou často užitečné pro monitorování a řešení potíží.

Tyto relace událostí můžete zobrazit v Průzkumníku objektů SSMS v části Správa > Rozšířené události > Relace. Například na SQL Serveru jsou tyto systémové relace událostí:

  • AlwaysOn_health
  • system_health
  • telemetry_events

Zprostředkovatel PowerShellu

Rozšířené události můžete spravovat pomocí poskytovatele POWERShellu SQL Serveru. Další informace naleznete v tématu Použití zprostředkovatele PowerShellu pro rozšířené události.

Systémová zobrazení

Systémová zobrazení rozšířených událostí zahrnují:

  • Zobrazení katalogu: Informace o relacích událostí definovaných uživatelem CREATE EVENT SESSION.
  • Zobrazení dynamické správy (DMV): informace o aktivních (spuštěných) sezeních událostí.

Funkce SELECTs a JOINs ze systémových zobrazení pro rozšířené události v SQL Serveru poskytuje informace o:

  • Jak spojit zobrazení
  • Několik užitečných dotazů založených na těchto zobrazeních
  • Korelace mezi:
    • Zobrazení sloupců
    • CREATE EVENT SESSION klauzule
    • Uživatelské rozhraní SSMS

Příloha: Dotazy k vyhledání držitelů oprávnění rozšířených událostí

Oprávnění uvedená v tomto článku jsou:

  • ALTER ANY EVENT SESSION
  • VIEW SERVER STATE
  • CONTROL SERVER

Následující SELECT...UNION ALL příkaz vrátí řádky, které ukazují, kdo má potřebná oprávnění k vytváření relací událostí a dotazování zobrazení katalogu systému pro rozšířené události.

-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes all lower permissions like
-- 'ALTER ANY EVENT SESSION' and 'VIEW SERVER STATE'.
SELECT 'Owner-is-Principal' AS [Type-That-Owns-Permission],
    NULL AS [Role-Name],
    prin.name AS [Owner-Name],
    PERM.permission_name COLLATE Latin1_General_CI_AS_KS_WS AS [Permission-Name]
FROM sys.server_permissions AS PERM
INNER JOIN sys.server_principals AS prin
    ON prin.principal_id = PERM.grantee_principal_id
WHERE PERM.permission_name IN (
    'CREATE ANY EVENT SESSION',
    'ALTER ANY EVENT SESSION',
    'VIEW SERVER PERFORMANCE STATE',
    'VIEW SERVER STATE',
    'CONTROL SERVER'
)
UNION ALL
-- Plus check for members of the 'sysadmin' fixed server role,
-- because 'sysadmin' includes the 'CONTROL SERVER' permission.
SELECT 'Owner-is-Role',
    prin.name, -- [Role-Name]
    CAST((IsNull(pri2.name, N'No members')) AS NVARCHAR(128)),
    NULL
FROM sys.server_role_members AS rolm
RIGHT JOIN sys.server_principals AS prin
    ON prin.principal_id = rolm.role_principal_id
LEFT JOIN sys.server_principals AS pri2
    ON rolm.member_principal_id = pri2.principal_id
WHERE prin.name = 'sysadmin';

HAS_PERMS_BY_NAME

Následující SELECT příkaz hlásí vaše oprávnění. Spoléhá na předdefinované funkce HAS_PERMS_BY_NAME.

Pokud máte navíc oprávnění k dočasnému zosobnění jiných přihlášení, můžete zrušit komentář EXECUTE AS a REVERT příkazy, abyste zjistili, jestli ostatní přihlášení obsahují ALTER ANY EVENT SESSION oprávnění.

--EXECUTE AS LOGIN = 'LoginNameHere';
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'ALTER ANY EVENT SESSION');
--REVERT;