2016-11-07 2 views
0

Я использую Oracle Oracle, теперь, когда я контролирую производительность Oracle, которая подключена к моему java-приложению, поэтому теперь мне нужно отслеживать количество активных подключений в БД через регулярные промежутки времени позволяет говорить через каждые 30 минут ниже является запрос, который возвращают мне количество активных пользователей, а также там имя и сосчитатьКак использовать dbms_scheduler для запуска задания каждые 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

Вы пробовали что-нибудь? Пожалуйста, разместите свой код и проблемы с ним. – Aleksej

+0

Кроме того, что вы хотите, чтобы фоновая работа делалась с результатами инструкции 'select'? Например, вы пытаетесь записать эти данные в таблицу? –

+0

@Aleksej Спасибо за консультацию, но прошу вас понравиться, я новый bie в мире оракула и не знаю, как настроить работу в DBMS_scheduler, попросите вас проконсультироваться n подробный бит – user1881169

ответ

1

Есть много примеров о dbms_scheduler. Легко отправить повторяющуюся работу. Но на самом деле вам не нужно это делать! Oracle уже хранит массу данных о производительности базы данных, будет проще и гораздо точнее использовать эти статистические данные. Посмотрите на active_session_history здесь.

Надеюсь, это то, что вы ищете.

2

Я хотел бы предложить, чтобы сохранить статистику в таблице (скажем 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; 
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.' 
         ); 
0

repeat_interval => 'FREQ = HOURLY; BYMINUTE = 0,30; BYSECOND = 0 ', -

+1

Это не очень хороший ответ, пожалуйста, отформатируйте свой код и добавьте объяснение – CodingNinja

Смежные вопросы