ora00279解决办法_oracle物化视图日志表
某物化视图在增量刷新的时候报错ora-00920,尝试全量刷新的时候,报错ora-00904。
BEGIN
DBMS_MVIEW.REFRESH(‘MV_ABCD_K_PPLLCJ’,’F’);
END;
ORA-12018:在创建”MYJUKKA”.”MV_ABCD_K_PPLLCJ”的代码时出现以下错误
ORA-00920:无效的关系运算符
ORA-06512:在”SYS.SNAPSHOT”, line 2809
ORA-06512:在”SYS.SNAPSHOT”, line 3025
ORA-06512:在”SYS.SNAPSHOT”, line 2994
ORA-06512:在line 1
SQL>
BEGIN
DBMS_MVIEW.REFRESH(‘MV_ABCD_K_PPLLCJ’,’F’);
END;
ORA-12018:在创建”MYJUKKA”.”MV_ABCD_K_PPLLCJ”的代码时出现以下错误
ORA-00920:无效的关系运算符
ORA-06512:在”SYS.SNAPSHOT”,line2809
ORA-06512:在”SYS.SNAPSHOT”,line3025
ORA-06512:在”SYS.SNAPSHOT”,line2994
ORA-06512:在line1
SQL>
BEGIN
DBMS_MVIEW.REFRESH(‘MV_ABCD_K_PPLLCJ’,’C’,ATOMIC_REFRESH=>false);
END;
ORA-12018:在创建”MYJUKKA”.”MV_ABCD_K_PPLLCJ”的代码时出现以下错误
ORA-00904:标识符无效
ORA-06512:在”SYS.SNAPSHOT”, line 2809
ORA-06512:在”SYS.SNAPSHOT”, line 3025
ORA-06512:在”SYS.SNAPSHOT”, line 2994
ORA-06512:在line 1
SQL>
BEGIN
DBMS_MVIEW.REFRESH(‘MV_ABCD_K_PPLLCJ’,’C’,ATOMIC_REFRESH=>false);
END;
ORA-12018:在创建”MYJUKKA”.”MV_ABCD_K_PPLLCJ”的代码时出现以下错误
ORA-00904:标识符无效
ORA-06512:在”SYS.SNAPSHOT”,line2809
ORA-06512:在”SYS.SNAPSHOT”,line3025
ORA-06512:在”SYS.SNAPSHOT”,line2994
ORA-06512:在line1
SQL>
查了mview的定义,直接select是没有问题,再查了mos,也没有查到相关的文档或bug,所以,决定做10046看看报错究竟出在哪里。
在10046的trace文件中,我们找到了相关报错:
PARSE ERROR #47436954909072:len=1055 dep=1 uid=147 oct=3 lid=147 tim=1442993043265145 err=920
SELECT DISTINCT LOG$.”POLNO” FROM (SELECT MLOG$.”POLNO” “POLNO” FROM “MYJUKKA”.”MLOG$_ZYX_ABCD_K_PPLLCJ” MLOG$ WHERE “SNAPTIME$$” > :1 AND (“DMLTYPE$$”!=’I’)) LOG$ WHERE (LOG$.”POLNO”) NOT IN
(SELECT MAX_TAB$.”POLNO” “POLNO” FROM (SELECT “ZYX_ABCD_K_PPLLCJ”.”POLNO” “POLNO”,”ZYX_ABCD_K_PPLLCJ”.”PARTY_NO” “PARTY_NO” …(snip)… WHERE SYS_AUDIT (CASE WHEN 1=1 THEN 1 ELSE NULL END,’MYJUKKA’,’ZYX_ABCD_K_PPLLCJ’,’MYPOLICY’,3) IS NUL) “MAS_TAB$$”
WHERE LOG$.”POLNO” = MAS_TAB$.”POLNO”)
…
EXEC #47436954884200:c=1063838,e=5655639,p=6341,cr=10165,cu=802,mis=0,r=0,dep=0,og=1,plh=0,tim=1442993043266925
ERROR #47436954884200:error=12018 time=1442993043266991
PARSEERROR#47436954909072:len=1055 dep=1 uid=147 oct=3 lid=147 tim=1442993043265145 err=920
SELECTDISTINCTLOG$.”POLNO”FROM(SELECTMLOG$.”POLNO””POLNO”FROM”MYJUKKA”.”MLOG$_ZYX_ABCD_K_PPLLCJ”MLOG$WHERE”SNAPTIME$$”>:1AND(“DMLTYPE$$”!=’I’))LOG$WHERE(LOG$.”POLNO”)NOTIN
(SELECTMAX_TAB$.”POLNO””POLNO”FROM(SELECT”ZYX_ABCD_K_PPLLCJ”.”POLNO””POLNO”,”ZYX_ABCD_K_PPLLCJ”.”PARTY_NO””PARTY_NO”…(snip)…WHERESYS_AUDIT(CASEWHEN1=1THEN1ELSENULLEND,’MYJUKKA’,’ZYX_ABCD_K_PPLLCJ’,’MYPOLICY’,3)ISNUL)”MAS_TAB$$”
WHERELOG$.”POLNO”=MAS_TAB$.”POLNO”)
…
EXEC#47436954884200:c=1063838,e=5655639,p=6341,cr=10165,cu=802,mis=0,r=0,dep=0,og=1,plh=0,tim=1442993043266925
ERROR#47436954884200:error=12018 time=1442993043266991
这个语句,我们直接去执行的时候,也是报错ora-920的。具体的报错是在SYS_AUDIT上,发现这个字段是放在where后面进行过滤,但是其表ZYX_ABCD_K_PPLLCJ是没有这个字段的。
另外,这个语句,所涉及到的表是ZYX_ABCD_K_PPLLCJ,而表ZYX_ABCD_K_PPLLCJ是MV_ABCD_K_PPLLCJ物化视图的基表。
所以,MV_ABCD_K_PPLLCJ物化视图的基表是ZYX_ABCD_K_PPLLCJ,而ZYX_ABCD_K_PPLLCJ在物化视图刷新时,执行了select ZYX_ABCD_K_PPLLCJ where SYS_AUDIT(case when)语句,而SYS_AUDIT字段并不存在ZYX_ABCD_K_PPLLCJ表,所以就报错ora-920了。
从名字看audit好像和审计有关,查了各种审计,发现在ZYX_ABCD_K_PPLLCJ上有FGA的细粒度审计,对ZYX_ABCD_K_PPLLCJ表的select操作进行记录。
由于SYS_AUDIT应该是在FGA审计的过程中产生,我在测试环境中,尝试刷新MV_ABCD_K_PPLLCJ表,在刷到一半的途中ctrl+c中断,再次刷新也报错了。因此怀疑一开始的报错是否也是被意外中断导致。
解决方法:disable FGA的审计策略,在全量刷新或者增量刷新,无报错。再enable FGA,问题解决。
进一步查询发现,Bug 18173440 – ORA-12018 / ORA-904 executing DBMS_MVIEW.REFRESH (Doc ID 18173440.8)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191549.html原文链接:https://javaforall.cn
相关文章
- Oracle删除日志组:步骤指南(oracle删除日志组)
- 解决Oracle数据库连接慢问题(oracle数据库连接慢)
- 部署Oracle客户端快速免安装部署(oracle客户端免安装)
- 利用 Oracle 创建视图的方法(oracle创建视图)
- Oracle表操作的安全性纪录(oracle表操作日志)
- Oracle添加列:轻松解决(oracle添加列)
- 使用Oracle中的时间类型让时间管理更轻松(oracle中的时间类型)
- Oracle云主机让您云端轻松运营(oracle云主机)
- 分析Oracle服务日志细节分析(oracle服务日志)
- Oracle服务:记录与分析(oracle服务日志)
- 深入了解Oracle数据库的触发器类型(oracle触发器类型)
- Oracle中创建视图的语法及示例(oracle创建视图语句)
- Oracle 利用表变量优化查询性能(oracle表变量)
- Oracle数据库产生归档日志的原因及影响分析(oracle产生归档日志)
- 更新Oracle 视图:实现数据可视化(oracle视图更新)
- 如何在 Oracle 中减少月份?(oracle减月份)
- Oracle中先排序再更新的操作策略(oracle先排序后更新)
- Oracle的视图写入实践(oracle 写入视图)
- IE无法连接Oracle数据库(ie 打不开oracle)
- dbf文件转换成Oracle数据库的方法(dbf转成oracle)
- 使用Oracle从视图中快速获取数据(oracle从视图中取数)
- Oracle中通过排重语句实现数据去重(oracle中排重语句)
- Oracle数据库谁获得最高分(oracle中分数最高)
- 数据使用Oracle的imp工具导入数据(oracle中imp导入)
- Oracle中两个表的视图结构分析(oracle两个表的视图)
- 在Oracle数据库上,如何创建账户(oracle上创建账户)
- Oracle TNS日志详解揭示系统正常运行的秘密(oracle tns日志)
- 文让Oracle也能Like中文(oracle like中)
- 期性任务Oracle Job实现周期性任务(oracle job 周)
- Oracle CDC日志解析数据未来的可能(oracle cdc日志)