Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ORA-00942:表或视图不存在:如何找到它所谈论的表或视图_Java_Sql_Oracle_Hibernate_Ora 00942 - Fatal编程技术网

Java ORA-00942:表或视图不存在:如何找到它所谈论的表或视图

Java ORA-00942:表或视图不存在:如何找到它所谈论的表或视图,java,sql,oracle,hibernate,ora-00942,Java,Sql,Oracle,Hibernate,Ora 00942,我们正在运行一个java/hibernate应用程序,在测试中与ORACLE 10g相抗衡。偶尔,我们会看到这样的错误: ORA-00942:表或视图不存在 有没有办法找出ORACLE正在谈论的表/视图 我知道我可以在hibernate中添加额外级别的日志记录,这将显示它在ORACLE上执行的所有SQL,然后运行该SQL以确定哪个表/视图缺少或缺少权限。但考虑到它处于测试/分段阶段,这将降低性能 有没有一种简单的方法来缩小表/视图名称的范围 更新: 正如您所知,我无法控制Oracle DB服务器

我们正在运行一个java/hibernate应用程序,在测试中与ORACLE 10g相抗衡。偶尔,我们会看到这样的错误:

ORA-00942:表或视图不存在

有没有办法找出ORACLE正在谈论的表/视图

我知道我可以在hibernate中添加额外级别的日志记录,这将显示它在ORACLE上执行的所有SQL,然后运行该SQL以确定哪个表/视图缺少或缺少权限。但考虑到它处于测试/分段阶段,这将降低性能

有没有一种简单的方法来缩小表/视图名称的范围

更新: 正如您所知,我无法控制Oracle DB服务器环境

我启用了Hibernate跟踪/日志记录,并找到了有效的SQL。我甚至把Wireshark(一个TCP包过滤器)放进去,看看hibernate到底发送了什么,这是一个有效的SQL。那么,为什么甲骨文会偶尔抱怨一次,而不是总是抱怨。

我认为这里没有灵丹妙药。 它可能是查询中缺少的表或表名拼写错误。 这可能是一个特权问题。如果不执行查询,就无法真正判断


我建议您继续使用您的代码,这样您就可以打开和关闭它。运行它,提取查询,并将其发送给您的DBA进行解决。

在Oracle启用审核时,查看DBA_AUDIT_EXISTS表。我相信Oracle可以提供非常详细的审计,您可以在喜欢时通过DB命令简单地打开和关闭这些审计,尽管我记不起它们是什么

见:


对于一些想法(我只是很快在谷歌上搜索到)

这就是我所做的事,我知道这是从某个网站上得到的,但我不记得现在在哪里

在前期制作中,我有这个

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;
/
每当抛出servererror并将其捕获并记录到一个表中时,我都可以检查该表以查找有问题的查询,并根据需要退款以查看缺少的表(在sqlplus中运行查询时,它会告诉您该表)


请注意,是的,这是有问题的,例如,如果捕获的错误被删除,或者引发错误本身,您可能会得到递归循环,因此这只存在于预生产中。

您应该检查帐户,它是否具有访问目标表的权限。

如果在导入数据库时遇到此问题,请检查表空间名称是否正确。

这并不能回答问题。