我正在使用oracle DB,现在因为我正在监视连接到我的java应用程序的oracle DB的性能,所以现在我必须定期监视DB中活动连接的数量,让我们说每隔30分钟一次下面是查询,它返回活动用户的数量以及名称和计数
select osuser, count(osuser) as active_conn_count
from v$session
group by osuser
order by active_conn_count desc
现在请告知我如何在oracle DB本身的调度程序中安排一个调度,每30分钟触发一次。
答案 0 :(得分:4)
我建议您将统计信息保存在表格中(例如my_log_table
),在这种情况下,时间表看起来像这样:
begin
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'keep_stats',
job_type => 'PLSQL_BLOCK',
job_action => 'begin insert into my_log_table (mUser,mCnt) (select osuser, count(osuser) as active_conn_count from v$session group by osuser order by active_conn_count desc);commit;end;',
start_date => timestamp '2016-11-07 19:00:00',
repeat_interval => 'FREQ=MINUTELY;INTERVAL=30;',
enabled => TRUE);
end;
答案 1 :(得分:1)
有很多关于dbms_scheduler的例子。提交定期工作很容易。但实际上你不需要这样做! Oracle已经存储了大量关于数据库性能的数据,使用这些统计数据会更容易,更准确。 在这里查看active_session_history。
希望这就是你要找的东西。
答案 2 :(得分:0)
首先,您要创建一个计划。
dbms_scheduler.create_schedule( schedule_name => 'EVERY_1ST_SATURDAY'
, repeat_interval => 'FREQ=MONTHLY;INTERVAL=1;BYDAY=1 SAT;BYHOUR=2;BYMINUTE=0'
, start_date => SYSTIMESTAMP
, comments => '1st Saturday of the month 2am.'
);
您可以选择创建一个程序:
dbms_scheduler.create_program( program_name => 'GATHER_SCHEMA_STATS'
, program_type => 'STORED_PROCEDURE'
, program_action => 'dbms_stats.GATHER_SCHEMA_STATS'
, number_of_arguments => 1
, enabled => FALSE
, comments => 'Gather schema''s stats (e.g. FRAMEWORK''s)'
);
...授予访问权限:
GRANT execute ON sys.GATHER_SCHEMA_STATS TO framework;
...及其参数:
DBMS_SCHEDULER.define_program_argument ( 'GATHER_SCHEMA_STATS', 1 , 'ownname', 'VARCHAR2', 'FRAMEWORK' );
其次,你创造了一份工作:
DBMS_SCHEDULER.CREATE_JOB ( job_name => 'FRAMEWORK.GATHER_FRAMEWORK_STATS_JOB1'
, program_name => 'SYS.GATHER_SCHEMA_STATS'
, schedule_name => 'SYS.EVERY_1ST_SATURDAY'
, enabled => TRUE
, auto_drop => FALSE
, comments => 'Gather FRAMEWORK''s stats on 1st Saturday of the month.'
);
答案 3 :(得分:0)
repeat_interval => ' FREQ = HOURLY; BYMINUTE = 0,30; BYSECOND = 0', -