`

Tom的show_space__记录一下

 
阅读更多
set define off

create or replace procedure show_space
( p_segname in varchar2,
  p_owner   in varchar2 default user,
  p_type    in varchar2 default 'TABLE',
  p_partition in varchar2 default NULL )
-- this procedure uses authid current user so it can query DBA_*
-- views using privileges from a ROLE and so it can be installed
-- once per database, instead of once per user that wanted to use it
authid current_user
as
    l_free_blks                 number;
    l_total_blocks              number;
    l_total_bytes               number;
    l_unused_blocks             number;
    l_unused_bytes              number;
    l_LastUsedExtFileId         number;
    l_LastUsedExtBlockId        number;
    l_LAST_USED_BLOCK           number;
    l_segment_space_mgmt        varchar2(255);
    l_unformatted_blocks number;
    l_unformatted_bytes number;
    l_fs1_blocks number; l_fs1_bytes number;
    l_fs2_blocks number; l_fs2_bytes number;
    l_fs3_blocks number; l_fs3_bytes number;
    l_fs4_blocks number; l_fs4_bytes number;
    l_full_blocks number; l_full_bytes number;

-- inline procedure to print out numbers nicely formatted
-- with a simple label
    procedure p( p_label in varchar2, p_num in number )
    is
    begin
        dbms_output.put_line( rpad(p_label,40,'.') ||
                              to_char(p_num,'999,999,999,999') );
    end;
begin
   -- this query is executed dynamically in order to allow this procedure
   -- to be created by a user who has access to DBA_SEGMENTS/TABLESPACES
   -- via a role as is customary.
   -- NOTE: at runtime, the invoker MUST have access to these two
   -- views!
   -- this query determines if the object is a ASSM object or not
   begin
      execute immediate
          'select ts.segment_space_management
             from dba_segments seg, dba_tablespaces ts
            where seg.segment_name      = :p_segname
              and (:p_partition is null or
                  seg.partition_name = :p_partition)
              and seg.owner = :p_owner
  and seg.segment_type = :p_type
              and seg.tablespace_name = ts.tablespace_name'
             into l_segment_space_mgmt
            using p_segname, p_partition, p_partition, p_owner, p_type;
   exception
       when too_many_rows then
          dbms_output.put_line
          ( 'This must be a partitioned table, use p_partition => ');
          return;
   end;


   -- if the object is in an ASSM tablespace, we must use this API
   -- call to get space information, else we use the FREE_BLOCKS
   -- API for the user managed segments
   if l_segment_space_mgmt = 'AUTO'
   then
     dbms_space.space_usage
     ( p_owner, p_segname, p_type, l_unformatted_blocks,
       l_unformatted_bytes, l_fs1_blocks, l_fs1_bytes,
       l_fs2_blocks, l_fs2_bytes, l_fs3_blocks, l_fs3_bytes,
       l_fs4_blocks, l_fs4_bytes, l_full_blocks, l_full_bytes, p_partition);
    
     p( 'Unformatted Blocks ', l_unformatted_blocks );
     p( 'FS1 Blocks (0-25)  ', l_fs1_blocks );
     p( 'FS2 Blocks (25-50) ', l_fs2_blocks );
     p( 'FS3 Blocks (50-75) ', l_fs3_blocks );
     p( 'FS4 Blocks (75-100)', l_fs4_blocks );
     p( 'Full Blocks        ', l_full_blocks );
  else
     dbms_space.free_blocks(
       segment_owner     => p_owner,
       segment_name      => p_segname,
       segment_type      => p_type,
       freelist_group_id => 0,
       free_blks         => l_free_blks);
    
     p( 'Free Blocks', l_free_blks );
  end if;

  -- and then the unused space API call to get the rest of the
  -- information
  dbms_space.unused_space
  ( segment_owner     => p_owner,
    segment_name      => p_segname,
    segment_type      => p_type,
    partition_name    => p_partition,
    total_blocks      => l_total_blocks,
    total_bytes       => l_total_bytes,
    unused_blocks     => l_unused_blocks,
    unused_bytes      => l_unused_bytes,
    LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,
    LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,
    LAST_USED_BLOCK => l_LAST_USED_BLOCK );

    p( 'Total Blocks', l_total_blocks );
    p( 'Total Bytes', l_total_bytes );
    p( 'Total MBytes', trunc(l_total_bytes/1024/1024) );
    p( 'Unused Blocks', l_unused_blocks );
    p( 'Unused Bytes', l_unused_bytes );
    p( 'Last Used Ext FileId', l_LastUsedExtFileId );
    p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );
    p( 'Last Used Block', l_LAST_USED_BLOCK );
end;
/
set define on

该过程说明一下:
我们知道,用户拥有的role权限在存储过程是不可用的。遇到这种情况,我们一般需要显式授权,如grant create table to usera;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程,实际上,oracle给我们提供了在存储过程中使用role权限的方法:修改存储过程,加入Authid Current_User时存储过程可以使用role权限。
http://www.cnblogs.com/advocate/archive/2011/02/17/1957389.html

另外:如果对象在用户空间管理的表空间中,不是ASSM,free blocks这里是段的第一个freelist组中的块数,如果有多个freelist,需要修改

一个修正的脚本:
http://blog.csdn.net/tianlesoftware/article/details/8151129
分享到:
评论

相关推荐

    tommath.zip_tommath_tommath.h_tommath.pdf_国密

    用于大数计算,用于国密加密、RSA加密等

    tom2 app settings

    标题“tom2 app settings”和描述“tom2 cat unlock setting”提及的是一个关于Tom2应用程序的设置和解锁配置。在iOS设备,特别是iPad HD(高清版)上,这个可能指的是一个定制的应用程序或游戏,其内部包含了特定的...

    点微同城 30.0 完整版(含全部插件)

    [点微]同城教育培训 1.1 (tom_tcedu)[点微]同城预约 2.0 (tom_tcyuyue)[点微]同城疫情地图 2.3 (tom_tcyiqiNG)[点微]同城招聘PC版 2.1 (tom_zppc)[点微]同城房产 6.0 (tom_tcfangchan)[点微]同城婚恋 2.2 (tom_...

    Tom_深入分析Spring源码

    Tom老师的讲解无疑为我们揭示了Spring背后的神秘面纱,帮助我们更好地理解和运用这个强大的工具。 首先,我们要明白Spring的核心是依赖注入(Dependency Injection,DI),这是一种设计模式,它允许我们控制对象...

    Tom-SkypeSetup.rar_TOM-Skpe_Vc_skpe_skype_tom skpe

    "skpe"可能是"Skype"的拼写错误,而"tom_skpe"可能是Tom-Skype的特定标识符。 描述中提到“skpe,全球最好的网络电话和聊天软件”,这是对Skype功能的高度评价。Skype是一款知名的VoIP(Voice over IP)服务,允许...

    Talking_Tom_2-v1.1-USCat

    iphone 游戏Talking_Tom_2-v1.1-USCat

    TOM微信拼团商城6.1

    同城分类信息 http://addon.discuz.com/?@tom_tongcheng.plugin 同城好店 http://addon.discuz.com/?@tom_tcshop.plugin 本插件主要功能是为“同城”提供商家发布拼团商品的功能 功能演示:关注公众账号:tomwx_...

    TOM_HTML_CSS开发规范

    《TOM_HTML_CSS开发规范》是一份详细的指南,旨在指导开发者如何按照标准和最佳实践来编写HTML和CSS,以提高代码的可读性和维护性。这份规范由TomOnline公司在2007年发布,虽然时间稍早,但其基本原理和原则依然适用...

    咕泡学院_Tom_JavaVIP课程_深入分析Spring源码(第一阶段)1

    2. **面向切面编程(AOP)**:Spring 提供了面向切面的编程能力,允许开发者定义切面,实现如日志记录、性能监控、事务管理等横切关注点,使代码更加整洁。 3. **事务管理**:Spring 提供了声明式事务管理,使得...

    Python库 | tom_gemini_community-0.1.0-py3-none-any.whl

    标题中的“Python库 | tom_gemini_community-0.1.0-py3-none-any.whl”指的是一个Python软件包,名为“tom_gemini_community”,版本为0.1.0。这个包是用Python 3(由py3标识)编写的,并且适用于任何平台(由none-...

    咕泡学院_Tom_JavaVIP课程_Spring面试宝典1

    【Spring框架概述】 Spring框架是Java应用程序开发的一个关键平台,它提供了一整套全面的基础性支持,涵盖了从对象管理到Web应用的多个方面。Spring框架的设计理念是减轻开发者的负担,让他们可以专注于业务逻辑,...

    点微同城 30.0 完整版(含全部插件).zip

    [点微]同城教育培训 1.1 (tom_tcedu) [点微]同城预约 2.0 (tom_tcyuyue) [点微]同城疫情地图 2.3 (tom_tcyiqiNG) [点微]同城招聘PC版 2.1 (tom_zppc) [点微]同城房产 6.0 (tom_tcfangchan) [点微]同城婚恋 2.2 (tom_...

    Oracle大师Tom_Kyte的好书,鼎力推荐

    Oracle大师Tom_Kyte的好书,鼎力推荐

    tom_cow.rar_The First_augmenting path_tom035.cow_tom303.cow_tom

    we use breadth-first algorithm to find a augmenting path The max flow is all the power flow out the source node or sink into the destination node.

    Tom_Swans_GNU_C++_for_Linux.rar

    《Tom Swans GNU C++ for Linux》是一本深入讲解如何在Linux环境下使用GNU C++进行编程的资源集合。这份压缩包文件包含了一系列关于C++编程和GNU工具链的知识点,适用于那些希望在开源操作系统上提升C++编程技能的...

    PyPI 官网下载 | tom_gemini_community-0.1.0-py3-none-any.whl

    资源来自pypi官网。 资源全名:tom_gemini_community-0.1.0-py3-none-any.whl

    Tom_Kao_2008_APRI_UMLChina_OK

    《以Android实现Use Case分析与手机界面布局规划》 在Android应用开发中,Use Case分析是一种重要的需求收集和系统设计工具。它可以帮助开发者理解用户的需求,进而构建出满足用户期望的交互流程。...

Global site tag (gtag.js) - Google Analytics