[20180403]访问dba_autotask_task无输出问题.txt

--//链接http://www.itpub.net/thread-1911421-1-1.html的讨论,还没注意原先的帖子是2015年.
--//如果查询select task_name,client_name,status,CURRENT_JOB_NAME from dba_autotask_task ;没有输出,
--//一定是基表SYS.KET$_CLIENT_TASKS 没有记录.
--//通过测试发现一些以前没有注意的问题.

1.环境:
SYS@book> @ &r/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

SYS@book> select count(*) from SYS.KET$_CLIENT_TASKS ;
  COUNT(*)
----------
         3

SYS@book> select task_name,client_name,status,CURRENT_JOB_NAME from dba_autotask_task ;
TASK_NAME               CLIENT_NAME                     STATUS   CURRENT_JOB_NAME
----------------------- ------------------------------- -------- -----------------
AUTO_SQL_TUNING_PROG    sql tuning advisor              ENABLED
auto_space_advisor_prog auto space advisor              ENABLED
gather_stats_prog       auto optimizer stats collection ENABLED

2.测试删除基表KET$_CLIENT_TASKS内容.
--//先做一个备份.千万不要在生产系统做这样的测试:
SYS@book> create table tt as select * from  KET$_CLIENT_TASKS;
Table created.

SYS@book> delete from KET$_CLIENT_TASKS;
3 rows deleted.

SYS@book> commit ;
Commit complete.

SYS@book> select task_name,client_name,status,CURRENT_JOB_NAME from dba_autotask_task;
no rows selected

--//可以发现现在没有输出了.
SYS@book> insert into SYS.KET$_CLIENT_TASKS select * from tt;
3 rows created.

SYS@book> commit ;
Commit complete.

SYS@book> select task_name,client_name,status,CURRENT_JOB_NAME from dba_autotask_task;
TASK_NAME               CLIENT_NAME                     STATUS   CURRENT_JOB_NAME
----------------------- ------------------------------- -------- ----------------
AUTO_SQL_TUNING_PROG    sql tuning advisor              ENABLED
auto_space_advisor_prog auto space advisor              ENABLED
gather_stats_prog       auto optimizer stats collection ENABLED

3.难道是人为删除吗?为了重复测试,我使用原来的冷备份覆盖了数据库.
--//发现重启数据库后发现:
SYS@book> select count(*) from SYS.KET$_CLIENT_TASKS ;
  COUNT(*)
----------
         0

--//再现了作者的问题.我本来想通过logminer发现问题,因为没有打开附加日志居然看不到对SYS.KET$_CLIENT_TASKS的删除操作.
--//不过经过一个"漫长"的分析,我发现设置参数job_queue_processes=0,使用冷备份再次启动,SYS.KET$_CLIENT_TASKS的信息不会删除.
--//也就是某个job或者scheduler,删除了SYS.KET$_CLIENT_TASKS的信息.

--//我看了数据库,发现job_name='ORA$AUTOTASK_CLEAN'可能性最大,其执行脚本如下;

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'SYS.ORA$AUTOTASK_CLEAN'
      ,schedule_name   => 'SYS.DAILY_PURGE_SCHEDULE'
      ,program_name    => 'SYS.ORA$AGE_AUTOTASK_DATA'
      ,comments        => 'Delete obsolete AUTOTASK repository data'
    );
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.ORA$AUTOTASK_CLEAN'
     ,attribute => 'RESTARTABLE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.ORA$AUTOTASK_CLEAN'
     ,attribute => 'LOGGING_LEVEL'
     ,value     => SYS.DBMS_SCHEDULER.LOGGING_OFF);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.ORA$AUTOTASK_CLEAN'
     ,attribute => 'MAX_FAILURES');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.ORA$AUTOTASK_CLEAN'
     ,attribute => 'MAX_RUNS');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.ORA$AUTOTASK_CLEAN'
     ,attribute => 'STOP_ON_WINDOW_CLOSE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.ORA$AUTOTASK_CLEAN'
     ,attribute => 'JOB_PRIORITY'
     ,value     => 3);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.ORA$AUTOTASK_CLEAN'
     ,attribute => 'SCHEDULE_LIMIT');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.ORA$AUTOTASK_CLEAN'
     ,attribute => 'AUTO_DROP'
     ,value     => FALSE);

SYS.DBMS_SCHEDULER.ENABLE
    (name                  => 'SYS.ORA$AUTOTASK_CLEAN');
END;
/

--//可以确定调用程序是program_name    => 'SYS.ORA$AGE_AUTOTASK_DATA'.看看SYS.ORA$AGE_AUTOTASK_DATA执行内容:

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_PROGRAM
    (
      program_name         => 'SYS.ORA$AGE_AUTOTASK_DATA'
     ,program_type         => 'STORED_PROCEDURE'
     ,program_action       => 'dbms_autotask_prvt.age'
     ,number_of_arguments  => 0
     ,enabled              => FALSE
     ,comments             => 'deletes obsolete AUTOTASK repository data'
    );

SYS.DBMS_SCHEDULER.ENABLE
    (name                  => 'SYS.ORA$AGE_AUTOTASK_DATA');
END;
/

--//也就是手工执行dbms_autotask_prvt.age会清除SYS.KET$_CLIENT_TASKS ;看看是否正确.

@ &r/10046on 12
exec dbms_autotask_prvt.age;
@ &r/10046off

--//检查跟踪文件可以发现:
=====================
PARSING IN CURSOR #140216792384000 len=86 dep=1 uid=0 oct=7 lid=0 tim=1522658288077950 hv=4100613328 ad='7bedf198' sqlid='df4jnq7u6nt6h'
DELETE FROM KET$_CLIENT_TASKS WHERE CURR_WIN_START < (SYSTIMESTAMP- INTERVAL '31' DAY)
END OF STMT
PARSE #140216792384000:c=25996,e=26168,p=0,cr=206,cu=0,mis=1,r=0,dep=1,og=1,plh=690981981,tim=1522658288077949
EXEC #140216792384000:c=0,e=109,p=0,cr=6,cu=0,mis=0,r=0,dep=1,og=1,plh=690981981,tim=1522658288078164
STAT #140216792384000 id=1 cnt=0 pid=0 pos=1 obj=0 op='DELETE  KET$_CLIENT_TASKS (cr=6 pr=0 pw=0 time=55 us)'
STAT #140216792384000 id=2 cnt=0 pid=1 pos=1 obj=6275 op='TABLE ACCESS FULL KET$_CLIENT_TASKS (cr=6 pr=0 pw=0 time=49 us cost=3 size=35 card=1)'
CLOSE #140216792384000:c=0,e=2,dep=1,type=3,tim=1522658288078288
=====================

--//可以发现启动调用job_name='ORA$AUTOTASK_CLEAN'.但是删除有条件的WHERE CURR_WIN_START < (SYSTIMESTAMP- INTERVAL '31' DAY).
--//这样也验证我使用冷备份启动后为什么KET$_CLIENT_TASKS没有信息,信息已经删除了.

4.继续分析:
BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

SYS@book> select task_name,client_name,status,CURRENT_JOB_NAME from dba_autotask_task;
no rows selected

--//居然还是没有信息插入基表KET$_CLIENT_TASKS .我仔细跟踪DBMS_AUTO_TASK_ADMIN.disable,发现实际修改的基表是:

SYS@book> select CLIENT_ID, OPERATION_ID, STATUS ,ATTRIBUTES, PRIORITY_OVERRIDE from KET$_CLIENT_config;
 CLIENT_ID OPERATION_ID     STATUS ATTRIBUTES PRIORITY_OVERRIDE
---------- ------------ ---------- ---------- -----------------
         0            0          2          0                 0
         4            0          2          5                 0
         5            0          1          5                 0
         6            0          2          5                 0
         1            0          2          1                 0
         2            0          2         20                 0
         3            0          2         34                 0
7 rows selected.
--//CLIENT_ID=5,STATUS=1表示disable.这时我才发现我查询错误的视图,实际上是查询:
SYS@book> column ATTRIBUTES format a56
SYS@book> select client_name, status,attributes,window_group from dba_autotask_client;
CLIENT_NAME                     STATUS   ATTRIBUTES                                               WINDOW_GROUP
------------------------------- -------- -------------------------------------------------------- ---------------
auto optimizer stats collection ENABLED  ON BY DEFAULT, VOLATILE, SAFE TO KILL                    ORA$AT_WGRP_OS
auto space advisor              DISABLED ON BY DEFAULT, VOLATILE, SAFE TO KILL                    ORA$AT_WGRP_SA
sql tuning advisor              ENABLED  ONCE PER WINDOW, ON BY DEFAULT, VOLATILE, SAFE TO KILL   ORA$AT_WGRP_SQ

--//oracle在2个视图DBA_AUTOTASK_TASK,DBA_AUTOTASK_CLIENT上非常容易混淆.
--//最后,贴一下oracle官网对这2个表的解释:

DBA_AUTOTASK_TASK:displays information about current and past automated maintenance tasks.
DBA_AUTOTASK_CLIENT:displays statistical data for each automated maintenance task over 7-day and 30-day periods.

--//至于dba_autotask_task等晚上10点scheduler运行就会有记录了.
--//第二天:

SYS@book> select count(*) from SYS.KET$_CLIENT_TASKS ;
  COUNT(*)
----------
         3

SYS@book> select task_name,client_name,status,CURRENT_JOB_NAME,LAST_GOOD_DATE from dba_autotask_task ;
TASK_NAME               CLIENT_NAME                     STATUS   CURRENT_JOB_NAME LAST_GOOD_DATE
----------------------- ------------------------------- -------- ---------------- ---------------------------------
AUTO_SQL_TUNING_PROG    sql tuning advisor              ENABLED                   2018-04-02 22:00:05.625135 +08:00
auto_space_advisor_prog auto space advisor              ENABLED                   2018-04-02 22:00:06.527905 +08:00
gather_stats_prog       auto optimizer stats collection ENABLED                   2018-04-02 22:00:17.128253 +08:00

--//总之这2个视图DBA_AUTOTASK_TASK,DBA_AUTOTASK_CLIENT非常容易混淆.

转载于:https://www.cnblogs.com/lfree/p/8706330.html

[20180403]访问dba_autotask_task无输出问题.txt相关推荐

  1. adb logcat 通过包名过滤日志并输出到txt文件

    最近学使用ADB命令抓包APP闪退的日志: 1)在cmd命令行中可以使用adb logcat 命令查看android系统的log,也可以使用adb shell进入到adb shell专用命令行 2)d ...

  2. shell脚本自动执行,top命令无输出

    shell脚本在系统启动时推后台自动执行,发现其中/usr/bin/top -n 1 -c -b -u ceph 命令并无输出 但是系统启动之后手动执行脚本,&推后台脚本中的top仍然能够正常 ...

  3. matlab设置数组输出到文件中,Matlab将元胞数组输出到txt或者dat文件中

    我目前遇上了元胞数组无法输出或无法完整输出到txt/dat文件的问题.网上有用 fprintf 和writetable两种方法,可是用fprintf的方法提示没有为'cell'输入定义函数,可是我明明 ...

  4. python 多数据输出到txt_详解python读取和输出到txt

    读取txt的数据和把数据保存到txt中是经常要用到的,下面我就总结一下. 读txt文件 python常用的读取文件函数有三种read().readline().readlines() 以读取上述txt ...

  5. Java代码输出到txt文件(申请专利贴源码的必备利器)

    最近公司在申请专利,编写不少文档,项目的代码量实在是过于庞大.如果一个一个的复制粘贴虽然能够完成,但是对于程序员而言实在没有这个必要.shell或者python就能解决这个问题.由于我个人对于shel ...

  6. [工具] 解决sublime text运行javascript console无输出问题

    1.使用nodeJS在sublime text 运行javascript 下载安装nodeJS 在sublime text新建build system:tools->build system-& ...

  7. 将CMD内的显示内容输出到txt文件

    将CMD内的显示内容输出到txt文件 xxxx -t >c:\test.txt        //xxxx为命令  如ping www.baidu.com //-t >c:\test.tx ...

  8. redis 启动无输出_Git Bash 中执行交互式命令无响应

    众所周知的原因,Windows下的命令行工具CMD非常难用,所以大家一般用Git Bash作为替代品,但是有时候在其中执行一些命令会出现无响应(无输出结果.无报错信息)的现象,本文将给出该现象的原因及 ...

  9. 字符串中包含unicode编码内容转中文打印或输出到txt文件

    1.python版本 python3.6.8 2.场景: 在某些场景中,读取ES中的数据内容然后打印或写入到txt文件中,发现ES中的原始数据中包含unicodde编码的内容,打印出来或者输出到txt ...

最新文章

  1. C++ 随机数生成的2种方法--生成指定范围内的随机数
  2. 漫游飞行_美术课|一年级下漫游飞行世界
  3. jvm性能调优实战 -55RPC调用引发的OOM故障
  4. 语音识别系列1:语音识别Speech recognition综述
  5. php毕业设计遇到的问题,常见问题_php毕业设计_php课程设计_php大作业_原创作品下载网...
  6. linux下mysql5.7的安装教程_linux下mysql 5.7.18安装教程 邯郸
  7. 在Mac中用快捷键快速插入日期时间
  8. Linux:VMware Tools安装方法及共享文件夹设置方法
  9. 网络编程中sockaddr和sockaddr_in的区别(socket)
  10. 远程控制安卓手机教程
  11. 微软雅黑的问题(for silverlight)
  12. vnr懒人版教程_【转载】Galgame老司机实用工具:VNR使用教程
  13. excel概率密度函数公式_标准正态分布密度函数公式
  14. 编程题涉及到的数学公式(持续更新……)
  15. 泰勒级数、欧拉公式、三角函数
  16. Jsoup——抖音视频抓取(二)
  17. PhpStorm 远程连接服务器
  18. PCB软件弹出网页的解决方法之一
  19. 《机器学习》周志华课后习题答案——第五章(1-7已完结)
  20. 17:Oriented R-CNN for Object Detection

热门文章

  1. JavaScript中的遍历详解
  2. java字符串格式化:String.format()方法的使用
  3. Redis事务(transaction)
  4. 锻炼后应该做的4件事
  5. Python list 数据类型:列表
  6. Oracle编程入门经典 第11章 过程、函数和程序包
  7. 程序员如何明智地提出好的问题
  8. 《大话数据结构》第9章 排序 9.8 归并排序(下)
  9. 厉害了!用 JS 实现人脑和计算机交互
  10. 整数的无符号编码和有符号编码