如果完整备份正在运行,则跳过日志备份

在我的一些SQL2000服务器上,偶尔会出现阻塞和我们的完整备份和日志备份作业之间的奇怪冲突。 基于这个问题的答案 ,我需要弄清楚如何防止我的日志文件备份运行,而我的完整备份运行在同一个数据库上。 (这听起来像SQL2005中更改,所以不应该是他们的问题。)

我有两个策略:

  1. 在执行整个日志备份作业之前,请查询MSDB作业历史logging表,查看我们夜间完全备份作业的备份步骤(第3步,共5步)当前是否正在执行。 如果是,则完全跳过所有数据库的日志备份。

  2. 在日志备份作业脚本中,在对单个数据库运行日志备份之前,请查询sysprocess表(或其他),以查看是否已经为特定数据库执行了LIGHTSPEED BACKUP。 如果是,则只跳过该数据库上的日志备份。

第一个实现起来会容易得多,但是最终会跳过大量的数据库,而且可能没有任何问题(可能允许日志增长过多)。 第二个更吸引人,但我不确定如何确定是否正在进行特定数据库的备份。

另外,第二个选项是完全备份可能会开始备份日志备份已经在使用的数据库,除非我在完全备份脚本中添加相同types的“检查代码”。 (显然,我希望完整的优先于日志备份工作)

任何人都有一个现有的SQL 2000脚本已经这样做? 哪种方法最适合考虑? 还是有其他的select?

我喜欢使用的解决scheme(因为我不喜欢启用和禁用作业,因此如果存在问题可能会将作业禁用)是查询sysprocesses表以查找备份。 查找正在运行的查询,以查看正在备份的数据库db_id =和备份数据库的命令。 你的步骤看起来像这样。

IF EXISTS (SELECT * FROM master.dbo.sysprocesses WHERE dbid = db_id('YourDatabase') AND cmd LIKE 'BACKUP DATABASE%') BEGIN RAISERROR('The full backup is still running.', 16, 1) END 

对于在运行日志备份时需要担心正在运行的完整备份的情况,请使用类似的方法。

 WHILE EXISTS (SELECT * FROM master.dbo.sysprocesses WHERE dbid = db_id('YourDatabase') AND cmd LIKE 'BACKUP DATABASE%') BEGIN WAITFOR DELAY '00:01:00' END 

我在SQL Server 2000中也遇到了这个问题。

我所做的是完整备份中的第一个作业步骤是在@ enable = 0的日志备份作业上运行sp_update_job以禁用作业。

完整备份作业的最后一步是否成功,是重新开启日志备份作业。

在罕见的情况下,当所有的卫星排队时,日志备份将在全备份开始时运行,日志备份将失败,但至less不会继续尝试。