Überwachen der Sicherungsaktivität für Azure SQL Managed Instance

Gilt für: Azure SQL Managed Instance

In diesem Artikel erfahren Sie, wie Sie die Sicherungsaktivität für Azure SQL Managed Instance überwachen, indem Sie entweder die msdb-Datenbank abfragen oder XEvent-Sitzungen (erweiterte Ereignisse) konfigurieren.

Übersicht

Azure SQL Managed Instance speichert Sicherungsinformationen in der msdb-Datenbank und gibt während der Sicherungsaktivität auch Ereignisse (sogenannte erweiterte Ereignisse oder XEvents) für die Berichterstellung aus. Konfigurieren Sie eine XEvent-Sitzung, um Informationen wie Sicherungsstatus, Sicherungstyp, Größe, Uhrzeit und Speicherort in der msdb-Datenbank nachzuverfolgen. Diese Informationen können in die Sicherungsüberwachungssoftware integriert und auch für die Unternehmensaudits verwendet werden.

Bei Unternehmensaudits ist möglicherweise der Nachweis erfolgreicher Sicherungen mit dem Zeitpunkt und der Dauer der Sicherung erforderlich.

Abfragen der msdb-Datenbank

Führen Sie die folgende Abfrage aus der benutzerdefinierten Datenbank aus, um die Sicherungsaktivität anzuzeigen:

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);

Konfigurieren einer XEvent-Sitzung

Verwenden Sie das erweiterte backup_restore_progress_trace-Ereignis, um den Status Ihrer SQL Managed Instance-Sicherung aufzuzeichnen. Ändern Sie die XEvent-Sitzungen nach Bedarf, um die Informationen nachzuverfolgen, die Sie für Ihr Unternehmen benötigen. Diese T-SQL-Codeausschnitte speichern die XEvent-Sitzungen im Ringpuffer, es ist aber auch möglich, in Azure Blob Storage zu schreiben. XEvent-Sitzungen, die Daten im Ringpuffer speichern, sind auf ca. 1.000 Nachrichten beschränkt und sollten daher nur zum Nachverfolgen aktueller Aktivitäten verwendet werden. Darüber hinaus gehen Daten im Ringpuffer bei einem Failover verloren. Schreiben Sie daher für die Speicherung von Verlaufsdaten zu Sicherungen stattdessen in eine Ereignisdatei.

Einfaches Nachverfolgen

Konfigurieren Sie eine einfache XEvent-Sitzung, um einfache Ereignisse zu vollständig abgeschlossenen Sicherungen zu erfassen. Dieses Skript sammelt den Namen der Datenbank, die Gesamtanzahl der verarbeiteten Bytes und die Uhrzeit, zu der die Sicherung abgeschlossen wurde.

Verwenden Sie Transact-SQL (T-SQL), um die einfache XEvent-Sitzung zu konfigurieren:

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;

Ausführliche Nachverfolgung

Konfigurieren Sie eine ausführliche XEvent-Sitzung, um mehr Details zur Sicherungsaktivität nachzuverfolgen. Dieses Skript erfasst Start und Ende von vollständigen, differenziellen und Protokollsicherungen. Da dieses Skript ausführlicher ist, füllt es den Ringpuffer schneller auf, sodass Einträge möglicherweise schneller bereinigt werden als beim einfachen Skript.

Verwenden Sie Transact-SQL (T-SQL), um die ausführliche XEvent-Sitzung zu konfigurieren:

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;

Überwachen des Sicherungsstatus

Nachdem die XEvent-Sitzung erstellt wurde, können Sie Transact-SQL (T-SQL) verwenden, um Ringpufferergebnisse abzufragen und den Status der Sicherung zu überwachen. Nachdem das XEvent gestartet wurde, werden alle Sicherungsereignisse gesammelt, sodass der Sitzung ungefähr alle 5 bis 10 Minuten Einträge hinzugefügt werden.

Einfaches Nachverfolgen

Der folgende Transact-SQL-Code (T-SQL) fragt die einfache XEvent-Sitzung ab und gibt den Namen der Datenbank, die Gesamtanzahl der verarbeiteten Bytes und die Uhrzeit zurück, zu der die Sicherung abgeschlossen wurde:

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

Der folgende Screenshot zeigt ein Beispiel für die Ausgabe des obigen Skripts:

Screenshot der XEvent-Ausgabe

In diesem Beispiel wurden fünf Datenbanken innerhalb von 2 Stunden und 30 Minuten automatisch gesichert, und die XEvent-Sitzung umfasst 130 Einträge.

Ausführliche Nachverfolgung

Der folgende Transact-SQL-Code (T-SQL) fragt die ausführliche XEvent-Sitzung ab und gibt den Namen der Datenbank sowie den Start und das Ende von vollständigen, differenziellen und Protokollsicherungen zurück.

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

Der folgende Screenshot zeigt ein Beispiel für eine vollständige Sicherung in der XEvent-Sitzung:

XEvent-Ausgabe bei vollständigen Sicherungen

Der folgende Screenshot zeigt ein Beispiel für die Ausgabe einer differenziellen Sicherung in der XEvent-Sitzung:

XEvent-Ausgabe bei differenziellen Sicherungen

Nächste Schritte

Nachdem die Sicherung abgeschlossen ist, können Sie eine Zeitpunktwiederherstellung durchführen oder eine Richtlinie für die Langzeitaufbewahrung konfigurieren.

Weitere Informationen finden Sie unter Automatisierte Sicherungen.