您的位置:首页 > 数据库 > Oracle

用SQLPLUS调试oracle获取数据库表空间总大小、剩余大小的存储过程

2015-06-06 19:30 633 查看
必须以SYSDBA的身份登录,否则创建时会报错

sqlplus system/wangkong@orcl as SYSDBA

存储过程的代码如下:

-- 对普通用户进行授权

GRANT SELECT ON SYS.DBA_DATA_FILES TO PUBLIC;
GRANT SELECT ON SYS.DBA_FREE_SPACE TO PUBLIC;

CREATE OR REPLACE PROCEDURE GET_GNCDB5_SIZE(db_name IN VARCHAR2, db_size OUT NUMBER, db_free OUT NUMBER)

AS    

  BEGIN

    BEGIN

      SELECT ROUND(SUM(BYTES)/(1024 * 1024), 0) total INTO db_size FROM SYS.DBA_DATA_FILES WHERE TABLESPACE_NAME=db_name GROUP BY TABLESPACE_NAME;

      SELECT ROUND(SUM(BYTES)/(1024 * 1024), 0) free INTO db_free FROM SYS.DBA_FREE_SPACE WHERE TABLESPACE_NAME=db_name GROUP BY TABLESPACE_NAME;

    EXCEPTION    

      WHEN OTHERS THEN

        db_size := 0;

        db_free := 0;

    END;

    -- dbms_output.put_line('db_size='||db_size||', db_free='||db_free);  

  END;  

/

-- 对存储过程进行授权

GRANT EXECUTE ON GET_GNCDB5_SIZE TO PUBLIC;

-- 为其他用户创建同名,注意这个存储过程的所有者是SYS,而不是SYSTEM

CREATE OR REPLACE PUBLIC SYNONYM GET_GNCDB5_SIZE FOR GET_GNCDB5_SIZE;

GRANT ALL ON GET_GNCDB5_SIZE to PUBLIC;

退出sqlplus,以普通用户的身份重新登录SQLPLUS,进行测试:

SQL> VAR DB_SIZE NUMBER;

SQL> VAR DB_FREE NUMBER;

SQL> exec get_gncdb5_size('GNCDB5', :DB_SIZE, :DB_FREE);

PL/SQL 过程已成功完成。

SQL> PRINT :DB_SIZE

   DB_SIZE

----------

       100

SQL> PRINT :DB_FREE

   DB_FREE

----------

        93

SQL>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息