ORACLE如何用SQL查出硬盘的剩余容量

ORACLE如何用SQL查出硬盘的剩余容量

C#做一个FTP上传工具,但是没法获得FTP服务器剩余容量,知道SQLSERVER可以查出剩余容量,但是小弟用的是ORACLE,ORACLE如何用SQL查出硬盘的剩余容量,

取决于你要查看那个内容
比如归档
select sum(a.BLOCK_SIZE*a.BLOCKS)/1024/1024 from v$archived_log a where a.DELETED='NO'

如果是linux平台
du df不是更方便吗?毕业论文 

ORACLE应该只能查表空间的剩余量而不能查硬盘的吧。 你还是用操作系统的命令看吧。

-- 你可以定时用 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%,将获取其磁盘空间信息!   **   创建者:罗友谋   ** 创建时间:2011.12.14   ****************************************************************************/     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''s 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%,将邮件报警!   **   创建者:罗友谋   ** 创建时间:2011.12.14   ****************************************************************************/   v_disk_info varchar2(4000); BEGIN   SELECT DISK_INFO_FUNC() INTO v_disk_info FROM dual;   IF v_disk_info <> 'All Disk''s 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; /

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有