anj*_*anb 8 java sql oracle hibernate ora-00942
我们正在运行一个java/hibernate应用程序,在TESTING中针对ORACLE 10g.偶尔,我们会看到这个错误:
ORA-00942:表或视图不存在
有没有办法找出ORACLE正在谈论的表/视图?
我知道我可以在hibernate中添加额外级别的日志记录,这将显示它在ORACLE上执行的所有SQL,然后运行该SQL以确定缺少哪个TABLE/VIEW或缺少权限.但鉴于它处于TESTING/STAGING状态,这会降低性能.
是否有一种简单的方法来缩小表/视图名称?
您知道,我无法控制Oracle数据库服务器环境.
我启用了Hibernate跟踪/日志记录,并找到了一个VALID SQL.我甚至把Wireshark(这是一个TCP数据包过滤器)看看hibernate实际发送了什么,这是一个有效的SQL.那么,为什么甲骨文会偶尔抱怨它,而不是总是抱怨它.
这就是我所做的,对这个最初来自的人有所了解,我知道我是从某个网站上拿过来的,但现在不记得在哪里了.
在预生产中,我有这个
create table caught_errors (
dt date,
username varchar2( 30), -- value from ora_login_user
msg varchar2(2000),
stmt varchar2(2000)
);
create or replace trigger catch_errors
after servererror on database
declare
sql_text ora_name_list_t;
msg_ varchar2(2000) := null;
stmt_ varchar2(2000) := null;
begin
for depth in 1 .. ora_server_error_depth loop
msg_ := msg_ || ora_server_error_msg(depth);
end loop;
for i in 1 .. ora_sql_txt(sql_text) loop
stmt_ := stmt_ || sql_text(i);
end loop;
insert into
caught_errors (dt , username ,msg ,stmt )
values (sysdate, ora_login_user,msg_,stmt_);
end;
/
Run Code Online (Sandbox Code Playgroud)
任何时候抛出servererror,它被捕获并记录到一个表,然后我可以检查该表以查找有问题的查询,并根据需要退还它们以查看丢失的表(当您在sqlplus中运行查询时,它会告诉您表)
注意,是的,这有问题,例如,如果catch_errors被删除,或者本身引发错误,你可以得到递归循环,因此为什么这只存在于预生产中.
当 Oracle 审计打开时,查看 DBA_AUDIT_EXISTS 表。我相信 Oracle 可以提供非常详细的审计,您可以根据需要通过 DB 命令简单地打开和关闭审计,尽管我不记得它们是什么。
请参阅: http ://docs.oracle.com/cd/B19306_01/network.102/b14266/cfgaudit.htm
一些想法(我刚刚在谷歌上快速搜索)
归档时间: |
|
查看次数: |
27525 次 |
最近记录: |