[20180403]访问dba_autotask_task无输出问题.txt
[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非常容易混淆.
[20180403]访问dba_autotask_task无输出问题.txt的更多相关文章
- top 自动执行的shell脚本中,使用top -n 1 > log.txt, 上电自动执行,文件无输出
. 自动执行的shell脚本中,使用top -n > log.txt, 上电自动执行,文件无输出,使用一下命令解决: //usr/bin/top -d -n -b > log.txt 如果 ...
- 将Matlab中的矩阵输出到txt文件
将矩阵输出到txt文件中的方法,遍寻网络,始见真经!!! fid=fopen('C:Documents and Settingscleantotal.ped','wt');%写入文件路径 matrix ...
- 将CMD内的显示内容输出到txt文件
将CMD内的显示内容输出到txt文件 xxxx -t >c:\test.txt //xxxx为命令 如ping www.baidu.com //-t >c:\test.tx ...
- Anjuta 调试无输出 warning: GDB: Failed to set controlling terminal
调试无输出,起初以为是那个warning的问题,后来才知道这个系统printf直到遇到'\n'换行符才输出,VC6用习惯了没想到还有这样的,网上说这样是节省系统资源. 那个warning暂时还没看到影 ...
- [工具] 解决sublime text运行javascript console无输出问题
1.使用nodeJS在sublime text 运行javascript 下载安装nodeJS 在sublime text新建build system:tools->build system-& ...
- python筛选特定文件的信息按照格式输出到txt
最近搞数据库,为了把图片文件的信息导入数据库表中,我开始研究python列出图片文件,其中发现因为IE临时文件里有非常多的不需要的图片,就需要筛选掉一些文件. 最终用python输出了所有需要的图片文 ...
- Java代码输出到txt文件(申请专利贴源码的必备利器)
最近公司在申请专利,编写不少文档,项目的代码量实在是过于庞大.如果一个一个的复制粘贴虽然能够完成,但是对于程序员而言实在没有这个必要.shell或者python就能解决这个问题.由于我个人对于shel ...
- 在IIS中部署好WCF服务站点后,本机访问服务无问题,局域网中其他电脑访问不到
1.问题描述 在IIS中部署好WCF服务站点后,本机访问服务无问题,局域网中其他电脑访问不到. 2.解决方法 (1)控制面板 -> Windows防火墙 -> 高级设置 (2)属性 (3) ...
- [PocketFlow]解决TensorFLow在COCO数据集上训练挂起无输出的bug
1. 引言 因项目要求,需要在PocketFlow中添加一套PeleeNet-SSD和COCO的API,具体为在datasets文件夹下添加coco_dataset.py, 在nets下添加pelee ...
随机推荐
- Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成
写到第12章才出现Liferay的内容,希望可以厚积薄发. 我们的目标是不使用不维护Activiti的用户组织架构,只维护Liferay的体系,这样的好处是非常明显的,即不用做组织架构的同步工作. 原 ...
- Java 基础学习总结(一)抽象类和接口
接触java的时间不是很长,以前对抽象类和接口的定义和区别也是模糊不清,最近拿起学校的教程读了起来,也参阅了网上的博客大神理解和总结,于是决定自己按照自己的理解来总结一下. 抽象类(半成品) 一般 ...
- EIGRP路由协议的简单理解及应用
1.EIGRP 增强型内部网关路由协议 他是动态路由协议,是思科私有的路由协议(2013年已经公有化) 特点: 1)路由更新:闪速更新:触发式更新:路由增量更新 2)协议更新采用组播地址来维持EI ...
- docker 日志方案
docker logs默认会显示命令的标准输出(STDOUT)和标准错误(STDERR).下面使用echo.sh和Dockerfile创建一个名为echo.v1的镜像,echo.sh会一直输出”hel ...
- SpringBoot2.0源码分析(二):整合ActiveMQ分析
SpringBoot具体整合ActiveMQ可参考:SpringBoot2.0应用(二):SpringBoot2.0整合ActiveMQ ActiveMQ自动注入 当项目中存在javax.jms.Me ...
- 简明awk教程(Simple awk tutorial)
整理翻译.原文地址:http://www.hcs.harvard.edu/~dholland/computers/awk.html 简明awk教程 为什么选awk? awk小巧.快速.简单.awk语言 ...
- go import使用及. _的作用解析
go中import用于导入包.导入之后就可以使用包中的代码. 比如: import( "fmt" ) 在代码中就可以使用fmt包中的方法,如: fmt.Println(" ...
- Baffle.js – 用于实现文本模糊效果的 JavaScript 库
Baffle.js 是一个 JavaScript 库,设计用来模糊和揭开DOM元素的文本. 这些元素可以是一个 CSS 选择器的形式.一个节点列表或者一个单节点. 你也可以传递一个选择对象给插件. 在 ...
- PHP 正则表达式资料
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 举例来说,正则表达式的一个 ...
- Django 学习笔记(四) --- 模型和数据库
人生苦短 ~ Tips:仅适用于 Python 3+(反正差别不大,py2 改改也能用).因为据 Python 之父 Guido van Rossum 说会在 2020 年停止对 Python 2 的 ...