报错信息: ORA-04098: trigger ‘GYLYEQ.UPDATE_BS_ROLE’ is invalid and failed re-validation

项目中,当使用oracle数据库时,遇到触发器执行校验不通过,然而对oracle也不熟悉,导致问题定位较久。由于是一些历史项目,无项目源码,不能提供接口,于是就使用触发器进行解决。在更新、插入、删除数据时,需要同步数据到其他库,触发器确认没有任何问题,但是就是在执行数据插入、更新、删除时,报错触发器校验不通过。

最初想到也是账号权限问题,但是使用navicat查看账号权限,发现账号权限是dba,于是排除了权限问题,导致定位很久,以为是数据库有问题,去各种查看数据库日志,但是没有任何错误日志。

oracle查看日志所在目录sql:
show parameter background_dump_dest;

各种查看日志还是没解决,耽误很久。

解决方案:
1.使用账号编译触发器
在这里插入图片描述

 GYLYEQ> ALTER TRIGGER UPDATE_BS_ROLE COMPILE
[2022-05-19 13:59:21] [99999][17110] Warning: 执行完毕, 但带有警告
[2022-05-19 13:59:21] completed in 35 ms
[2022-05-19 13:59:21] 3:17:PL/SQL: ORA-01031: 权限不足
[2022-05-19 13:59:21] 3:5:PL/SQL: SQL Statement ignored
[2022-05-19 13:59:21] 17:22:PL/SQL: ORA-01031: 权限不足
[2022-05-19 13:59:21] 17:5:PL/SQL: SQL Statement ignored
[2022-05-19 13:59:21] 19:22:PL/SQL: ORA-01031: 权限不足
[2022-05-19 13:59:21] 19:5:PL/SQL: SQL Statement ignored
[2022-05-19 14:00:46] Connected

2.登录oracle服务器,使用dba账号登录,进行账号授权dba(始终不是很明白,明明在Navicat查看用户信息已经有dba角色,但是还是提示无权限执行触发器)
在这里插入图片描述

oracle授权账户DBA权限sql:
grant dba to FL_SYSTEM;

grant dba to GYLYEQ;

-- 一定要执行grant all privileges to xxx;才能生效,及刷新提交权限
grant all privileges to FL_SYSTEM;

grant all privileges to GYLYEQ;

3.授权后编译效果
ALTER TRIGGER UPDATE_BS_ROLE COMPILE
在这里插入图片描述

相关大数据学习demo地址:
https://github.com/carteryh/big-data

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐