我正在寻找类似 fschek 的命令或类似 oracle 的命令来确保索引正确。我正在安装 HP UX 服务器,安装某些软件仓库时出现一些错误,现在我强制删除了这些软件仓库,但我想进行一致性检查,然后继续安装。
基本上,我想检查我的数据库的完整性并寻找一个像 fscheck 这样的简单命令!
答案1
简要说明:Oracle 在内部冗余中工作的方式是,如果数据库可以启动(从 nomount 到 mount 到 open)而没有问题,并且所有文件都出现在 v$datafile 中(没有一个标记为“MISSING”),那么就应该没问题。
脚步:我发现“全面扫描”数据库以查找损坏对象(坏扇区/块等)的最简单方法是完全导出(甚至更进一步完全导入到空 shell 实例中)。以 SYS 身份运行带有 FULL=Y 标志的 expdp 或 exp 应该会告诉 Oracle 将数据库中的所有内容提取到平面转储文件中。如果您的范围(表、索引等)有问题,那么它应该会显示出来。
当然,所有这一切都假设你已经完成了:select * from dba_objects where status = 'INVALID';
确保你没有发现任何已经知道不正确的事情。
更多信息:通过在线重做日志、撤消管理、多路复用控制文件和数据文件头本身,Oracle 数据库能够很好地确保其一致性。
答案2
Oracle 将持续验证索引 - 您无需执行此操作。如果您想查看哪些索引处于无效/不可用状态,以下查询可能会有所帮助:
SELECT owner, index_name, status from all_indexes WHERE status <> 'VALID';
任何被列为 UNUSABLE 的索引都需要重建。
正如@REW 所述,Oracle 非常擅长自我检查自身的一致性,并且如果存在严重问题,它几乎会拒绝启动。
Oracle 的主要卖点之一是,如果没有硬件问题,数据库很难被破坏。