Home Forums SQL Server 2016 SQL Server 2016 - Development and T-SQL t-sql to report on databases not recently backed up - if db is in an availability group, only report if it's a primary replica RE: t-sql to report on databases not recently backed up - if db is in an availability group, only report if it's a primary replica

  • Try dmv sys.dm_hadr_database_replica_states and just join them:

    DECLARE @MyDate DATETIME = '21 March 2018';
    WITH LastBackupCTE (DbName, BackupfinishDate)
    AS
    (
      SELECT database_name,
        MAX(backup_finish_date) AS BackupFinishDate
          FROM msdb.dbo.backupset bs
        inner join msdb.dbo.backupmediafamily bmf
          on bs.media_set_id = bmf.media_set_id
       WHERE type = 'D' -- database backup.
       GROUP BY database_name
    )
    SELECT d.name
      FROM sys.databases d
         left outer join sys.dm_hadr_database_replica_states ha on d.database_id=ha.database_id
       LEFT OUTER JOIN LastBackupCTE f
        ON d.name = f.DbName
      WHERE (
          f.BackupFinishDate IS NULL -- never backedup
          OR
          F.BackupFinishDate < @MyDate
        )
       AND d.name not in ('tempdb', 'ReportServerTempDb', 'pubs','northwind', 'AdventureWorks')
      AND d.state_desc = 'ONLINE' and (ha.is_primary_replica=1 or ha.is_primary_replica is null)
       --AND (sys.fn_hadr_is_primary_replica(d.name)) = 1
      
      order BY d.name;