概要
如果数据库维护计划中的任何任务失败或遇到错误信息,则维护计划作业本身可能显示为失败。作业历史记录详细信息显示以下错误信息:
sqlmaint.exe failed.[SQLSTATE 42000] (Error 22029).The step failed.
但是,这不一定指示整个维护计划都失败。维护计划作业显示失败状态,以便引发一个标志,指示让用户注意的维护计划中的某一任务。
此类型的行为很常见,因为可能会遇到需要用户干预来解决的错误。只要某一维护计划作业失败,您就必须检查计划历史记录以查看错误情况,然后采取适当的
措施来解决该问题。
更多信息
为了找出与导致作业失败的原因有关的特定任务和错误信息,您需要检查数据库维护计划历史记录。在数据库维护计划历史记录中,您可以获取与该维护计划正
执行的每一任务有关的详细信息。使用以下步骤在 SQL Server 企业管理器中找到这些信息:
1. 定位到数据库维护计划,然后展开它。
2. 右键单击具有失败的相应作业的数据库维护计划。
3. 单击数据库维护计划历史记录。
4. 随即打开一个窗口,窗口中包含与维护计划中执行的每一任务有关的详细信息。为在各日期运行的每一任务提供历史记录列表,该列表还指示单独任务的失败
或成功状态。如果您双击一个失败的任务,则显示指示产生的任何错误信息的信息以及与任务失败的原因有关的信息。
5. 此时采取必要的措施解决指示的具体问题。
典型的例子是设置维护计划来备份数据库和检查完整性。例如,假定某一完整性检查任务在一个或多个数据库中遇到数据库完整性错误。该任务引发一个错误信
息。维护计划继续执行该计划中的其余任务。在维护计划完成后,SQLAgent 中的相应作业被设置为"failed"(失败)状态。维护计划历史记录的检查指示哪一数
据库完整性检查找到了完整性错误或失败以及相应的错误信息。然后您需要采取措施并运行适当的 DBCC CHECKDB 步骤来解决该问题。有关 DBCC CHECKDB 的更
多信息,请参见 SQL Server 联机图书中的"DBCC CHECKDB"主题。
您还可以将详细的维护计划信息写入一个文件。若要将详细的维护计划信息写入一个文件,请使用以下步骤:
1. 在 SQL Server 企业管理器中,定位到"数据库维护计划"。选择所需计划,然后双击该计划。
2. 单击报告选项卡。在报告对话框中,您可以选择将报告写入指定目录中的一个文本文件上。该报告包含与维护计划执行的步骤有关的细节,并且包括任何错误
信息。您还可以将该报告通过电子邮件发送到指定的操作员处,以进行常规检查。
3. 如果不使用文本报告,则您还可以通过本服务器上的历史记录选项将输出发送到一个 SQL Server 表中。
有关为数据库维护计划设置这些选项的细节的更多信息,请参见 SQL Server 联机图书中的"Database Maintenance Plan, Reporting Tab"(数据库维护计划,
报告选项卡)主题。
如果您需要更深入的疑难解答,则可以启动 SQL Server Agent,使用详细日志记录从命令提示处运行。
今天发现维护计划失败,是因为
------------------------------------------------------------------------------
正在为表“tbs_d_supp”重建索引
[Microsoft SQL-DMO (ODBC SQLState: HY000)] 错误 3624: [Microsoft][ODBC SQL Server Driver][SQL Server]
[Microsoft][ODBC SQL Server Driver][SQL Server]Location: recbase.cpp:1374
Expression: m_nVars > 0
SPID: 56
Process ID: 1748
** 执行时间: 0 小时,33 分钟,21 秒 **
结束维护计划“数据库维护计划1”(在 2005-11-22 8:09:07 上)
SQLMAINT.EXE 进程退出代码: 1 (失败)
-------------------------------------------------------------------------------
而这个错误是因为tbs_d_supp这个表的一致性错误引起的
----------------------------
dbcc checktable('tbs_d_supp')
----------------------------
服务器: 消息 8928,级别 16,状态 1,行 1
对象 ID 426848983,索引 ID 0: 未能处理页 (1:618084)。详细信息请参阅其它错误。
服务器: 消息 8944,级别 16,状态 1,行 1
表错误: 对象 ID 426848983,索引 ID 0,页 (1:618084),行 83。测试(nVarCols && (hdr->r_tagA & VARIABLE_COLUMNS))失败。值为 0 和 32。
'tbs_d_supp' 的 DBCC 结果。
对象 'tbs_d_supp' 有 503837 行,这些行位于 5617 页中。
CHECKTABLE 发现了 0 个分配错误和 2 个一致性错误(在表 'tbs_d_supp' 中,该表的对象 ID 为 426848983)。
repair_allow_data_loss 是最低的修复级别(对于由 DBCC CHECKTABLE (enjoy_store.dbo.tbs_d_supp ) 发现的错误而言)。
---------------------------------------------------------------------------------------
另外如果维护计划选择了"检查数据库完整性-->尝试修复所有小问题"
则执行是需要在单用户模式下,如果有人连接着数据库,有可能使维护计划失败。
------------------------------------------------------------------------------
Microsoft (R) SQLMaint 实用工具(Unicode),版本 登录到 SQL Server“GHSS_DSRV01”以“NT AUTHORITY\SYSTEM”(受信任)身份
开始维护计划“数据库维护计划1”(在 2005-11-22 7:36:18 上)
[Microsoft SQL-DMO (ODBC SQLState: 42000)] 错误 5070: [Microsoft][ODBC SQL Server Driver][SQL Server]如果其他用户正使用数据库 'enjoy_store'
,则数据库状态不能更改
[Microsoft][ODBC SQL Server Driver][SQL Server]ALTER DATABASE 语句失败。
[Microsoft][ODBC SQL Server Driver][SQL Server]sp_dboption 命令失败。
[1] 数据库 enjoy_store: 检查数据和索引链接...
[Microsoft SQL-DMO (ODBC SQLState: 42000)] 错误 7919: [Microsoft][ODBC SQL Server Driver][SQL Server]未处理修复语句。数据库需要处于单用户模
式下。
发现下列错误:
[Microsoft][ODBC SQL Server Driver][SQL Server]未处理修复语句。数据库需要处于单用户模式下。
** 执行时间: 0 小时,0 分钟,1 秒 **
结束维护计划“数据库维护计划1”(在 2005-11-22 8:09:12 上)
SQLMAINT.EXE 进程退出代码: 1 (失败)