环境:centos6.8 11.2.0.3.10(64bit)
本来是没有这个问题的,但是由于最近对只读库做了一定的调整,在重启后,发现触发了这个bug。这个bug以前出现过,以前是通过重启只读库,重新同步就解决了,但是这次多次重启发现还是没能规避这个bug,我没有mos账号,无法下载补丁。这里通过多次测试,并对比调整前后的设置,发现只是恢复并行度不同,以前重启是使用了默认的并行度,这次特意关闭了并行恢复,在讲并行度设置为2后暂时规避了改问题,这里记录一下。另外在asktom上有人说加hint(这个 /*+ inline */ )也能暂时解决, 对于改解决方式,他们的回复是,hint不是每次都会生效,所以错误会不可预期的还会出现。
以下为转载的打补丁升级方式解决问题:
http://blog.itpub.net/30820196/viewspace-2132271/
数据库环境为DG一主三备(最大可用模式),操作系统均为CentOS release 6.5版本,数据库版本11.2.0.3.15
2016年12月26日下午,业务人员突然说系统不能用,一些网页频繁报错,没办法将数据查出来,最后结合开发人将对应的sql提取出来进行分析,发现所有的sql均带有with语法,且都是对standby databae进行的查询。通过metalink查找发现,这与一个bug有关。在ADG环境中使用with语句且系统自动生成临时表时会出现
ORA-30927: Unable to complete execution due to failure in temporary table transformation报错。(在standby database中会出现)
METALINK上的描述是:
On ADG, queries that use a cursor-duration temporary table may fail with ORA-30927 errors.
Such queries use Star with Temp Transformation and subquery factoring (WITH clause).
(Bug 14143632- ora-30927 on active data guard(文档ID 14143632.8))
此时线上的数据库PSU已打到了11.2.0.3.15但是没有包含这个bug的补丁。补丁号(14143632)
例如:执行如下代码,with内的表被使用了两次,oracle会自动生成一个临时表来存放with内的表。
而对于with内的表只使用一次的是不会生成临时表
在METALINK下载相应的补丁,上传至standby database服务器
通过opatch查看为一个online的补丁。
且需要19769496这个补丁,在查看以前安装过的补丁发现已经有这个补丁。现在就可以直接在线打补丁。
检查现有补丁
打 14143632 补丁
一共三台 standby 数据库,依次安装。
补丁安装成功,在执行相应带有 with 且生成临时表的 sql 语句,执行成功。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。