[20180403]訪問dba_autotask_task無輸出
[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非常容易混淆.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2152515/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 訪問github出現無法訪問此網站Github網站
- [20180403]關於時區問題.txt
- github無法訪問Github
- git hub 無法訪問 訪問速度慢Git
- 本地站點無法訪問
- laravel-admin 無法訪問Laravel
- 寶塔皮膚修改埠號,無法訪問_寶塔修改埠後無法訪問
- springmvc寫了方法無法訪問SpringMVC
- 無法正常訪問伺服器伺服器
- 解決 Windows 無法訪問共享Windows
- springboot無妨訪問html頁面Spring BootHTML
- 深入淺出訪問者模式模式
- 防止跨域問題無法訪問網址跨域
- win10無法訪問指定檔案 win10無法訪問指定裝置路徑Win10
- Java IO輸入輸出及亂碼問題Java
- SSH金鑰無法訪問排查思路
- 無法訪問雲主機50070埠
- [20180403]windows7小技巧.txtWindows
- win10無internet訪問怎麼辦_win10無internet訪問許可權如何修復Win10訪問許可權
- [20241112]無法理解sqlplus的輸出.txtSQL
- JAVA訪問雲資料mysql出現問題JavaMySql
- WIN10系統無法訪問U盤怎麼處理 win10電腦u盤無法訪問拒絕訪問如何解決Win10
- [20210902]cut使用輸出問題.txt
- 解決win10無法訪問共享Win10
- 教你如何進行SSH無密碼訪問密碼
- 代理IP無法訪問怎麼解決?
- springboot新增靜態資源無法訪問Spring Boot
- 解決 raw.githubusercontent.com 無法訪問的問題Github
- 解決寶塔皮膚無法訪問的問題?
- WIN10系統無法訪問隨身碟怎麼處理 win10電腦u盤無法訪問拒絕訪問如何解決Win10
- 記一次程式訪問無法訪問虛擬機器部署的服務虛擬機
- springboot中靜態頁面無法訪問及return無法重定向問題Spring Boot
- JDK 18 及以上使用標準輸出流中文輸出亂碼問題JDK
- win10下lls無法本地訪問怎麼操作_win10下lls無法本地訪問如何解決Win10
- springboot+themeleaf+bootstrap訪問靜態資源/無法訪問靜態資源/圖片Spring Boot
- 關於docker無法訪問倉庫的映象代理問題Docker
- postgres_fdw 無法通過域名 訪問外部表問題
- golang 解析php輸出json相容問題GolangPHPJSON