diff --git a/src/AgDatabase.cs b/src/AgDatabase.cs index 5423f8e..607714c 100755 --- a/src/AgDatabase.cs +++ b/src/AgDatabase.cs @@ -131,9 +131,19 @@ public List RecentBackups() { // find most recent full backup LSN across all replica servers var fullBackupLsnBag = new ConcurrentBag(); - _listener.ForEachAgInstance(s => fullBackupLsnBag.Add(s.Database(Name).MostRecentFullBackupLsn())); + _listener.ForEachAgInstance(s => + { + try + { + fullBackupLsnBag.Add(s.Database(Name).MostRecentFullBackupLsn()); + } + catch { } + }); // find all backups in that chain + if (fullBackupLsnBag.IsEmpty) + throw new Exception($"Could not find any full backups for DB '{Name}'"); + var databaseBackupLsn = fullBackupLsnBag.Max(); var bag = new ConcurrentBag(); _listener.ForEachAgInstance(s => s.Database(Name).BackupChainFromLsn(databaseBackupLsn) diff --git a/src/SmoFacade/Database.cs b/src/SmoFacade/Database.cs index d38e031..4518049 100755 --- a/src/SmoFacade/Database.cs +++ b/src/SmoFacade/Database.cs @@ -131,8 +131,13 @@ public decimal MostRecentFullBackupLsn() using var reader = cmd.ExecuteReader(); if(!reader.Read()) throw new Exception("MostRecentFullBackup SQL found no results"); + + var lsnValue = reader["most_recent_full_backup_checkpoint_lsn"]; - return (decimal)reader["most_recent_full_backup_checkpoint_lsn"]; + if (lsnValue == DBNull.Value) + throw new Exception("MostRecentFullBackup SQL found no results"); + + return (decimal)lsnValue; } public List BackupChainFromLsn(decimal checkpointLsn)