我正在寻找一种基于数据库表中存储的状态备份数据库的解决方案(非活动数据库也保持在线),即使用获取活动数据库的状态
SELECT dbName from DBMain.TableWithDatabaseStatus where activeStatus=1
并且仅对这些数据库的结果执行完整/差异/事务性备份,例如,如果不存在最近的备份,则执行完整备份,否则执行差异和增量备份。
我目前正在查看Ola Halengren 的维护解决方案,在那里我找到了一个不错的选项 @ChangeBackupType = 'Y' -> 如果不存在完整备份,请先使用它。查询是这样的..
EXECUTE dbo.DatabaseBackup
@Databases = 'USER_DATABASES',
@Directory = 'C:\Backup',
@BackupType = 'LOG',
@ChangeBackupType = 'Y'
但是有没有一种方法可以在运行备份脚本之前在 -> @Databases = 'USER_DATABASES' 中手动添加/更新数据库名称(基于使用 activeStatus 的查询结果)?
主要目标是
- 在周末对所有活动数据库进行完整备份
- 在工作日执行 diff 和 transactional
- 如果一个新的数据库在周末不活动,则该数据库变为活动状态,请对该数据库进行完整备份,并按正常程序检查其余数据库。
ADBA 在这里,所以对 Ola halengren 的脚本的任何指示或帮助表示赞赏!
这很容易实现,你只需要一个 Ola 脚本的包装器来实现你的逻辑,它应该很好。
这是执行此操作的示例方法,如脚本所示,这将对任何处于活动状态的数据库进行 LOG 备份(我使用了一个临时表,#TableStatus)。
要完全实现您的逻辑,您将需要四个作业来运行这个带有变体的脚本。
周末运行的一项作业,对任何
具有活动标志的数据库进行完整备份。
在一周内运行的一项作业(无论您想要什么时间间隔),
它对具有活动标志的任何数据库进行 DIFF 备份。
在一周内(以所需的时间间隔)运行的一项作业,它对具有活动标志的任何数据库进行 LOG 备份。
以不同间隔运行以捕获
标记为活动的任何新(或重新激活)数据库的作业。这个
有点棘手。
您需要一种方法来跟踪数据库何时变为“活动”以及是否对其进行了完整备份。您可以通过多种不同的方式做到这一点,其中一些方式比其他方式更免维护。我做了最简单的方法,添加了一个字段“FullBackupTaken”,当数据库 ActiveStatus 设置为 1 时,它应该设置为 NULL。然后你需要一个对任何具有 FullBackupTaken 为 NULL 的活动数据库执行完整备份的作业。
更复杂的方法可能有一个“DateMadeActive”,然后您可以深入到 msdb 表中查看是否已为它获取 FULL。