"ora-04098:触发器 无效且未通过重新验证"问题解决之权限

今天在做数据库运维,有一张xxx记录表,数据量有2亿多条,严重影响了查询效率,所以考虑优化:做一个备份,删除一大部分现在表中的数据。在测试环境的数据库中实验方案时,建表、导数据、建主键、建索引、建触发器,都ok,简直是一顿操作猛如虎啊,呵呵。

结果在运行项目时出问题了,日志显示:ora-04098:触发器 xxx.xxxxx 无效且未通过重新验证。直接在数据库中执行sql,也是报相同的错误。

尝试了各种百度来的方案,都无法解决。查看触发器,也都创建成功了,但是在触发器名称尾部有个红叹号,尝试 “检查-编译”,结果返回:ORA-24344: 成功, 但出现编译错误。一脸懵x。

尝试了各种百度来的方案,都无法解决,一上午过去了。。。

下午,想到了前两个月做过数据库迁移,尝试着连接上了以前的数据库,还好表和数据啥的都还在。于是在旧版数据库中创建了一个功能都一样只有名称不一样的触发器,创建成功,尝试 “检查-编译”,也不报错,执行sql,也能执行成功。所以排除了是触发器代码的问题。又对比了新旧数据库中与这个触发器相关的表,都一样。所以排除了是新建表的问题。

因为公司没有购买PLSQL的使用权,所以用的是其他的数据库连接工具,只能看到报错,但是无法错误信息,在网上浏览帖子的时候,发现sql Developer可以查看错误信息,于是登上sql Developer后,查看触发器的报错信息:无法找打xxx.xxx(另一个用户下的表)。于是推测是当前用户的权限不足。

----以上内容可以略过,仅为个人经历记录 。以下才是干货------------------------------------------------------------------

在切换到超级管理员后,查看当前用户的权限,发现果然是缺少相关权限,(前一个不靠谱的运维,数据库迁移都没迁完整就跑路了),对照老版数据库,在另一个备份账户下创建了相关的表,并给当前用户添加上相关的操作权限。再切换回当前用户,尝试 “检查-编译”,返回OK,不再报红叹号。执行sql,OK,成功触发相关的触发器。问题解决!

 

 

你可能感兴趣的:(数据结构)