vista tabla sqlsyntaxerrorexception permisos ora not existe exist error does java sql oracle hibernate ora-00942

java - sqlsyntaxerrorexception - ORA-00942: tabla o vista no existe: ¿cómo puedo encontrar qué tabla o vista está hablando?



ora-00942 table or view does not exist solution (5)

Compruebe que el nombre del espacio de tabla sea correcto si se enfrenta a este problema al importar DB.

Estamos ejecutando una aplicación java / hibernate que va en contra de ORACLE 10g en TESTING. De vez en cuando, estamos viendo este error:

ORA-00942: tabla o vista no existe

¿Hay alguna forma de averiguar qué tabla / vista (s) está hablando ORACLE?

Sé que puedo agregar niveles adicionales de registro en hibernación, que mostrará todo el SQL que ejecuta en ORACLE y luego ejecutar ese SQL para descubrir qué TABLE / VIEW falta o falta un permiso. Pero dado que está en TESTING / STAGING, eso ralentizará el rendimiento.

¿Hay alguna forma simple de restringir el nombre de la tabla / vista?

ACTUALIZAR:

Para que lo sepas, no tengo control sobre el entorno del servidor de Oracle DB.
He habilitado el rastreo / registro de Hibernate y encontré un SQL VÁLIDO. Incluso puse Wireshark (que es un filtro de paquetes TCP) para ver qué hibernación realmente envía y que era un SQL válido. Entonces, ¿por qué Oracle se quejaría de ello de vez en cuando y NO siempre?


Debe verificar la cuenta, que tiene permiso para acceder a la tabla de destino.


Eche un vistazo a la tabla DBA_AUDIT_EXISTS, cuando la auditoría está activada para Oracle. Creo que Oracle puede proporcionar una auditoría muy detallada que puede simplemente activar y desactivar cuando lo desee a través de comandos DB, aunque no recuerdo lo que están fuera de mi cabeza.

Ver: http://docs.oracle.com/cd/B19306_01/network.102/b14266/cfgaudit.htm

para alguna idea (que busqué en Google rápidamente)


Esto es lo que hago, una aplicación para quien sea originalmente, sé que lo tomé de algún sitio web, pero no recuerdo dónde estaba ahora.

En preproducción, tengo esto

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; /

Cada vez que se arroja servererror, se captura y se registra en una tabla, puedo verificar esa tabla para encontrar las consultas problemáticas y reembolsarlas según sea necesario para ver la tabla que falta (cuando ejecuta la consulta en sqlplus, le indicará el mesa)

Tenga en cuenta que sí, que hay problemas con esto, por ejemplo, qué pasa si los catch_errors se descartan o si se produce un error en sí mismo, puede obtener un bucle recursivo, por lo que esto solo existe en la preproducción.


No creo que haya una bala mágica aquí. Puede ser una tabla faltante o un nombre de tabla mal escrito en la consulta. Puede ser un problema de privilegio. Realmente no se puede decir sin ejecutar la consulta

Le sugiero que continúe e instrumente su código de tal forma que pueda activarlo y desactivarlo. Ejecútelo, extraiga la consulta y envíela a su DBA para resolverla.