修复ora-21700数据字典错误

在一次升级12c的过程中,由于之前有些问题,每修复一个问题,就需要重新执行一次升级脚本。由于重复多次执行了升级脚本,当再次执行升级脚本到phase 65的时候,dbms_stats_internal这个包创建不了了。

我们在$ORACLE_HOME/diagnostics/catupgrd0.log的日志中可以看到:

报错是ora-21700,这是一个非常头疼的报错。这个报错常常意味着数据字典不一致,需要手动修复。

在Doc ID 2046611.1中提到,可以通过drop+重建解决。



文档说的是PDB,但是我估计non-cdb的数据库应该也可以类似解决,所以我决定采用:

但是发现drop dbms_stats_internal的时候,也报错ora-21700了:

看来只能手工修复数据字典了。

对drop dbms_stats_internal的过程做了10046,发现是在drop 一个type的时候遭遇ora-21700的:

查了一下这个type:

我们开始手动修复数据字典。

修复完成后,再次尝试dbms_stats_internal,还是报错ora-21700。继续做10046的trace,发现还有另外的一个type SYS_PLSQL_15AD49DF_1984_1,顺便也查了一下,类似的type有几个,发现如下:

虽然我很想一次性的删除所有的这些type,但是我还是谨慎点,用删除dbms_stats_internal,如果遇到报错,再10046,再找到对应的type,再修复数据字典。

最后的结果是,这些type都需要删除,所以我一共做了5轮数据字典的手工修复。

修复完成后,可以顺利drop dbms_stats_internal了,可以重建dbms_stats了。重建后dbms_stats_internal状态为valid。

参考:Doc ID 437558.1 INTERNAL

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据