• 2.dba_tablespace_usage_metrics 查看表空间使用率


     
    DBA_TABLESPACE_USAGE_METRICS  
     
     

    Column

    Datatype

    NULL

    Description

    TABLESPACE_NAME

    VARCHAR2(30)

     

    Tablespace name

    USED_SPACE

    NUMBER

     

    Total space consumed by the tablespace,in database blocks

    TABLESPACE_SIZE

    NUMBER

     

    Total size of the tablespace,in database blocks

    USED_PERCENT

    NUMBER

     

    Percentage of used space,as a function of the maximum possible tablespace size

     

    从官网的说明来看,通过视图DBA_TABLESPACE_USAGE_METRICS可以很方便的查看各类型表空间的使用情况,包括永久、临时和undo表空间。但是,通过这个视图查询到的结果,和传统的SQL脚步查询到的结果不一致,而且相差很大。

     

     

    select text from dba_views where view_name='DBA_TABLESPACE_USAGE_METRICS';
    TEXT
    -----------------------------------------------------------------
    SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
         (sum(f.allocated_space)/sum(f.file_maxsize))*100
         FROM sys.ts$ t, v$filespace_usage f
         WHERE
         t.online$ != 3 and
         t.bitmapped <> 0 and
         t.contents$ = 0 and
         bitand(t.flags, 16) <> 16 and
         t.ts# = f.tablespace_id
         GROUP BY t.name, f.tablespace_id
    union
     SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
         (sum(f.allocated_space)/sum(f.file_maxsize))*100
         FROM sys.ts$ t, v$filespace_usage f
         WHERE
         t.online$ != 3 and
         t.bitmapped <> 0 and
         t.contents$ <> 0 and
         f.flag = 6 and
         t.ts# = f.tablespace_id
         GROUP BY t.name, f.tablespace_id
    union
     SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
         (sum(f.allocated_space)/sum(f.file_maxsize))*100
         FROM sys.ts$ t, gv$filespace_usage f, gv$parameter param
         WHERE
         t.online$ != 3 and
         t.bitmapped <> 0 and
         f.inst_id = param.inst_id and
         param.name = 'undo_tablespace' and
         t.name = param.value and
         f.flag = 6 and                                       <------在12C之前,UNDO表空间在GV $ FILESPACE_USAGE中将其数据文件标记为值6,
         t.ts# = f.tablespace_id
         GROUP BY t.name, f.tablespace_id
    
     
     

    可以看出,DBA_TABLESPACE_USAGE_METRICS查询到的关键数据出自v$filespace_usage视图。


    v$filespace_usage视图,11g官方文档的说明如下:
     
     

    Column

    Datatype

    Description

    TABLESPACE_ID

    NUMBER

    ID of the tablespace to which the file belongs

    RFNO

    NUMBER

    Relative file number of the file

    ALLOCATED_SPACE

    NUMBER

    Total allocated space in the file

    FILE_SIZE

    NUMBER

    Current file size

    FILE_MAXSIZE

    NUMBER

    Maximum file size

    CHANGESCN_BASE

    NUMBER

    SCN base of the last change to the file

    CHANGESCN_WRAP

    NUMBER

    SCN wrap of the last change to the file

    FLAG

    NUMBER

    Flags for file attributes

     

     

      

    根据以上分析,可以得出以下结论:

    1DBA_TABLESPACE_USAGE_METRICSUSED_SPACE是已经分配的空间,对应 V$FILESPACE_USAGE ALLOCATED_SPACE字段。

    2DBA_TABLESPACE_USAGE_METRICS的 TABLESPACE_SIZE对应V$FILESPACE_USAGE的 FILE_MAXSIZE字段(而不是FILE_SIZE)。

      注意:这里对应的是最大值。如果数据文件是自动增长的,那么,对于8kblock,这里的最大值就是32G

          也就是通过DBA_TABLESPACE_USAGE_METRICS视图查询显示的4194302blocks

    3 对于非自动扩展的表空间,使用DBA_TABLESPACE_USAGE_METRICS视图,与传统脚本使用的DBA_DATA_FILEDBA_FREE_SPACE查询的结果是一致的

    4对于自动扩展的表空间,DBA_TABLESPACE_USAGE_METRICS视图查询的结果就不准确了,还要使用传统的方法查询。

     

    5. 统计UNDO表空间时 ,在12c之前UNDO表空间在GV$FILESPACE_USAGE中将其数据文件标记为值6,并且它是以此方式唯一标识的表空间

        但是在12.1时,添加undo文件时如果在创建过程中,指定存储路径该数据文件仍标记为6,但不指定路径时,根据MOS错误28821847,这些文件标记为14。

        因此,即使DBA_TABLESPACE_USAGE_METRICS报告UNDO表空间,它也仅报告第一个数据文件的信息:

    6. 在12.2中 所有新创建的undo 数据文件都标记为6,但是12.2中DBA_TABLESPACE_USAGE_METRICS,不在记录undo信息

    7. 因此,最好查询DBA_DATA_FILES和DBA_FREE_SPACE来监视UNDO使用,因为DBA_TABLESPACE_USAGE_METRICS无法在12.1.0.x中提供可靠的数据,并且在12.2.0.x中绝对不提供数据。       Oracle可能会更改视图定义以反映UNDO表空间文件的实际标志设置,但是就目前而言,最好查询已知包含相关且准确的数据的视图(DBA_DATA_FILES,DBA_FREE_SPACE)。

     

    8.在19c中测试 所有新创建的undo 数据文件都标记为10,更改为当前undo表空间时,flag 变改为14

     

    https://www.databasejournal.com/features/oracle/trouble-with-oracles-dbatablespaceusagemetrics-for-the-undo-tablespace.html

    #19C 中的   DBA_TABLESPACE_USAGE_METRICS
    CREATE FORCE VIEW "SYS"."DBA_TABLESPACE_USAGE_METRICS" ("TABLESPACE_NAME", "USED_SPACE", "TABLESPACE_SIZE", "USED_PERCENT") AS
      SELECT  t.name,
            tstat.kttetsused,
            tstat.kttetsmsize,
            (tstat.kttetsused / tstat.kttetsmsize) * 100
      FROM  sys.ts$ t, x$kttets tstat
      WHERE
            t.online$ != 3 and
            t.bitmapped <> 0 and
            t.contents$ = 0 and
            bitand(t.flags, 16) <> 16 and
            t.ts# = tstat.kttetstsn
    union
     SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
         (sum(f.allocated_space)/sum(f.file_maxsize))*100
         FROM sys.ts$ t, v$filespace_usage f
         WHERE
         t.online$ != 3 and
         t.bitmapped <> 0 and
         t.contents$ <> 0 and
         f.flag = 6 and
         t.ts# = f.tablespace_id
         GROUP BY t.name, f.tablespace_id, t.ts#
    union
     SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
         (sum(f.allocated_space)/sum(f.file_maxsize))*100
         FROM sys.ts$ t, gv$filespace_usage f, gv$parameter param
         WHERE
         t.online$ != 3 and
         t.bitmapped <> 0 and
         f.inst_id = param.inst_id and
         param.name = 'undo_tablespace' and
         t.name = param.value and
         f.flag = 6 and                              <---19c的undo 表空间数据文件的flag为14 , 
         t.ts# = f.tablespace_id
         GROUP BY t.name, f.tablespace_id, t.ts#
    
         <---19c的undo 表空间数据文件的flag为14 , 新创建的undo 数据文件 flag 为10, 
             当吏用以下命令改改当前undo表空间时,alter system set undo_tablespace='UNDOTEST'; 注意大写。
             UNDO表空间数据文件的flag改为14
          
    
     
     
     
     
    # 自定义DBA_TABLESPACE_USAGE_METRICS_2 过程:
    CREATE FORCE VIEW "SYS"."DBA_TABLESPACE_USAGE_METRICS_2" ("TABLESPACE_NAME", "USED_SPACE", "TABLESPACE_SIZE", "USED_PERCENT") AS
      SELECT  t.name,
            tstat.kttetsused,
            tstat.kttetsmsize,
            (tstat.kttetsused / tstat.kttetsmsize) * 100
      FROM  sys.ts$ t, x$kttets tstat
      WHERE
            t.online$ != 3 and
            t.bitmapped <> 0 and
            t.contents$ = 0 and
            bitand(t.flags, 16) <> 16 and
            t.ts# = tstat.kttetstsn
    union
     SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
         (sum(f.allocated_space)/sum(f.file_maxsize))*100
         FROM sys.ts$ t, v$filespace_usage f
         WHERE
         t.online$ != 3 and
         t.bitmapped <> 0 and
         t.contents$ <> 0 and
         f.flag = 6 and
         t.ts# = f.tablespace_id
         GROUP BY t.name, f.tablespace_id, t.ts#
    union
     SELECT t.name, sum(f.allocated_space), sum(f.file_maxsize),
         (sum(f.allocated_space)/sum(f.file_maxsize))*100
         FROM sys.ts$ t, gv$filespace_usage f, gv$parameter param
         WHERE
         t.online$ != 3 and
         t.bitmapped <> 0 and
         f.inst_id = param.inst_id and
         param.name = 'undo_tablespace' and
         t.name = param.value and
         f.flag = 14 and                             
         t.ts# = f.tablespace_id
         GROUP BY t.name, f.tablespace_id, t.ts#
         
     #PDB中 每个PDB都要单独创建
     





  • 相关阅读:
    Asible——inventory与大项目管理
    Asible——template
    Ansible——文件管理
    Ansible——处理任务失败
    Ansible——handlers与notify
    ubuntu 16.04 LTS 开发环境的安装及常用软件
    curl 命令详解
    VMware虚拟机三种网络模式详解
    ubantu 16.04 安装有道词典
    OneNote 使用汇总
  • 原文地址:https://www.cnblogs.com/cqdba/p/0f9426c6ae602c84c50710c7d58d760c.html
Copyright © 2020-2023  润新知