oracle中locate,Oracle定位不知源头的SQL

接到现场数据库维护厂商发出的警告,有一条 insert语句执行了几千秒。

开发排查,从select * from dba_source s where s.text like '%XXX%';查到是一个存储过程,于是找到存储过程,将其改名。

但问题没有解决,隔天又收到警告。

难道是存储过程改名有问题,我远程到现场看了下,并没有问题。再次查看数据库报告:

SQL Module  是 DBMS_SCHEDULER,确定无疑是Oracle JOB调用,奇怪的是SQL语句有  /* SQL Analyze(194, 1) */ 这样的提示。

如果想定位到这条SQL,最好是找到这条SQL历史执行的session,希望找到蛛丝马迹。

select * from dba_hist_active_sess_history s where s.sql_id='29yrhxqdk2d1q';

TOP_LEVEL_SQL_ID 为5zruc4v6y32f9:说明是sql_id为5zruc4v6y32f9的调用的这条sql

MODULE:DBMS_SCHEDULER

PLSQL_ENTRY_OBJECT_ID:9013

根据上面的信息再进行查询:

select * from dba_objects where object_id=9013;--结果是owner=sys  object_name=dbms_sqltune

5zruc4v6y32f9

DECLARE

job                 BINARY_INTEGER := :job;

next_date           TIMESTAMP WITH TIME ZONE := :mydate;

broken              BOOLEAN := FALSE;

job_name            VARCHAR2(30) := :job_name;

job_subname         VARCHAR2(30) := :job_subname;

job_owner           VARCHAR2(30) := :job_owner;

job_start           TIMESTAMP WITH TIME ZONE := :job_start;

job_scheduled_start TIMESTAMP WITH TIME ZONE := :job_scheduled_start;

window_start        TIMESTAMP WITH TIME ZONE := :window_start;

window_end          TIMESTAMP WITH TIME ZONE := :window_end;

chain_id            VARCHAR2(14) := :chainid;

credential_owner    varchar2(30) := :credown;

credential_name     varchar2(30) := :crednam;

destination_owner   varchar2(30) := :destown;

destination_name    varchar2(30) := :destnam;

job_dest_id         varchar2(14) := :jdestid;

log_id              number := :log_id;

BEGIN

DECLARE

ename VARCHAR2(30);

BEGIN

ename := dbms_sqltune.execute_tuning_task('SYS_AUTO_SQL_TUNING_TASK');

END;

:mydate := next_date;

IF broken THEN

:b := 1;

ELSE

:b := 0;

END IF;

END;

这是数据库SQL优化的包,自己调用的,终于明白/* SQL Analyze(194, 1) */的意思了,是标记这种优化包调用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值