近期,某客户反馈应用厂商在数据库维护时,出现视图不能删除问题。检查报错信息后,初步判断可能是账户权限或触发器问题导致的此问题。

经过测试,可以发现使用SYS/SYSTEM账号可以正常创建删除;业务账号可以创建、不能删除,基本确定是有相关安全策略或触发器的影响。

但是到底哪些触发器影响呢,系统中有很多默认及应用的触发器,排查起来还有是难度的。

本次使用10046trace来跟踪删除语句,查找出对应的触发器SQL,应用厂商人员据此很快找到了对应的触发器。之后可以通过禁用触发器或使用高权限账户(system)来删除处理

过程如下:

1.排除权限问题

SYS用户验证“
SQL> create table TEST111.test20210303 as select * from dba_users;
Table created.SQL> drop table TEST111.test20210303 ;
Table dropped.业务用户验证:
SQL> show user
USER is "TEST111"
SQL> create table test20210303 as select * from dba_users;
Table created.SQL> drop table test20210303 ;
drop table test20210303
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: TEST111.TEST20210303 ?????drop??!
ORA-06512: at line 7检查业务用户的权限:
SQL> select * from dba_role_privs where grantee='TEST111';GRANTEE                        GRANTED_ROLE                   ADM DEF
------------------------------ ------------------------------ --- ---
TEST111                      RESOURCE                       NO  YES
TEST111                      DBA                            NO  YES
TEST111                      CONNECT                        NO  YES

2.10046跟踪分析的过程

1.查出进程的SID及OSPID
SQL> select sid from v$mystat where rownum=1;SID
----------786
SQL> select  b.spid,a.sid,a.username,a.program,a.machine,BLOCKING_SESSION 2  from v$session a,v$process b 3  where a.paddr=b.addr  and a.sid=786;SPID                            SID USERNAME
------------------------ ---------- ------------------------------
PROGRAM
------------------------------------------------
MACHINE
----------------------------------------------------------------
BLOCKING_SESSION
----------------
24317                           786 TEST111
sqlplus@nf-dboracle (TNS V1-V3)
nf-dboracle2.新开一个会话连接打开10046 TRACE
SQL> oradebug setospid 24317
Oracle pid: 92, Unix process pid: 24317, image: oracle@nf-dboracle (TNS V1-V3)
SQL> oradebug event 10046 trace name context forever,level 12;
Statement processed.
3.原进程执行删除语句
SQL> drop table test20210303 ;
drop table test20210303
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: TEST111.TEST20210303 ?????drop??!
ORA-06512: at line 74.停止10046 TRACE
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/orclpri/orcl/trace/orcl_ora_24317.trc
SQL> oradebug event 10046 trace name context off;
Statement processed.5.格式化后检查分析10046 TRACE文件
********************************************************************************
********************************************************************************SQL ID: asrh3b8ngw9zg Plan Hash: 0drop table test20210303 call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.00       0.00          0          0          0           0Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 124  Elapsed times include waiting on following events:Event waited on                             Times   Max. Wait  Total Waited----------------------------------------   Waited  ----------  ------------SQL*Net message from client                     1       35.97         35.97log file sync                                   1        0.00          0.00SQL*Net break/reset to client                   2        0.00          0.00SQL*Net message to client                       1        0.00          0.00
…………………………之后有如下语句
DECLAREl_errmsg VARCHAR2(100) := '不允许进行drop操作!';
BEGINIF ora_login_user NOT IN ('SYS','SYSTEM','DATA_MONITOR') THENraise_application_error(-20001, ora_dict_obj_owner||'.'||ora_dict_obj_name||' '||l_errmsg);END IF;END;

触发器引起的删除对象报错ORA-00604 ORA-20001的排查相关推荐

  1. php zpo框架,Yii使用DeleteAll连表删除出现报错问题的解决方法

    本文实例讲述了Yii使用DeleteAll连表删除出现报错问题的解决方法.分享给大家供大家参考,具体如下: 删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成 ...

  2. Ambari删除服务报错之CSRF protection is turned on

    Ambari安装组件失败后执行 curl 删除服务报错 CSRF protection is turned on X-Requested_By HTTP Header is required 解决方案 ...

  3. Oracle导入TYPE对象报错ORA-02304

    Oracle导入TYPE对象报错ORA-02304 Type是我们经常使用的数据库对象结构.我们在实际中,可以单独定义type类型,之后在PL/SQL代码或者数据表中使用. 在一个偶然的机会让笔者发现 ...

  4. Docker下删除镜像报错 (cannot be forced) - image has dependent child images

    记录一次docker删除镜像报错: docker rmi 镜像Id 报错: Error response from daemon: conflict: unable to delete ae9561a ...

  5. HashMap遍历中删除元素报错

    文章目录 一.问题描述 二.问题分析 三.解决问题 四.相关问题 一.问题描述 HashMap在遍历的时候进行删除元素报错java.util.ConcurrentModificationExcepti ...

  6. SQL Server 删除数据库报错 Cannot drop database dbname because it is currently in use

    SQL Server 删除数据库报错 Cannot drop database "dbname" because it is currently in use SQL Server ...

  7. MySQL删除用户报错:ERROR 1396 (HY000): Operation DROP USER failed for ‘tsjt‘@‘127.0.0.1‘

    背景: 本地安装的MySQL的MariaDB,期间创建了两个名为tsjt的不同登录ip的用户,一个为127.0.0.1,另一个为localhost.测试完毕后准备删除. 此时却发现创建的tsjt@12 ...

  8. Unity当GameObject.Find(““)获取不到对象报错时

    Unity当GameObject.Find("")获取不到对象报错时 有时候Hierarchy明明有我们需要获取的对象,但当他不启用时,我们用GameObject.Find(&qu ...

  9. spring boot ajax 415,解决@RequestBody接收json对象报错415的问题

    @RequestBody接收json对象报错415 前端请求: $.ajax({ url: basePath() + "/index/login.do", type : " ...

  10. 关于:js使用$.parseJSON字符串转json对象报错Uncaught SyntaxError- Unexpected token o in JSON at position 1

    今天使用js使用$.parseJSON字符串转json对象报错Uncaught SyntaxError- Unexpected token o in JSON at position 1,一直找不到原 ...

最新文章

  1. tf.keras.losses.KLDivergence KL散度 损失函数 示例
  2. 一线大厂BAT资深移动开发者倾情打造,教你从0构建App
  3. Spring系列教程四:Spring对Bean的管理细节
  4. linux deepin “debconf: DbDriver “config“: config.dat 被另一个进程锁定:资源暂时不可用“
  5. 如何创建一个FeatureClass,IFeatureWorkspace 接口漫谈
  6. Fun 3.0 发布——资源部署、依赖下载、代码编译等功能又又又增强啦!
  7. 第4课 列朋波骨《小学生C++趣味编程》
  8. 日常小记录json文件(json.load()、json.loads()、json.dump()、json.dumps())
  9. leveldb——leveldb入门篇之Linux下编译配置和使用
  10. Linux 进程后台运行
  11. “世界百位名人”诠释上海世博会城市主题
  12. 网站如何配置CDN加速?网站域名接入腾讯云CDN的步骤(附CDN防御)
  13. KVM虚拟化崛起:你选Ubuntu还是Red Hat?
  14. Layui 表格table自定义每一列的样式
  15. java图书借阅系统java图书管理系统java书籍借阅系统
  16. 西安互联网公司和生活成本
  17. 小觅相机运行ORB-SLAM3
  18. 免费可商用图片素材网站,建议收藏
  19. kali2021安装RTL8188GU无线网卡[TL-WN726N]驱动
  20. javascript动态插入html元素

热门文章

  1. 爬虫---涨跌停股票池信息----(东方财富)
  2. C# HttpClientHelper
  3. Win7专业版 下安装ArcGIS desktop 9.3总结
  4. GSM/GPRS之一-GSM基础知识
  5. Openbravo ERP介绍(三)
  6. 测试用例的设计-面试常见问题(基础篇)
  7. 中国计算机学会青年计算机科技论坛
  8. Unity—英雄无敌(前方高能)
  9. Python 中那些令人防不胜防的坑(一)
  10. 站在巨人的肩膀上--邵泓鑫