Dela via


Övervaka säkerhetskopieringsaktivitet för Azure SQL Managed Instance

gäller för:Azure SQL Managed Instance

I den msdb här artikeln får du lära dig hur du övervakar säkerhetskopieringsaktiviteten för Azure SQL Managed Instance genom att antingen köra frågor mot databasen eller genom att konfigurera XEvent-sessioner (extended event).

Översikt

Azure SQL Managed Instance lagrar säkerhetskopieringsinformation i msdb-databasen och genererar även händelser (kallas även extended events eller XEvents) under säkerhetskopieringsaktiviteten, som kan användas för rapportering. Konfigurera en XEvent-session för att spåra information som säkerhetskopieringsstatus, typ av säkerhetskopiering, storlek, tid och plats i msdb databasen. Den här informationen kan integreras med programvara för säkerhetskopieringsövervakning och även användas för Enterprise Audit.

Företagsgranskningar kan kräva bevis på lyckade säkerhetskopieringar, tidpunkten för säkerhetskopieringen och säkerhetskopieringens varaktighet.

Fråga msdb-databasen

Om du vill visa säkerhetskopieringsaktiviteten kör du följande fråga från en användardefinierad databas:

SELECT TOP (100)
    DB_NAME(DB_ID(bs.database_name)) AS [Database Name],
    CONVERT (BIGINT, bs.backup_size / 1048576) AS [Uncompressed Backup Size (MB)],
    CONVERT (BIGINT, bs.compressed_backup_size / 1048576) AS [Compressed Backup Size (MB)],
    CONVERT (NUMERIC (20, 2),
    CASE
        WHEN bs.compressed_backup_size > 0
        THEN CONVERT (FLOAT, bs.backup_size) / CONVERT (FLOAT, bs.compressed_backup_size)
        ELSE NULL
    END
    ) AS [Compression Ratio],
    bs.is_copy_only,
    -- bs.user_name, -- Applicable only for user-initiated COPY ONLY backups.
    bs.has_backup_checksums,
    DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date) AS [Backup Elapsed Time (sec)],
    bs.backup_finish_date AS [Backup Finish Date],
    bmf.physical_block_size
FROM msdb.dbo.backupset AS bs WITH (NOLOCK)
     INNER JOIN msdb.dbo.backupmediafamily AS bmf WITH (NOLOCK)
         ON bs.media_set_id = bmf.media_set_id
WHERE bs.[type] = 'D'
    -- AND bs.[is_copy_only] = 1  -- If you want to filter out for user initiated COPY ONLY backups.
ORDER BY bs.backup_finish_date DESC
OPTION (RECOMPILE); -- Optimize for ad hoc execution

Anmärkning

När du kör frågor mot msdb systemtabeller som dbo.backupmediaset eller dbo.backupsetvisas krypteringsrelaterade fält som anger att säkerhetskopieringsfiler inte är krypterade. Den här statusen återspeglar endast kryptering på motornivå. Alla automatiska säkerhetskopior krypteras i vila.

Konfigurera XEvent-session

Använd den utökade händelsen backup_restore_progress_trace för att registrera förloppet för din SQL Managed Instance-säkerhetskopiering. Ändra XEvent-sessionerna efter behov för att spåra den information som du är intresserad av för ditt företag. Dessa T-SQL-kodfragment lagrar XEvent-sessionerna i ringbufferten, men det går också att skriva till Azure Blob Storage. XEvent-sessioner som lagrar data i ringbufferten har en gräns på cirka 1 000 meddelanden, så bör endast användas för att spåra den senaste aktiviteten. Dessutom förloras data i ringbufferten vid redundansväxling. För en historisk journal över säkerhetskopior, skriv i stället till en händelsefil.

Grundläggande spårning

Konfigurera en grundläggande XEvent-session för att samla in händelser om fullständiga säkerhetskopior. Det här skriptet samlar in namnet på databasen, det totala antalet bearbetade byte och den tid då säkerhetskopieringen slutfördes.

Använd Transact-SQL (T-SQL) för att konfigurera den grundläggande XEvent-sessionen:

CREATE EVENT SESSION [Basic backup trace] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace
(
        WHERE operation_type = 0
        AND trace_message LIKE '%100 percent%'
)
ADD TARGET package0.ring_buffer WITH (STARTUP_STATE = ON);
GO

ALTER EVENT SESSION [Basic backup trace] ON SERVER
STATE = start;

Utförlig spårning

Konfigurera en utförlig XEvent-session för att spåra mer information om din säkerhetskopieringsaktivitet. Det här skriptet samlar in start och slut på fullständiga säkerhetskopior, differentiella säkerhetskopior och loggsäkerhetskopior. Eftersom det här skriptet är mer utförligt fyller det upp ringbufferten snabbare, så poster kan återanvändas snabbare än med det grundläggande skriptet.

Använd T-SQL för att konfigurera den utförliga XEvent-sessionen:

CREATE EVENT SESSION [Verbose backup trace] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace(
    WHERE (
              [operation_type]=(0) AND (
              [trace_message] like '%100 percent%' OR
              [trace_message] like '%BACKUP DATABASE%' OR [trace_message] like '%BACKUP LOG%'))
       )
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
       MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,
       TRACK_CAUSALITY=OFF,STARTUP_STATE=ON)

ALTER EVENT SESSION [Verbose backup trace] ON SERVER
STATE = start;

Övervaka säkerhetskopieringsstatus

När XEvent-sessionen har skapats kan du använda T-SQL för att köra frågor mot ringbuffertresultat och övervaka säkerhetskopieringens förlopp. När XEvent startar samlar den in alla säkerhetskopieringshändelser så att poster läggs till i sessionen ungefär var 5–10:e minut.

Grundläggande spårning

Följande T-SQL-kod frågar den grundläggande XEvent-sessionen och returnerar namnet på databasen, det totala antalet bearbetade byte och den tid då säkerhetskopieringen slutfördes:

WITH
a AS (SELECT CAST (xet.target_data AS XML) AS xed
    FROM sys.dm_xe_session_targets AS xet
         INNER JOIN sys.dm_xe_sessions AS xe
             ON (xe.address = xet.event_session_address)
    WHERE xe.name = 'Backup trace'),
b AS (SELECT d.n.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
           ISNULL(db.name, d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)')) AS database_name,
           d.n.value('(data[@name="trace_message"]/value)[1]', 'varchar(4000)') AS trace_message
    FROM a
CROSS APPLY xed.nodes('/RingBufferTarget/event') AS d(n)
         LEFT OUTER JOIN master.sys.databases AS db
             ON db.physical_database_name = d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)'))
SELECT * FROM b;

Följande skärmbild visar ett exempel på utdata från föregående fråga:

Skärmbild av XEvent-utdata.

I det här exemplet säkerhetskopierades fem databaser automatiskt under loppet av 2 timmar och 30 minuter, och det finns 130 poster i XEvent-sessionen.

Utförlig spårning

Följande T-SQL-kod frågar den utförliga XEvent-sessionen och returnerar namnet på databasen, samt start och slut för både fullständiga, differentiella säkerhetskopieringar och loggsäkerhetskopior.

WITH
a AS (SELECT CAST (xet.target_data AS XML) AS xed
    FROM sys.dm_xe_session_targets AS xet
         INNER JOIN sys.dm_xe_sessions AS xe
             ON (xe.address = xet.event_session_address)
    WHERE xe.name = 'Verbose backup trace'),
b AS (SELECT d.n.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
           ISNULL(db.name, d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)')) AS database_name,
           d.n.value('(data[@name="trace_message"]/value)[1]', 'varchar(4000)') AS trace_message
    FROM a
CROSS APPLY xed.nodes('/RingBufferTarget/event') AS d(n)
         LEFT OUTER JOIN master.sys.databases AS db
             ON db.physical_database_name = d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)'))
SELECT * FROM b;

Följande skärmbild visar ett exempel på en fullständig säkerhetskopia i XEvent-sessionen:

Skärmbild av XEvent-utdata som visar fullständiga säkerhetskopior.

Följande skärmbild visar ett exempel på utdata från en differentiell säkerhetskopia i XEvent-sessionen:

Skärmbild av XEvent-utdata som visar differentiella säkerhetskopior.