SYMPTOM
There are more than one million AQ$_PLSQL_NTFN_xxxxxxxx scheduler jobs in oracle database.
sql hangs for querying dba_scheduler_jobs.
Please note there are a couple of bugs on this issue, the steps are not necessarily working for every database versions.
SQL>select count(*) from dba_scheduler_jobs;
WORKAROUND
1)set job_queue_processes =0
SQL>alter system set job_queue_processes=0 scope=memory;
2)Stop and Drop all those AQ$_PLSQL_NTFN scheduler jobs:
— add rownum<100000 into below sqls, if the sql hangs.
SQL>select 'EXEC DBMS_SCHEDULER.STOP_JOB ('''|| job_name ||''', force => TRUE);' from dba_scheduler_jobs where job_name like 'AQ$_PLSQL_NTFN_%' and state='RUNNING'; SQL> select ' exec dbms_scheduler.drop_job('''||job_name ||''');' from dba_scheduler_jobs where job_name like 'AQ$_PLSQL_NTFN_%';
3)
SQL>select count(*) from sys.aq$AQ_SRVNTFN_TABLE_1 where queue='AQ$_AQ_SRVNTFN_TABLE_1_E'; DECLARE po dbms_aqadm.aq$_purge_options_t; BEGIN po.block := TRUE; DBMS_AQADM.PURGE_QUEUE_TABLE( queue_table => 'SYS.AQ_SRVNTFN_TABLE_1', purge_condition => 'qtview.queue = ''AQ$_AQ_SRVNTFN_TABLE_1_E''', purge_options => po); END; / select count(*) from sys.aq$AQ_SRVNTFN_TABLE_1 where queue='AQ$_AQ_SRVNTFN_TABLE_1_E';
4) Collect stats.
SQL> exec dbms_stats.gather_fixed_objects_stats; PL/SQL procedure successfully completed. SQL> exec dbms_stats.gather_schema_stats ('SYSTEM'); PL/SQL procedure successfully completed. SQL> exec dbms_stats.gather_schema_stats ('SYS'); PL/SQL procedure successfully completed. SQL> exec dbms_stats.gather_dictionary_stats; PL/SQL procedure successfully completed.
5) Rebuild indexes of DBA_SCHEDULER_JOBS
6) Bounce the instance.
SQL>shutdown immediate ;
SQL>startup;
SQL>alter system set job_queue_processes=1000 scope=memory;