4

我正在寻找一种工具来监视定期运行的 sql 查询的结果,并根据查询返回任何结果这一事实发出通知。(欢迎任何其他过滤器)

我需要查看事务表是否有错误,如果我的 sql 查询可以在后台运行、定期刷新并在有任何结果时显示通知,那就太好了。

我需要连接到 Oracle DB,我目前使用 PL/SQL Developer 或 Oracle SQL Developer。

首选免费、操作系统和轻量级解决方案 :)

更新:

最好我不想创建/修改任何数据库对象。我们也想在我们的客户数据库上使用它,并不是所有的客户都有修改他们的 Oracle 应用程序运行的数据库的许可。

先感谢您

4

3 回答 3

3

使用 DBMS_Scheduler 运行一个查询表的存储过程,然后在出现问题时使用 UTL_Mail 发送电子邮件怎么样?

于 2009-12-02T15:08:35.217 回答
0

我使用它,它工作得非常好。

-- 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'
   );
于 2011-10-11T15:26:23.637 回答
0

将查询放在存储过程中。在那里有你的监控/通知代码。

于 2009-12-02T13:14:19.813 回答