悉数表空间的计算情况,也许碰到查看EM时,某个表空间的使用超过90%, 进入的数据库发现查看不同的视图又得到不同的结果。


接下来我们详细解释每个视图的空间用途和区别:

1. EM 是从dba_tablespace_usage_metrics获取的数据,自动扩展(autoextensible)的情况下,这个视图中的tablespace_size是dba_data_files的最大的块数
   也就是dba_tablespace_usage_metrics的tablespace_size是datafile能增长到的最大值。
   dba_tablespace_usage_metrics的used_space是已经分配的空间,对应v$filespace_usage的allocated_space字段
   而对于非自动扩展的表空间,使用DBA_TABLESPACE_USAGE_METRICS视图,与传统脚本使用的DBA_DATA_FILE和DBA_FREE_SPACE查询的结果是一致的。

   具体请参考:Difference in Tablespace Size Values From dba_data_files and dba_tablespace_usage_metrics/V$Filespace_usage (Doc ID 455715.1)

2. 关于临时表空间的使用,也许会碰到v$temp_space_header的temp usage怎么大于v$tempseg_usage(或v$sort_usage)的值呢?
   视图v$sort_usage或者v$tempseg_usage(和v$sort_segment)给出了sort segment分配的正确信息,我们应该通过使用这三个表来查询当前临时空间的确切使用情况的。

   但是,v$temp_space_header则是当临时空间使用最高的时候每个临时文件的多少块数,事实上,它展示了每个临时文件初始块的个数并非实际分配的块。
   v$sort_usage/v$tempseg_usage确切的反映了初始块中对每个事务分配了多少实际的sort extent。

   另外,v$temp_space_header的信息是持久化的,即便重启也不会改变;而V$sort_segment and v$sort_usage不是持久的。

    $sqlplus / as sysdba

    ———————–<
    set lines 500
    set long 9999
    set pages 999
    set serveroutput on size 1000000
    set feedback off
    SET MARKUP HTML ON SPOOL ON HEAD “<TITLE>SQL*Plus Report</title><STYLE TYPE=’TEXT/CSS’><!–BODY {background: ffffc6} –></STYLE>”
    spool query_result.html
    set echo off
    select TABLESPACE_NAME,TOTAL_BLOCKS,USED_BLOCKS,FREE_BLOCKS from v$sort_segment;
    SELECT a.username, a.sid, a.serial#, a.osuser,a.schemaname,a.program,a.type,b.tablespace, to_char(trunc((b.blocks * d.value) / 1024 /1024)) || ‘ MB’ siz
    , b.segtype , c.sql_text
    FROM v$session a, v$tempseg_usage b, v$sqlarea c
    , (select value from v$parameter where name = ‘db_block_size’) d
    WHERE a.saddr = b.session_addr
    AND c.address= a.sql_address
    AND c.hash_value = a.sql_hash_value
    ORDER BY b.tablespace, b.blocks;
    spool off
    SET MARKUP HTML OFF
    set echo on
    ———————–>


   具体请参考:Mismatch Between V$TEMP_SPACE_HEADER and V$TEMPSEG_USAGE/V$SORT_USAGE (Doc ID 2095211.1)


正确的查看空间使用情况的脚本是:Script to Monitor Tablespace Usage and Information (Doc ID 1902106.1)

  下载TSINFO.sql脚本,在执行:

   @<Complete path of the .sql file> Tablespace name
   i.e
   @”C:\Users\administrator\Desktop\TSINFO.sql USERS”