0

这是我看到除了我自己之外的其他人的问题,我还没有找到一个很好的解释。

假设您有一个维护计划,其中包含检查数据库的任务,如下所示:

USE [MyDb]
GO
DBCC CHECKDB with no_infomsgs, all_errormsgs

如果您在任务执行后查看日志,您可能会看到如下内容:

08/15/2008 06:00:22,spid55,Unknown,DBCC CHECKDB (mssqlsystemresource) executed by NT AUTHORITY\SYSTEM found 0 errors and repaired 0 errors. Elapsed time: 0 hours 0 minutes 0 seconds.
08/15/2008 06:00:21,spid55,Unknown,DBCC CHECKDB (master) executed by NT AUTHORITY\SYSTEM found 0 errors and repaired 0 errors. Elapsed time: 0 hours 0 minutes 0 seconds.

它没有检查 MyDb,而是检查了 master 和 msssqlsystemresource。

为什么?

我的解决方法是使用以下方法创建一个 Sql Server 代理作业:

dbcc checkdb ('MyDb') with no_infomsgs, all_errormsgs;

这总是很好。

08/15/2008 04:26:04,spid54,Unknown,DBCC CHECKDB (MyDb) WITH all_errormsgs<c/> no_infomsgs executed by NT AUTHORITY\SYSTEM found 0 errors and repaired 0 errors. Elapsed time: 0 hours 26 minutes 3 seconds.
4

3 回答 3

1

对于初学者,永远记住那GO不是 SQL 关键字;它只是(通常)由客户端而不是服务器实现/识别的批处理分隔符。因此,根据上下文和客户端,确实不能保证当前数据库在批次之间得到保留。

于 2008-08-15T15:00:16.380 回答
1

如果您正在使用维护计划,您可能最好使用检查数据库完整性任务。如果你真的想运行你自己用 t-sql 编写的维护,那么使用作业中的一个步骤来运行它,而不是在维护计划中,上面的代码可以正常工作。就像 Stu 所说,GO 语句是客户端指令而不是 sql 关键字,并且似乎只受到 isql、wsql、osql 等客户端和 sql 代理的尊重。我认为它适用于 DTS 包。显然,不是在 DTSX 中。

于 2008-08-15T15:34:09.180 回答
0

你有一个检查数据库完整性任务,你双击它选择MyDb,当计划运行时它只检查master?诡异的。你确定你没有另一个计划运行吗?

于 2008-08-15T19:22:39.093 回答