分类目录归档:OGG

OGG DDL trigger造成升级数据库后大量SYS对象失效和数据库DDL失效

OGG的DDL功能真是坑,今天在测试库尝试升级,被OGG的DDL给坑了(以前没摸过这个库,不知道有这个东西……) 以后,做任何大操作以前,一定要仔细检查数据库,是否曾经开启过OGG的DDL功能。 这个功能有很多隐患: 因为OGG的DDL是建立在SYS用户下面的, 与其他普通用户的trigger不同: 1,数据库文件offline后,如果有OGG的DDL曾经被开启,可能因此打不开数据库(先disable ogg ddl才行) 2,升级过程中,如果没有disable ddl trigger,可能出现一些升级后的异常 3,OGG用户删除后,并不能删除OGG的DDL trigger,因为他的属主是SYS,且属于internal trigger,会导致大量SYS用户的对象失效和DDL功能失效。 。。。。 升级数据库,从11.2.0.1到11.2.0.4,升级过程中,没有报错,但是数据库启动后,报错: 尝试删除OGG用户,报错: 检查报错的OLAP过程,为INVALID状态: 但是升级后,检查所有数据库组件是VALID状态: 理论上,升级后,组件都是正常的,为什么出现这种情况? 尝试disable 这两个trigger,也报错: 貌似所有的DDL都失效了: 再一查SYS的无效对象,800多个: 使用utlrp编译,也报错: 最后一行提示XDB组件有问题: diable OGG的trigger,然后删除ogg用户后,再次使用utlrp编译,已经正常了: 且数据库已经没有无效对象: 再次校验XDB的组件,正常了: 再次查询组建状态,都ok:

发表在 OGG | 标签为 , , | 留下评论