ORA-04045:重新编译/重新验证期间发生错误

Mik*_*ike 3 oracle

我只是在尝试查询表AVC时突然开始出现此错误。

ORA-04045: errors during recompilation/revalidation of PUBLIC.AVC
ORA-04098: trigger 'TTMS.ALTERED_TTMSDB_TABS_TRIGGER' is invalid and failed re-validation
Run Code Online (Sandbox Code Playgroud)

select * from avc不起作用,但select * from exfc.avc确实起作用。

谁能告诉我发生了什么事?

Dav*_*sta 5

大概您的架构中没有名为的对象AVC。因此,当您在AVC没有模式限定符的情况下进行引用时,它将PUBLIC使用该名称访问对象。要找出是哪种对象,SELECT object_type FROM all_objects WHERE object_name='AVC' AND owner='PUBLIC'

无论是什么,查询它都是由于某种原因导致触发触发器。也许这是某种审计功能。但是当前触发器无效。这可能意味着有人修改了触发器本身,但出错了。否则可能意味着某人丢弃或修改了触发器所依赖的其他对象,从而使触发器代码不再有效。

因此,负责该触发器的人都需要找出其编译中发生了什么错误并加以解决。

当您显式查询时EXFC.AVC,您将绕过该PUBLIC对象并直接进入某个基础对象,可能是实际表。您可以访问它似乎很奇怪,因为通过公共同义词路由访问的整个过程通常是为了防止直接访问对象。而且,实际上,如果触发器的目的是审核对表的访问,那么允许您完全绕开它是一个很大的设计缺陷。