磁盘管理之查看磁盘信息

-- 你可以定时用 df -h 的结果打入一个外部日志文件,然后,利用Oracle的“外部表”去访问这个“外部日志文件”就可以了,例如:
-- Step 1:写一脚本,定时将磁盘信息打入日志文件:
[oracle@localhost ~]$ more /data/obase/tbs_info/disk_info.sh
#!/bin/bash
#
source /home/oracle/.bash_profile
cd /data/obase/tbs_info/
echo  "--------  Disk Used Info of Server: 10.4.1.12  --------"  > /data/obase/tbs_info/disk_info.log
echo  "-------- DateTime: `date` -------"  >> /data/obase/tbs_info/disk_info.log
df -h >> /data/obase/tbs_info/disk_info.log
 
-- Step 2:用crontab 定时执行脚本(例如:每个小时的59分的时候执行一次(每小时执行一次):
[oracle@localhost ~]$ crontab -e
59 * * * * /data/obase/tbs_info/disk_info.sh > /data/obase/tbs_info/disk_info.log
 
-- Step 2:创建TBS_INFO目录,并授权lym用户读、写权限。
CREATE  DIRECTORY TBS_INFO  AS  '/data/obase/tbs_info/' ;
GRANT  READ ,WRITE  ON  DIRECTORY TBS_INFO  TO  LYM;
 
-- Step 3:监控各数据库服务器磁盘空间使用情况:
 
 
select  dbms_metadata.get_ddl( 'TABLE' , 'DISK_INFO' FROM  DUAL;
----------------------------------------------------------------------------
 
-- 3.1 外部表的创建语句:
   CREATE  TABLE  "LYM" . "DISK_INFO"
    (    "TEXT"  VARCHAR2(150)
    )
    ORGANIZATION EXTERNAL
     ( TYPE ORACLE_LOADER
       DEFAULT  DIRECTORY  "TBS_INFO"
       ACCESS PARAMETERS
       ( records delimited  by  newline
       nobadfile
       nodiscardfile
       nologfile
     )
       LOCATION
        'disk_info.log'
        )
     )
    REJECT LIMIT UNLIMITED
 
-- 3.2. 创建监控各数据库服务器磁盘空间的函数
CREATE  OR  REPLACE  FUNCTION  disk_info_func
RETURN  VARCHAR2
AS
/******************************************************************************
   **     功能:监控Oracle数据库服务器(10.4.1.12、10.4.1.13、10.4.1.21)
   **           各磁盘空间的使用情况,如果其占用空间超过其总空间的80%,将获取其磁盘空间信息!
 
   ****************************************************************************/
 
   v_cnt12 NUMBER(18,0);
   v_cnt13 NUMBER(18,0);
   v_cnt21 NUMBER(18,0);
 
   v_disk_info VARCHAR2(4000);
   v_disk_info_all VARCHAR2(4000);
 
BEGIN
 
   SELECT  count (*)  AS  cnt
     INTO  v_cnt12
     FROM  disk_info@tdw12_lym
    WHERE  ( ( text  LIKE  '%8_\%%'  escape  '\' OR text LIKE ' %9_\%% ' escape ' \ ' OR text LIKE ' %100\%% ' escape ' \ ' )
            AND text LIKE ' %/dev/sdb% ' )
       OR ( ( text like ' %9_\%% ' escape ' \ ' OR text LIKE ' %100\%% ' escape ' \ ' )
            AND text NOT LIKE ' %/dev/sdb% ' );
 
   SELECT count(*) AS cnt
     INTO v_cnt13
     FROM disk_info@tdw13_lym
    WHERE ( ( text LIKE ' %8_\%% ' escape ' \ ' OR text LIKE ' %9_\%% ' escape ' \ ' OR text LIKE ' %100\%% ' escape ' \ ' )
            AND text LIKE ' %/dev/sdb% ' )
       OR ( ( text like ' %9_\%% ' escape ' \ ' OR text LIKE ' %100\%% ' escape ' \ ' )
            AND text NOT LIKE ' %/dev/sdb% ' );
 
   SELECT count(*) AS cnt
     INTO v_cnt21
     FROM disk_info
    WHERE ( ( text LIKE ' %8_\%% ' escape ' \ ' OR text LIKE ' %9_\%% ' escape ' \ ' OR text LIKE ' %100\%% ' escape ' \ ' )
            AND text LIKE ' %/dev/sdb% ' )
       OR ( ( text like ' %9_\%% ' escape ' \ ' OR text LIKE ' %100\%% ' escape ' \ ' )
            AND text NOT LIKE ' %/dev/sdb% ' );
 
   v_disk_info     := ' ';
   v_disk_info_all := ' ';
 
   IF v_cnt12 > 0 THEN
     FOR i12 IN ( SELECT text as disk_info FROM disk_info@tdw12_lym ORDER BY rowid ) LOOP
       v_disk_info := i12.disk_info;
       v_disk_info_all := v_disk_info_all||v_disk_info||chr(10);
     END LOOP;
   END IF;
 
   IF v_cnt13 > 0 THEN
     FOR i13 IN ( SELECT text as disk_info FROM disk_info@tdw13_lym ORDER BY rowid ) LOOP
       v_disk_info := i13.disk_info;
       v_disk_info_all := v_disk_info_all||v_disk_info||chr(10);
     END LOOP;
   END IF;
 
   IF v_cnt21 > 0 THEN
     FOR i21 IN ( SELECT text as disk_info FROM disk_info ORDER BY rowid ) LOOP
       v_disk_info := i21.disk_info;
       v_disk_info_all := v_disk_info_all||v_disk_info||chr(10);
     END LOOP;
   END IF;
 
   IF v_disk_info_all IS NULL THEN
     v_disk_info_all := ' All  Disk '' space  are OK! ';
   END IF;
   RETURN v_disk_info_all;
END;
/
 
----------------------------------------------------------------------------
-- *3.3. 创建存储过程调用函数,得到磁盘空间使用信息
 
CREATE OR REPLACE PROCEDURE get_disk_info_proc
AS
/******************************************************************************
   **     功能:监控Oracle数据库服务器(10.4.1.12、10.4.1.13、10.4.1.21)
   **           各磁盘空间的使用情况,如果其占用空间超过其总空间的80%,将邮件报警!
  
   ****************************************************************************/
   v_disk_info varchar2(4000);
BEGIN
   SELECT DISK_INFO_FUNC() INTO v_disk_info FROM dual;
   IF v_disk_info <> ' All  Disk '' space  are OK! ' THEN
     PROCSENDEMAIL(v_disk_info,' Disk  Space  Emergency!!! ',' ymluo@corp.tudou.com ',' 13691147539@139.com ',' 10.5.101.1 ',' 25 ',' 0 ',NULL,NULL,NULL,' bit  7 ');
   END IF;
   -- dbms_output.put_line(v_disk_info);
END;
/
 
----------------------------------------------------------------------------
-- *3.4. 创建 Job 定时监控
-- job 1.1  -- 每15分钟执行一次
 
variable  job_disk_info_proc number;
begin 
   dbms_job.submit(:job_disk_info_proc,' get_disk_info_proc; ',sysdate,' SYSDATE+1/96');
end ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值