分享方式:


監視 Azure SQL 受控執行個體的備份活動

適用於:Azure SQL 受控執行個體

本文說明如何查詢 資料庫或設定擴充事件 (XEvent) 工作階段,以監視 msdb的備份活動。

概觀

Azure SQL 受控實例會在 msdb 資料庫中 儲存備份資訊,並在備份活動期間發出事件(也稱為 擴充事件或 XEvents),可用於報告。 設定 XEvent 工作階段,以追蹤 msdb 資料庫內的備份狀態、備份類型、大小、時間和位置等資訊。 這項資訊可以與備份監視軟體整合,也可用於企業稽核。

企業稽核可能需要備份成功證明、備份時間和備份持續時間。

查詢 msdb 資料庫

若要檢視備份活動,請從使用者定義的資料庫執行下列查詢:

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

備註

查詢msdbdbo.backupset之類的dbo.backupmediaset系統數據表時,您會看到加密相關欄位,指出備份檔未加密。 此狀態只會反映引擎層級加密。 所有自動備份 在靜止狀態下都會加密

設定 XEvent 工作階段

使用擴充事件 backup_restore_progress_trace 來記錄 SQL 受控執行個體備份的進度。 視需要修改 XEvent 工作階段,以追蹤您對業務感興趣的資訊。 這些 T SQL 程式碼片段會將 XEvent 工作階段儲存在信號緩衝區中,但也可以寫入 Azure Blob 儲存體。 將數據儲存在信號緩衝區的 XEvent 會話有大約 1,000 則訊息的限制,因此應該只用來追蹤最近的活動。 此外,在容錯移轉時,信號緩衝區資料會遺失。 因此,針對備份的歷程記錄,請改為寫入事件檔。

基本追蹤

設定基本的 XEvent 會話,以擷取完整備份的相關事件。 此指令碼會收集資料庫的名稱、處理的總位元組數,以及備份完成的時間。

使用 Transact-SQL (T-SQL) 來設定基本 XEvent 工作階段:

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;

詳細資訊追蹤

設定詳細的 XEvent 工作階段,以追蹤更多有關備份活動的詳細資料。 此指令碼會同時擷取完整、差異和記錄備份的開始和完成。 由於此腳本更詳細,因此會更快填滿環形緩衝區,專案回收速度可能會比使用基本腳本更快。

使用 T-SQL 來設定詳細 XEvent 工作階段:

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;

監視備份進度

建立 XEvent 工作階段之後,您可以使用 T-SQL 來查詢通道緩衝區結果,並監視備份的進度。 XEvent 啟動之後,會收集所有備份事件,因此大約每隔 5-10 分鐘就會將項目新增至工作階段。

基本追蹤

下列 T-SQL 程式代碼會查詢基本 XEvent 工作階段,並傳回資料庫的名稱、已處理的位元組總數,以及備份完成的時間:

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;

下列螢幕快照顯示上一個查詢輸出的範例:

XEvent 輸出的螢幕快照。

在此範例中,系統會在 2 小時和 30 分鐘的期間自動備份五個資料庫,且在 XEvent 工作階段中有 130 個項目。

詳細資訊追蹤

下列 T-SQL 程式碼會查詢詳細 XEvent 工作階段,並傳回資料庫的名稱,以及完整、差異和交易記錄備份的開始和完成時間。

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;

下列螢幕擷取畫面顯示 XEvent 工作階段中完整備份的範例:

顯示完整備份的 XEvent 輸出螢幕快照。

下列螢幕擷取畫面顯示 XEvent 工作階段中差異備份的輸出範例:

顯示差異備份的 XEvent 輸出螢幕快照。