Monitorar a atividade de backup para a Instância Gerenciada SQL do Azure

Aplica-se a:Azure SQL Managed Instance

Este artigo ensina como monitorar a atividade de backup para a Instância Gerenciada SQL do Azure consultando o msdb banco de dados ou configurando sessões de eventos estendidos (XEvent).

Visão geral

A Instância Gerenciada SQL do Azure armazena informações de backup no banco de dados msdb e também emite eventos (também conhecidos como Eventos Estendidos ou XEvents) durante a atividade de backup, que podem ser usados para relatórios. Configure uma sessão XEvent para controlar informações como status de backup, tipo de backup, tamanho, hora e local no msdb banco de dados. Essas informações podem ser integradas ao software de monitoramento de backup e também usadas para auditoria empresarial.

As auditorias corporativas podem exigir prova de backups bem-sucedidos, tempo de backup e duração do backup.

Consultar banco de dados msdb

Para consultar o histórico de cópias de segurança em msdb, precisa de acesso à base de dados msdb na instância gerida do SQL. Por exemplo, pode obter acesso sendo membro de uma função que concede SELECT em msdb.dbo.backupset e msdb.dbo.backupmediafamily.

Para visualizar a atividade de backup, execute a seguinte consulta a partir de uma base de dados definida pelo utilizador:

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

Observação

Ao consultar tabelas do msdb sistema, como dbo.backupmediaset ou dbo.backupset, você vê campos relacionados à criptografia indicando que os arquivos de backup não estão criptografados. Esse status reflete apenas a criptografia no nível do mecanismo. Todos os backups automáticos são criptografados em repouso.

Configurar sessão XEvent

Use o evento backup_restore_progress_trace estendido para registar o progresso do seu backup SQL Managed Instance. Modifique as sessões do XEvent conforme necessário para acompanhar as informações em que você está interessado para sua empresa. Estes excertos T-SQL armazenam as sessões XEvent no buffer de anel, mas também pode escrever no Armazenamento de Blobs do Azure. As sessões XEvent que armazenam dados no anel buffer têm um limite de cerca de 1.000 mensagens, por isso usa-as apenas para acompanhar atividade recente. Além disso, os dados do buffer de anel são perdidos após o failover. Para um registo histórico de backups, escreva num ficheiro de evento em vez disso.

Para criar e iniciar uma sessão XEvent, precisas da ALTER ANY EVENT SESSION permissão sobre a instância gerida.

A tabela seguinte resume as duas sessões descritas neste artigo:

Session Eventos capturados Destino Caso de utilização
Rastreio básico de backup Conclusão (100 por cento) das cópias de segurança completas Buffer de anel Monitorizar cópias de segurança completas recentemente concluídas.
Registo detalhado da cópia de segurança Início e fim das cópias de segurança completas, diferenciais e de registo Buffer de anel Acompanhe a atividade detalhada em todos os tipos de backup.

Configurar o rastreamento básico

Configure uma sessão XEvent básica para capturar eventos sobre backups completos. Esse script coleta o nome do banco de dados, o número total de bytes processados e o tempo de conclusão do backup.

Use Transact-SQL (T-SQL) para configurar a sessão XEvent básica:

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;

Para confirmar que a sessão está a decorrer, consulte sys.dm_xe_sessions por Basic backup trace.

Configurar o rastreamento verboso

Configure uma sessão XEvent detalhada para rastrear mais detalhes sobre sua atividade de backup. Esse script captura o início e o fim de backups completos, diferenciais e de log. Como este script é mais verboso, ele preenche o buffer de anel de forma mais rápida, então as entradas podem ser recicladas mais rapidamente do que com o script básico.

Use o T-SQL para configurar a sessão XEvent detalhada:

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;

Para confirmar que a sessão está a decorrer, consulte sys.dm_xe_sessions por Verbose backup trace.

Monitorar o progresso do backup

Depois que a sessão XEvent é criada, você pode usar o T-SQL para consultar os resultados do buffer de anel e monitorar o progresso do backup. Depois que o XEvent é iniciado, ele coleta todos os eventos de backup para que as entradas sejam adicionadas à sessão aproximadamente a cada 5-10 minutos.

Consultar a sessão básica de monitorização

O seguinte código T-SQL consulta a Basic backup trace sessão e devolve o nome da base de dados, o número total de bytes processados e a hora em que a cópia de segurança foi concluída:

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 = 'Basic 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;

A captura de ecrã seguinte mostra um exemplo da saída da Basic backup trace consulta:

Captura de tela da saída XEvent.

Neste exemplo, cinco bancos de dados foram copiados automaticamente ao longo de 2 horas e 30 minutos, e há 130 entradas na sessão XEvent.

Consultar a sessão de rastreamento detalhado

O código T-SQL seguinte consulta a Verbose backup trace sessão e devolve o nome da base de dados, bem como o início e o fim das cópias de segurança completas, diferenciais e de registo.

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;

A captura de tela a seguir mostra um exemplo de um backup completo na sessão XEvent:

Captura de tela da saída XEvent mostrando backups completos.

A captura de tela a seguir mostra um exemplo de uma saída de um backup diferencial na sessão XEvent:

Captura de ecrã da saída XEvent mostrando backups diferenciais.