曾几何时,Foo 模式中有一个 Bar 表。她在生产基地生活了很长时间,她的台词不多,但外键和其他参考资料很多。对表的读取请求每分钟执行一次,有时甚至是一秒钟。DML 查询很少见,每年大约 10-100 次。但他们从来没有遇到过问题。
然后在一个普通工作日内,DML 查询停止通过。任何 DML 错误
ora-00942 表或视图不存在
同时,读取请求也很好。这张桌子的攻击是什么?如何发现?如何取胜?
添加。
请求不能代表 Foo 或其他用户工作。
更改查询字符串中表名和字段的大小写没有帮助。
select * from all_objects where object_name like '%BAR%'返回OWNER | OBJECT_NAME-------------------FOO | BARselect * from all_tab_columns where table_name = 'BAR'这些字段也都是大写的,十六进制是干净的。- 我带来了 sqlplus 的结果
.
SQL> select BARID from BAR where BARID = 'XYZ';
BARID
------------------
XYZ
SQL> update BAR set BAR_NAME = 'ABC' WHERE BARID = 'XYZ';
update BAR set BAR_NAME = 'ABC' WHERE BARID = 'XYZ'
*
ошибка в строке 1:
ORA-00942: таблица или представление пользователя не существует
SQL>
添加和删除新列的 DDL 请求通过且没有错误。
重新启动实例没有帮助。
原因在TC 的回复中说明。该错误确实在 11.2 版本中重现:
在后续版本中,此错误已修复,不再可能移动或删除具有物化视图日志的表:
由于依赖树中没有物化视图日志,为了快速定位错误,需要:搜索所有具有相似名称的对象,或者只记住表上可能存在 MV Log:
事情是这样的。出于某种原因,一个物化视图日志
Foo.Bar被添加到表中。那是很久以前。但在问题出现前不久,有人将表重命名为.Foo.M$LOG_BarFoo.DeleteMe_M$LOG_Bar那些。带有 dml 请求
意味着没有带有日志的表。
然而,反向重命名并没有帮助。但是由于根本不需要此日志,因此删除它会有所帮助。现在 DML 正在工作。