表空间邮件预警(luckyfriends)

表空间邮件预警
文章版权所有Jusin Haoluckyfriends),支持原创,转载请注明。

----某些数据库可以单独创建用户级对应的表空间
create tablespace yw_cux_data  datafile '/u02/lsdb/yw_cux_data01.dbf' size 100m;
create user lsdb_yw identified by ****** default tablespace yw_cux_data temporary  tablespace temp;
grant connect,dba to lsdb_yw;
grant select on DBA_FREE_SPACE to lsdb_yw;
grant select on  DBA_DATA_FILES to lsdb_yw;
grant execute on sys.UTL_TCP to lsdb_yw;
grant execute on sys.UTL_SMTP to lsdb_yw;
grant execute on SYS.UTL_INADDR to lsdb_yw;
grant execute on utl_mail to lsdb_yw
---创建存放邮件的表并插入接收人的邮件地址
conn lsdb_yw/*******
CREATE TABLE TAB_SEND_MAIL
(
  NUM_ID        NUMBER,
  EMAIL_ADDRESS  VARCHAR2(50)
);
insert into TAB_SEND_MAIL values (1,'TEST@163.com');
commit;


SQL> select comp_name from dba_registry;
 
COMP_NAME
--------------------------------------------------------------------------------
Oracle Database Catalog Views
Oracle Database Packages and Types
Oracle Workspace Manager
JServer JAVA Virtual Machine
Oracle XDK
Oracle Database Java Packages
Oracle Expression Filter
Oracle Data Mining
Oracle Text
Oracle XML Database
Oracle Rules Manager
Oracle interMedia
OLAP Analytic Workspace
Oracle OLAP API
OLAP Catalog
Spatial
Oracle Enterprise Manager
 
17 rows selected
SQL> select global_name,utl_inaddr.get_host_address from global_name;
 
GLOBAL_NAME                                                                      GET_HOST_ADDRESS
-------------------------------------------------------------------------------- --
LSDB                                                                             10.12.22.21


----如果没有安装XML database则执行如下脚本:
SQL>  @$ORACLE_HOME/rdbms/admin/utlsmtp.sql
SQL> @$ORACLE_HOME/rdbms/admin/utltcp.sql
SQL> @$ORACLE_HOME/rdbms/admin/catqm.sql xdb sysaux temp YES
 
SQL> select comp_name , status from dba_registry;
 COMP_NAME                                                                        STATUS
-------------------------------------------------------------------------------- --
Oracle XML Database                                                              VALID
Oracle Database Catalog Views                                                    VALID
Oracle Database Packages and Types                                               VALID
---授权查询权限
grant select on DBA_FREE_SPACE to haohao;
grant select on  DBA_DATA_FILES to haohao;


----可能会碰到没有访问ACL的权限,则需执行如下: 
---创建一个ACL
BEGIN
   DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
        acl          =>'cux_application_acl.xml',
        description  => 'ACL for users of my application.',
        principal    => 'HAOHAO',
        is_grant     => TRUE,
        privilege    => 'resolve',
        start_date   => null,
        end_date     => null
  );
commit;
END;
/
---给用户增加访问网络的权限
begin
  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl       => 'cux_application_acl.xml',
                                       principal => 'HAOHAO',
                                       is_grant  => true,
                                       privilege => 'resolve');
commit;
end;
/
 
---给用户增加访问网络的权限connect
begin
    DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl       => 'cux_application_acl.xml',
                                         principal => 'HAOHAO',
                                       is_grant  => true,
                                       privilege => 'connect');
commit;
end;
/
 
---指派ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
    acl         => 'cux_application_acl.xml',
    host        => '10.12.22.23',
    lower_port  => 25,
    upper_port  => NULL);
  COMMIT;
END;
/
 
 
SQL> select any_path from resource_view where any_path like '/sys/acls/%.xml';
 ANY_PATH
--------------------------------------------------------------------------------
/sys/acls/all_all_acl.xml
/sys/acls/all_owner_acl.xml
/sys/acls/bootstrap_acl.xml
/sys/acls/cux_application_acl.xml
/sys/acls/ro_all_acl.xml
 
SQL> SELECT host, lower_port, upper_port, acl FROM dba_network_acls;
 HOST               LOWER_PORT UPPER_PORT ACL
-------------------------------------------------------------------------------- --
10.12.22.23        25         25 /sys/acls/cux_application_acl.xml
 
ACL                                                     PRINCIPAL    PRIVILEGE             IS_GRANT        START_DATE     END_DATE
-------------------------------------------------------------------------------- --
/sys/acls/cux_application_acl.xml  SYSADM      connect               true                          
/sys/acls/cux_application_acl.xml  SYSADM      resolve               true                          
 




----创建发送邮件存储过程
CREATE OR REPLACE PROCEDURE CUX_SEND_MAIL(SUBJECT IN VARCHAR2,
              CONTENTSED IN VARCHAR2
) IS
  EMAIL_SERVER VARCHAR2(30) := '127.0.0.1';
  SENDER_ADDRESS  VARCHAR2(50) := 'root@test.com';--发件地址
  RECEIVER_ADDRESS  VARCHAR2(30);                 --收件人地址变量
  PORT NUMBER := 25;
  CONN UTL_SMTP.CONNECTION;
  MESG VARCHAR2(4000);
  cursor c_mail is select email_address from TAB_SEND_MAIL;   --收件人地址表


BEGIN
-----------------------
for c_mail_v in c_mail
  loop
    RECEIVER_ADDRESS:=c_mail_v.email_address;
    CONN:= UTL_SMTP.OPEN_CONNECTION(EMAIL_SERVER,PORT);
    UTL_SMTP.HELO(CONN,EMAIL_SERVER);
    UTL_SMTP.MAIL(CONN,SENDER_ADDRESS);
    UTL_SMTP.RCPT(CONN,RECEIVER_ADDRESS);
    MESG:= 'CONTENT-TYPE: TEXT/PLAIN; CHARSET=zhs16gbk' || UTL_TCP.CRLF ||
    'DATE:' || TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS') || UTL_TCP.CRLF ||
    'FROM:' || SENDER_ADDRESS || UTL_TCP.CRLF ||
    'SUBJECT:' || SUBJECT || UTL_TCP.CRLF ||
    'TO: '|| RECEIVER_ADDRESS || UTL_TCP.CRLF ||
    'CONTENT-TYPE: TEXT/PLAIN; CHARSET=zhs16gbk' || UTL_TCP.CRLF ||
    '' || UTL_TCP.CRLF || CONTENTSED || UTL_TCP.CRLF ;
    UTL_SMTP.OPEN_DATA(CONN);
    UTL_SMTP.WRITE_RAW_DATA(CONN,UTL_RAW.CAST_TO_RAW(MESG));
    UTL_SMTP.CLOSE_DATA(CONN);
    UTL_SMTP.QUIT(CONN);
  end loop;
END;


----创建表空间使用率预警存储过程
CREATE OR REPLACE PROCEDURE CUX_TBS_ALERT(v_percent in number default 85)
as
  SUBJECT    varchar2(100);
  CONTENT    varchar2(4000);
  CONTENT1  varchar2(4000);
  p_v2   number;
  p_v1   number;
  p_percent number;




BEGIN
    p_percent:=v_percent;


------根据输入判断百分比
  select count(*) into p_v2 from (select tablespace_name,sum(a.bytes) db from DBA_DATA_FILES a group by tablespace_name) d,
  (select tablespace_name ,sum(b.bytes) fb from DBA_FREE_SPACE b group by tablespace_name) f where
  d.tablespace_name=f.tablespace_name and
  ((d.db-f.fb)/d.db)*100>p_percent;
if p_v2>0 then
    SUBJECT:='PROD-DB Tablespace Used Space Alert Info';
  CONTENT1:='表空间超过预警值'||p_percent||'%'||chr(13)||chr(10)||'表空间名   占用百分比';
  for it1 in (
   SELECT UPPER(F.TABLESPACE_NAME) name,
         --D.TOT_GROOTTE_MB sized,
         --D.TOT_GROOTTE_MB - F.TOTAL_BYTES used,
         TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '99.99') pec
       --F.TOTAL_BYTES ,
       --F.MAX_BYTES
     FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
               ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
          FROM SYS.DBA_FREE_SPACE
         GROUP BY TABLESPACE_NAME) F,
       (SELECT DD.TABLESPACE_NAME,
               ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
          FROM SYS.DBA_DATA_FILES DD
         GROUP BY DD.TABLESPACE_NAME) D
    WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
    and (D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100>p_percent
    order by pec desc)


  loop


    CONTENT:=it1.name||it1.pec;
  CONTENT1:=CONTENT1||chr(13)||chr(10)||CONTENT;


  end loop;
    cux_send_mail(SUBJECT,CONTENT1); ---发送邮件过程
end if;
end;


----创建调用预警存储过程的job,第一次执行为第二天8:30,然后每隔两小时执行一次
DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => 'begin CUX_TBS_ALERT(90); end;'
     ,next_date => to_date(to_char(sysdate+1,'yyyy-mm-dd')||' 08:30:00','yyyy-mm-dd hh24:mi:ss')            
     ,interval  => 'SYSDATE+2/24'  
     ,no_parse  => TRUE
    );
commit;
END;
/



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14710393/viewspace-1074849/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14710393/viewspace-1074849/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
定时器java邮件预警是指在Java程序中使用定时器功能实现定时发送邮件的功能。在实现过程中,可以使用JavaMail API发送邮件,并通过定时器设定发送邮件的时间间隔。引用[1]中的代码示例展示了一个使用ScheduledExecutorService实现定时任务的例子。 首先,在定时任务的方法中,可以编写发送邮件的逻辑代码。可以使用JavaMail API创建一个邮件对象,并设置发件人、收件人、主题、正文等信息。然后,通过调用邮件对象的send()方法来发送邮件。具体的邮件内容和发送方式可以根据需求进行定制。 其次,通过定时器的scheduleAtFixedRate()方法来设定定时任务的执行频率。可以设定任务的初始延迟时间和执行周期,以及时间单位。例如,可以设置每隔一分钟执行一次发送邮件的任务。 同时,在邮件预警功能中,还需要考虑获取监控表中的相关信息,根据预警时间和最新数据的创建时间进行比较,决定是否发送预警通知。引用中的代码示例展示了具体实现的逻辑。 总结起来,定时器Java邮件预警功能是通过定时任务和JavaMail API实现的,在指定的时间间隔内发送邮件预警通知。可以根据具体需求编写代码实现发送邮件的逻辑,并结合监控表中的信息来决定是否发送预警通知。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java Springboot之数据库监控与预警](https://blog.csdn.net/qq_40992907/article/details/119143480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值