1.报错复现
system用户下执行如下SQL:
-- Create table
CREATE TABLE PERSON.PERSON
(
PERSONID INTEGER NOT NULL,
SEX CHAR(1) NOT NULL,
NAME VARCHAR2(50) NOT NULL,
EMAIL VARCHAR2(50),
PHONE VARCHAR2(25)
)
-- CREATE SEQUENCE
CREATE SEQUENCE SEQ_USERINFO
MINVALUE 1
MAXVALUE 9999999999999999999999999999
START WITH 244
INCREMENT BY 1
CACHE 20;
-- 创建触发器
CREATE OR REPLACE TRIGGER TRG_UPD
AFTER UPDATE OF NAME, PHONE ON PERSON.PERSON
BEGIN
INSERT INTO PERSON.PERSON
VALUES
(SEQ_USERINFO.NEXTVAL, 'F', '触发了', '', '');
END;
复制
1.1 编译报错ORA-01031
1.2 检查对象状态和权限
ALTER TRIGGER TRG_UPD COMPILE;--再次编译对象
SELECT T.STATUS,T.* FROM DBA_OBJECTS T WHERE T.OBJECT_NAME='TRG_UPD';--显示INVALID
SQL> col GRANTEE for a15
SQL> col PRIVILEGE for a25
SQL> SELECT * FROM DBA_SYS_PRIVS T WHERE T.GRANTEE='SYSTEM';--默认没有插入和更新其他表的权限
GRANTEE PRIVILEGE ADMIN_OPT
--------------- ------------------------- ---------
SYSTEM GLOBAL QUERY REWRITE NO
SYSTEM CREATE MATERIALIZED VIEW NO
SYSTEM CREATE TABLE NO
SYSTEM UNLIMITED TABLESPACE YES
SYSTEM SELECT ANY TABLE NO
复制
2.处理办法
SQL> GRANT update ANY TABLE TO system;
Grant succeeded.
SQL> grant insert any table to system;
Grant succeeded.
SQL> ALTER TRIGGER SYSTEM.TRG_UPD COMPILE;
Trigger altered.
SQL> col OBJECT_NAME for a15
SQL> col OWNER for a10
SQL> SELECT T.STATUS,T.OBJECT_NAME,T.OWNER FROM DBA_OBJECTS T WHERE T.OBJECT_NAME='TRG_UPD';
STATUS OBJECT_NAME OWNER
--------------------- --------------- ----------
VALID TRG_UPD SYSTEM
复制
3.验证效果
– 验证触发器是否生效
UPDATE PERSON.PERSON SET NAME = ‘ZHANGSAN’ WHERE PERSONID = ‘1’;
– 验证触发器是否工作:
SELECT * FROM PERSON.PERSON WHERE NAME = ‘触发了’;
– 清除数据防止干扰后面测试:
DELETE FROM PERSON.PERSON WHERE NAME = ‘触发了’;
4.小结
涉及到权限的事情,一般就是排查系统权限DBA_SYS_PRIVS,角色权限,DBA_ROLE_PRIVS和对象权限。
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle数据库调整内存应该注意的几个问题
听见风的声音
344次阅读
2025-03-18 09:43:11
Oracle SQL 执行计划分析与优化指南
Digital Observer
283次阅读
2025-04-01 11:08:44
Oracle 10G DG 修复从库-磁盘空间爆满导致从库无法工作
Albert Tan DBA 之路
156次阅读
2025-03-27 16:52:57
Oracle 加密不求人:一篇文章教你搞定 TDE
Digital Observer
83次阅读
2025-04-09 15:31:52
Google Cloud 与 Oracle 合作推出数据库合作伙伴计划
通讯员
60次阅读
2025-04-10 10:22:20
记一次watchdog引起的Oracle数据库异常
Digital Observer
54次阅读
2025-04-01 09:59:38
Oracle大表数据导出指南
yuki
54次阅读
2025-03-20 16:27:24
紧急救援!SCN调整秘籍(二)
呆呆的私房菜
52次阅读
2025-03-25 10:37:52
oracle 补丁包
凉冰
46次阅读
2025-03-19 15:20:17
oracle巡检的其他检查
听溪
42次阅读
2025-03-23 22:17:19