我正在寻找一种基于数据库表中存储的数据库状态来备份数据库的解决方案(非活动数据库也保持在线),即使用
SELECT dbName from DBMain.TableWithDatabaseStatus where activeStatus=1并且只对这些数据库的结果执行完整/ diff /事务性备份,例如,如果没有最近的备份,则执行完全备份,否则执行diff和增量备份。
目前,我正在研究Ola的维护解决方案,在这里我找到了一个很好的选项@ChangeBackupType = 'Y‘->,如果不存在完全备份,请先考虑这个选项。查询是这样的。
EXECUTE dbo.DatabaseBackup
@Databases = 'USER_DATABASES',
@Directory = 'C:\Backup',
@BackupType = 'LOG',
@ChangeBackupType = 'Y'但是,在运行备份脚本之前,我是否可以在activeStatus@ -> = 'USER_DATABASES‘中手动添加/更新DB名称(基于->查询的结果)?
主要目标是
ADBA在这里,所以任何指点或帮助Ola halengren的脚本是非常感谢的!
发布于 2022-10-19 14:25:13
这是非常简单的,您只需要为Ola的脚本编写一个包装器来实现您的逻辑,它应该是好的。
下面是一个执行此操作的示例方法,如脚本所示,这将对任何活动的数据库进行日志备份(我使用了一个临时表#TableStatus)。
要完全实现您的逻辑,您需要四个作业来运行这个脚本。
您需要一种方法来跟踪数据库何时“激活”,以及是否已经对数据库进行了完全备份。你可以用很多不同的方式来做这件事,有些比其他的更免费。我做了最简单的工作,添加了一个字段" FullBackupTaken ",当数据库ActiveStatus设置为1时,应该将其设置为NULL。然后,您需要对任何具有FullBackupTaken为NULL的活动数据库执行完整备份。
一种更复杂的方法可能有一个"DateMadeActive“,然后您可以深入到msdb表,看看是否已经为它取满了。
DROP TABLE IF EXISTS #TableStatus
CREATE TABLE #TableStatus
(
DatabaseName NVARCHAR(200) NOT NULL
, ActiveStatus INT NOT NULL
, FULLBackupTaken DATETIME2(7) NULL
)
/** Specify desired backup type here, LOG, FULL, DIFF **/
DECLARE @BackupType NVARCHAR(20) = N'LOG'
DECLARE @BackupDirectory NVARCHAR(512) = 'C:\backup'
DECLARE @ChangeBackupType NCHAR(1) = N'Y'
DECLARE @DatabaseName NVARCHAR(200)
DECLARE curDBLoop CURSOR LOCAL STATIC FORWARD_ONLY
FOR ( SELECT T.DatabaseName
FROM #TableStatus AS T
INNER JOIN sys.databases AS D ON D.[name] = T.DatabaseName
AND D.state_desc = N'ONLINE'
WHERE T.ActiveStatus = 1
)
OPEN curDBLoop
FETCH NEXT FROM curDBLoop
INTO @DatabaseName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Taking backup of ' + COALESCE(@DatabaseName, '??')
EXEC dbo.DatabaseBackup @Databases = @DatabaseName,
@Directory = @BackupDirectory,
@BackupType = @BackupType,
@ChangeBackupType = @ChangeBackupType;
IF @BackupType = N'FULL'
BEGIN
UPDATE #TableStatus
SET FULLBackupTaken = SYSUTCDATETIME()
END
FETCH NEXT FROM curDBLoop
INTO @DatabaseName
END
CLOSE curDBLoop
DEALLOCATE curDBLoophttps://dba.stackexchange.com/questions/318405
复制相似问题