Необходим инструмент для мониторинга результатов SQL-запросов - PullRequest
4 голосов
/ 02 декабря 2009

Я ищу инструмент для мониторинга результатов периодически запускаемого SQL-запроса и выдачи уведомления на основании того факта, что запрос возвращает какие-либо результаты. (любые другие фильтры приветствуются)

Мне нужно следить за таблицей транзакций на наличие ошибок, и было бы здорово, если бы мой sql-запрос мог выполняться в фоновом режиме, периодически обновляться и показывать уведомление при наличии каких-либо результатов.

Мне нужно подключиться к базе данных Oracle, и в настоящее время я использую PL / SQL Developer или Oracle SQL Developer.

Бесплатно, ОС и облегченные решения предпочтительнее:)

UPDATE:

Желательно, чтобы я не хотел создавать / изменять какие-либо объекты базы данных. Мы хотели бы использовать это и в наших клиентских базах данных, и не у всех из них есть лицензия на изменение баз данных, в которых работают их приложения Oracle.

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 02 декабря 2009

Как насчет использования DBMS_Scheduler для запуска хранимой процедуры, которая запрашивает таблицу, а затем использует UTL_Mail для отправки электронного письма в случае возникновения проблемы?

0 голосов
/ 11 октября 2011

Я использую это, и это работает абсолютно нормально.

- 1. Создать программу:

BEGIN 
 DBMS_SCHEDULER.CREATE_PROGRAM(
      program_name=>'user.TABLESPACE_MANAGEMENT',
      program_action=>'begin
        EXECUTE IMMEDIATE 
'CREATE TABLE IDLE_TIME_TABLE 
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING
AS 
SELECT DISTINCT 
            SID, 
            OSUSER, 
            USERNAME, 
            STATUS,
            TO_CHAR(LOGON_TIME, ''DDth  DAY  HH24:MI:SS'') LOGON_TIME,
            FLOOR(LAST_CALL_ET/3600)||'':''|| FLOOR(MOD(LAST_CALL_ET,3600)/60)||'':''||MOD(MOD(LAST_CALL_ET,3600),60) IDLE, 
            PROGRAM
FROM V$SESSION
WHERE USERNAME IS NOT NULL
AND STATUS = ''INACTIVE''
ORDER BY IDLE DESC',
      program_type=>'PLSQL_BLOCK',
      number_of_arguments=>0,
      comments=>'TABLESPACE MANAGEMENT CREATES A TABLE CALLED TABLESPACE_MANAGEMNT ON DAILY BASIS',
      enabled=>TRUE);
END;

- 2. Создать расписание программы:

BEGIN
   sys.dbms_scheduler.create_schedule( 
      repeat_interval =>   
         'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=22; BYMINUTE=0; BYSECOND=0;',
      start_date => 
         to_timestamp_tz('2011-07-26 US/Eastern', 'YYYY-MM-DD TZR'),
      comments => 
         'Schedule for what ever u want',
      schedule_name => '"user"."TABLESPACE_MANAGEMENT_SCHEDULE"');
END;

- 3. И, наконец, свяжите их вместе, чтобы создать JOB:

BEGIN
   sys.dbms_scheduler.create_job( 
      job_name => '"user"."SPACE"',
      program_name => 'user.TABLESPACE_MANAGEMENT',
      schedule_name => 'user.TABLESPACE_MANAGEMENT_SCHEDULE',
      job_class => 'DEFAULT_JOB_CLASS',
      comments => 'TABLESPCE_MANAGEMENT',
      auto_drop => FALSE,
      enabled => TRUE);
END;

Теперь вы можете использовать что-то вроде utl_mail.send

begin
 UTL_MAIL.SEND_ATTACH_VARCHAR2
(
        sender => 'username@whatever.co.uk'
       ,recipients => 'username@whatever.co.uk,username@whatever.co.uk,username@whatever.co.uk,username@whatever.co.uk'
       ,cc => NULL
       ,bcc =>  NULL
       ,subject => 'send_attach_varchar2'
       ,message => 'here is a test of send_attach_varchar2'
       ,mime_type => 'text/plain; charset=us-ascii'
       ,priority => 3
       ,attachment => '<html>
                                        <head>
                                          <title>Test HTML message</title>
                                        </head>
                                        <body>
                                          <p>This is a <b>HTML</b> <i>version</i> of the test message.</p>
                                          <p><img src="http://whatever/images/site_logo.gif" alt="Site Logo" />
                                        </body>
                                      </html>'
       ,att_inline => TRUE
       ,att_mime_type=>'application/html'
       ,att_filename => 'cartesien.html'
   );
0 голосов
/ 02 декабря 2009

Поместите запрос в хранимую процедуру. Имейте там свой код мониторинга / уведомления.

...