首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果完全备份正在运行,则跳过日志备份

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

Server Fault用户
提问于 2009-08-19 14:20:45
回答 2查看 3.3K关注 0票数 3

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

我想到了两种策略:

  1. 在执行整个日志备份作业之前,请查询MSDB作业历史表,以查看夜间完整备份作业的备份步骤(步骤3)当前是否正在执行。如果是,则跳过所有数据库的日志备份。
  2. 在日志备份作业脚本中,在单个数据库上运行日志备份之前,先查询sysprocess表(或其他什么),以查看是否已经对该特定数据库进行了亮点备份。如果是,则跳过该数据库上的日志备份。

第一个更容易实现,但最终会跳过很多数据库--它可能不会出现任何问题(可能会导致日志增长过大)。第二个更有吸引力,但我不确定如何确切地确定某个特定数据库的备份是否正在进行中。

另外,使用第二个选项,完全备份很有可能开始备份日志备份已经在运行的数据库,除非我向完整备份脚本添加了相同类型的“检查代码”。(显然,我希望完全优先于日志备份作业)

有人有一个现有的SQL 2000脚本已经这样做了吗?考虑哪种方法最有意义?还是有其他的选择?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2009-08-20 06:54:19

我喜欢使用的解决方案(因为我不喜欢启用和禁用作业,因为这会使作业在有问题时被禁用)是查询sysprocesses表寻找备份。查找在备份的db_id =数据库和备份数据库命令之前运行的查询。你的步子会像这样。

代码语言:javascript
复制
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

当您需要在日志备份运行时担心完全备份运行时,请使用如下所示。

代码语言:javascript
复制
WHILE EXISTS (SELECT * FROM master.dbo.sysprocesses WHERE dbid = db_id('YourDatabase')
                     AND cmd LIKE 'BACKUP DATABASE%')
BEGIN
     WAITFOR DELAY '00:01:00'
END
票数 2
EN

Server Fault用户

发布于 2009-08-19 14:37:55

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

我所做的是完全备份中的第一个工作步骤,即在日志备份作业上运行sp_update_job,并使用@enable=0禁用作业。

完整备份作业(无论成功与否)的最后一步是重新打开日志备份作业。

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

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/56095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档