在我的一些SQL2000服务器上,我偶尔会遇到完全备份和日志备份作业之间的阻塞和奇怪冲突。基于这个SF问题的答案,我需要弄清楚如何防止日志文件备份在同一个数据库上运行时运行。(听起来这是在SQL2005中改变的,所以对他们来说不应该是个问题。)
我想到了两种策略:
第一个更容易实现,但最终会跳过很多数据库--它可能不会出现任何问题(可能会导致日志增长过大)。第二个更有吸引力,但我不确定如何确切地确定某个特定数据库的备份是否正在进行中。
另外,使用第二个选项,完全备份很有可能开始备份日志备份已经在运行的数据库,除非我向完整备份脚本添加了相同类型的“检查代码”。(显然,我希望完全优先于日志备份作业)
有人有一个现有的SQL 2000脚本已经这样做了吗?考虑哪种方法最有意义?还是有其他的选择?
发布于 2009-08-20 06:54:19
我喜欢使用的解决方案(因为我不喜欢启用和禁用作业,因为这会使作业在有问题时被禁用)是查询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发布于 2009-08-19 14:37:55
我在Server 2000中也遇到了这个问题。
我所做的是完全备份中的第一个工作步骤,即在日志备份作业上运行sp_update_job,并使用@enable=0禁用作业。
完整备份作业(无论成功与否)的最后一步是重新打开日志备份作业。
在罕见的情况下,当所有的卫星都排队时,日志备份将在完全备份开始时运行,而日志备份将失败,但至少它不会继续尝试。
https://serverfault.com/questions/56095
复制相似问题