11g中autotask disable后应该查哪个表来验证?

在oracle11g中,有个autotask的新特性,可以用来自动的收集优化信息,收集段信息等等。在EM中,我们看进菜单server-Oracle Scheduler-Automated Maintenance Tasks来看到他们:

问题的起源是在一个纯命令行的环境,收到一个change,需要disable autotask中的auto optimizer stats collection,于是按照原定的计划,先检查原来的状态,再执行package对其进行disable,最后再坚持一次是否已经更改成功:

很奇怪吧,status竟然没改变。

OK,我们一步一步来查。

我们做个10046的trace,发现在操作过程中,只是更新了KET$_CLIENT_CONFIG表,并没有对其他什么表进行操作。

那么是否在DBA_AUTOTASK_TASK和KET$_CLIENT_CONFIG之前有什么继承的关系呢?

我们进一步来看DBA_AUTOTASK_TASK ,却发现它是基于KET$_CLIENT_TASKS表的,而不是基于KET$_CLIENT_CONFIG表。

那么 KET$_CLIENT_CONFIG和KET$_CLIENT_TASKS是否有继承关系呢?查他们的object_type发现都是table,于是再去找他们的定义,在$ORACLE_HOME/rdbms/admin/catatsk.sql中,我们看到了这2个表的定义:

发现他们也没有继承关系,是独立的2个表。

所以DBMS_AUTO_TASK_ADMIN.DISABLE这个package不会改变DBA_AUTOTASK_TASK的状态。他们之间没有关系。

我们再来看看DBA_AUTO%这样类似的table,发现有一个table叫做DBA_AUTOTASK_CLIENT,我来继续查一下它是如何定义的:

我们看到DBA_AUTOTASK_CLIENT是基于KET$_CLIENT_CONFIG的。所以问题到这里就明了了。

我们disable autotask应该查的表应该是DBA_AUTOTASK_CLIENT,而不是DBA_AUTOTASK_TASK:

看到确实已经变成disable了。

最后,贴一下oracle官网对这2个表的解释:

呵呵,它也没说disable autotask之后该查哪个表吧。

相关文章

一条评论

  1. Hi

    由于刚接触Oracle数据库不久,请教下~~~
    如果停掉AUTO_TASK的功能话,应如何确定手动运行的auto optimizer stats collection,auto space advisor,sql tuning advisor的手动运行频率呢?一般会怎么设置呢?

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据