[20210720]修改TRI_PREVENT_DROP_TRUNCATE触发器.txt --//另外的生产系统出现如下错误,可以参考我以前的链接:: ORA-20000: YOU CAN NOT TRUNCATE or DROP BIN$Bo/SlefRJ3fgU2ljqMCCgg==$0 TABLE! ORA-06512: 在 line 6 ORA-06512: 在 "SYS.INSERT_DOCTOR_LOGS", line 17 ORA-06512: 在 line 1 --//为了避免以后再次出现错误,修改TRI_PREVENT_DROP_TRUNCATE触发器在测试环境测试看看:: 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production CREATE OR REPLACE TRIGGER SYS.TRI_PREVENT_DROP_TRUNCATE BEFORE TRUNCATE OR DROP ON DATABASE BEGIN --//dbms_output.put_line( ora_dict_obj_type); IF ora_dict_obj_type IN ('TABLE', 'SEQUENCE') AND ora_dict_obj_owner = 'SCOTT' AND ( ORA_DICT_OBJ_NAME NOT LIKE 'SYS\_JOURNAL\_%' ESCAPE '\' AND ORA_DICT_OBJ_NAME NOT LIKE 'SYS\_EXPORT\_SCHEMA_%' ESCAPE '\' AND ORA_DICT_OBJ_NAME NOT IN ('SCHEDULER$_PROGRAM_ARG' ,'SCHEDULER$_JOB_ARG') OR ( ORA_DICT_OBJ_NAME NOT LIKE 'BIN$%' AND LENGTHB (ORA_DICT_OBJ_NAME) = 30)) THEN raise_application_error ( -20000 ,'YOU CAN NOT TRUNCATE or DROP ' || ora_dict_obj_name || ' TABLE!' ); END IF; END; / --//以上写错了,加入长度判断的情况后,感觉有点晕,瞬间感觉自己不会写代码了。改写如下: CREATE OR REPLACE TRIGGER SYS.TRI_PREVENT_DROP_TRUNCATE BEFORE TRUNCATE OR DROP ON DATABASE BEGIN --//dbms_output.put_line( ora_dict_obj_type); IF ORA_DICT_OBJ_TYPE IN ('TABLE', 'SEQUENCE') AND ORA_DICT_OBJ_OWNER = 'SCOTT' AND ORA_DICT_OBJ_NAME NOT LIKE 'SYS\_JOURNAL\_%' ESCAPE '\' AND ORA_DICT_OBJ_NAME NOT LIKE 'SYS\_EXPORT\_SCHEMA_%' ESCAPE '\' AND ORA_DICT_OBJ_NAME NOT IN ('SCHEDULER$_PROGRAM_ARG' ,'SCHEDULER$_JOB_ARG') AND NOT ( ORA_DICT_OBJ_NAME LIKE 'BIN$%==$0' AND LENGTHB (ORA_DICT_OBJ_NAME) = 30) THEN raise_application_error ( -20000 ,'YOU CAN NOT TRUNCATE or DROP ' || ora_dict_obj_name || ' TABLE!'); END IF; END; / --//增加排除ORA_DICT_OBJ_NAME LIKE 'BIN$%'的情况。我不知道drop后这些对象的命名规则,似乎都是BIN$开头,结尾==$0,并且长度等 --//于30。 2.测试: CREATE TABLESPACE SUGAR DATAFILE '/mnt/ramdisk/book/sugar01.dbf' SIZE 10M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED LOGGING ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON; 2.测试: create table tx tablespace sugar as select * from all_objects; create table ty tablespace sugar as select * from all_objects where rownum<=10000; drop table ty ; alter TRIGGER SYS.TRI_PREVENT_DROP_TRUNCATE enable ; SCOTT@book> update tx set owner=lpad('a',30,'a'); SCOTT@book> select owner c30 ,OBJECT_NAME from tx where rownum=1; C30 OBJECT_NAME ------------------------------ -------------------- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ICOL$ SCOTT@book> rollback ; Rollback complete. --//OK,没有报错,这样开发一般不会建立这样的对象,问题应该暂时解决。
[20210720]修改TRI_PREVENT_DROP_TRUNCATE触发器.txt
来源:这里教程网
时间:2026-03-03 16:50:38
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- ORA-01245 ORA-01110故障恢复
ORA-01245 ORA-01110故障恢复
26-03-03 - 一键解决ORA-00279 ORA-00289 ORA-00280
一键解决ORA-00279 ORA-00289 ORA-00280
26-03-03 - Oracle Recovery Tools恢复MISSING00000文件故障
- Oracle:容器数据库简介
Oracle:容器数据库简介
26-03-03 - 修改数据库字符集导致的数据异常
修改数据库字符集导致的数据异常
26-03-03 - 一键恢复ORA-01113 ORA-01110—Oracle Recovery Tools
- “你荐书,我买单!”——快来抱走你的精神食粮
“你荐书,我买单!”——快来抱走你的精神食粮
26-03-03 - 教你如何批量采集快手短视频,自媒体朋友必学
教你如何批量采集快手短视频,自媒体朋友必学
26-03-03 - 教你如何打造店铺爆品,增加客户流量
教你如何打造店铺爆品,增加客户流量
26-03-03 - 各路巨头都盯上了“芯片”
各路巨头都盯上了“芯片”
26-03-03
