Ö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 (även kallade Extended Events eller XEvents) under säkerhetskopieringsaktiviteten 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 företagsgranskning.

Företagsgranskningar kan kräva bevis på lyckade säkerhetskopior, 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 (30) bs.machine_name, bs.server_name, DB_NAME(DB_ID(bs.database_name)) AS [Database Name], bs.recovery_model,
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), (CONVERT (FLOAT, bs.backup_size) /
CONVERT (FLOAT, bs.compressed_backup_size))) AS [Compression Ratio], bs.has_backup_checksums, bs.is_copy_only, bs.encryptor_type,
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_device_name AS [Backup Location], 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 DB_ID(bs.database_name) = DB_ID()
AND bs.[type] = 'D' 
ORDER BY bs.backup_finish_date DESC OPTION (RECOMPILE);

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 går ringbuffertdata förlorade vid redundansväxling. Skriv därför till en händelsefil i stället för en historisk post med säkerhetskopior.

Enkel spårning

Konfigurera en enkel XEvent-session för att samla in enkla 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 enkla XEvent-sessionen:

CREATE EVENT SESSION [Simple 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 [Simple 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å både fullständiga, differentiella säkerhetskopieringar 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 enkla skriptet.

Använd Transact-SQL (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 Transact-SQL (T-SQL) för att fråga efter ringbuffertresultat och övervaka förloppet för säkerhetskopieringen. 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.

Enkel spårning

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

WITH
a AS (SELECT xed = CAST(xet.target_data AS xml)
FROM sys.dm_xe_session_targets AS xet
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') d(n)
LEFT JOIN master.sys.databases 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 ovanstående fråga:

Screenshot of the xEvent output

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 Transact-SQL-kod (T-SQL) 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 xed = CAST(xet.target_data AS xml)
FROM sys.dm_xe_session_targets AS xet
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') d(n)
LEFT JOIN master.sys.databases 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:

XEvent output showing full backups

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

XEvent output showing differential backups

Nästa steg

När säkerhetskopieringen har slutförts kan du återställa till en tidpunkt eller konfigurera en långsiktig kvarhållningsprincip.

Mer information finns i automatiserade säkerhetskopieringar.