AnyBackup-Sybase 数据库恢复失败,提示:执行 SQL 语句 online database XXX 发生错误。数据库中表的索引遭破坏,无法进行恢复操作。
关键字
online database、索引、破坏
适用产品
- AnyBackup 6.0.x
- 超易备 5.0.x
问题描述
在使用 AnyBackup 进行 Sybase 数据库恢复时,恢复任务执行失败,执行输出中提示如下关键错误信息:
执行 SQL 语句 online database XXX 发生错误。
数据库中表的索引造破坏,无法进行恢复操作,请参考最佳实践文档解决问题后再次进行恢复。

问题影响
AnyBackup 无法完成 Sybase 数据库的恢复。
问题原因
Sybase 数据库索引损坏,导致数据库无法正常 online。
解决方案
为了解决该问题,可以通过手动修复损坏的索引,再手动 online database 即可,无需再次恢复。具体步骤如下:
1. 使用管理员账户登录 Sybase 数据库服务器;
2. 执行如下命令登录 Sybase 数据库:
isql -Usa -P
注:-P 后输入数据库 sa 用户的密码,请与客户数据库管理员获取。
3. 根据错误提示信息,检查抛错的数据库中损坏索引的情况,执行如下命令:
use sybsystemproc
go
sp_indsuspect spt_sybdrv
go
注:其中,sybsystemproc 为抛错提示的索引所在的数据库,spt_sybdrv 为索引对应的表名,请根据实际情况修改。
其执行结果中输出 Suspect indexex on table XXX 即为存在损坏的索引信息,如下图所示:

4. 手动修复索引,执行如下命令:
DBCC REINDEX (spt_sybdrv)
go
注:其中,spt_sybdrv 为索引对应的表名,请根据实际情况修改。
执行完成之后,再次执行 sp_indsuspect 命令检查损坏索引信息,如执行输出中输出 There are no suspect indexex on table XXX 即为索引修复成功。如下图所示:

5. 手动 online 数据库,执行如下命令:
online database sybsystemprocs
go
注:其中,sybsystemprocs 为恢复的数据库名。
更多信息
Sybase 数据库恢复索引损坏的情况可能有很多种,只有在执行 online database 时抛索引损坏错误,才可参考本文内容修复并启动数据库。如果数据尚未恢复完成,则修复索引后仍需进行后续未完成的数据恢复工作方可启动数据库。