传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILEDBA_FREE_SPACE

Oracle
11g引入了DBA_TABLESPACE_USAGE_METRICS视图。其实,Oracle
10g中就已经引入了该视图。能够使用。但在10g官方文档中查不到,11g官方文档对该视图作了说明。

Oracle 11g 官方文档中对DBA_TABLESPACE_USAGE_METRICS视图的说明:

DBA_TABLESPACE_USAGE_METRICS describes tablespace usage metrics for all types of tablespaces,including permanent,temporary,and undo tablespaces.

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脚步查询到的结果不一致。并且相差非常大。

看一下DBA_TABLESPACE_USAGE_METRICS视图的定义语句:

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

t.ts# = f.tablespace_id

GROUP BY t.name, f.tablespace_id

-----------------------------------------------------------------

能够看出,DBA_TABLESPACE_USAGE_METRICS查询到的重要数据出自v$filespace_usage视图。

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

V$FILESPACE_USAGE summarizes space allocation information of each datafile and tempfile.

Column

Datatype

Description

TABLESPACE_ID

nubmer

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

依据以上分析,能够得出下面结论:

1、DBA_TABLESPACE_USED_SPACE是已经分配的空间,相应V$FILESPACE_USAGE的ALLOCATED_SPACE字段。

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

个blocks。

SQL> select * from dba_tablespace_usage_metrics;

TABLESPACE_NAME     USED_SPACE     TABLESPACE_SIZE      USED_PERCENT

------------------------------ ---------- --------------- -------

SYSAUX                       16576         4194302          .395202825

SYSTEM                       33912         4194302          .808525471

TEMP                              0         4194302                     0

UNDOTBS1                       288         4194302          .006866458

USERS                            24         4194302          .000572205

而以下是用SQL脚本查询到的表空间使用率情况,出入非常大:

TABLESPACE_NAME SUM_SPACE SUM_BLOCKS USED_SPACE USED_RATE FREE_SPACE

---------- ---------- ---------- ---------- ---------- ----------

SYSAUX       140M            17920   129.56M     92.54%     10.44M

SYSTEM       300M            38400   265M         88.33%     35M

TEMP         20M              2560    16M          80%        4M

UNDOTBS1     200M            25600   19.31M      9.66%      180.69M

USERS        5M                640    .19M         3.8%       4.81M

以下測试对于自己主动扩展和非自己主动扩展的表空间。两种方法的查询结果:

1、创建表空间

TS1:自己主动扩展。

TS2:非自己主动扩展。

SQL> create tablespace TS1 datafile 'E:\oracle\product\10.2.0\oradata\ORCL\DATAFILE\ts01.dbf' size 100M autoextend on next 10M maxsize 1G;

表空间已创建。

SQL> create tablespace TS2 datafile 'E:\oracle\product\10.2.0\oradata\ORCL\DATAFILE\ts02.dbf' size 100M autoextend off;

表空间已创建。

2、分别使用两种方法查看表空间情况

(1)、使用DBA_TABLESPACE_USAGE_METRICS视图

SQL> select * from dba_tablespace_usage_metrics where tablespace_name in ('TS1','TS2');

TABLESPACE_NAME     USED_SPACE     TABLESPACE_SIZE      USED_PERCENT

------------------------------ ---------- --------------- -------

TS1                               0               131072            0

TS2                               0                12800            0

(2)、使用SQL脚本查看

TABLESPACE_NAME SUM_SPACE SUM_BLOCKS USED_SPACE USED_RATE FREE_SPACE

--------------- ---------- ---------- ---------- ----------

TS1             100M            12800 .06M       .06%       99.94M

TS2             100M            12800 .06M       .06%       99.94M

3、分别在两个表空间创建一样的表,插入数据

SQL> create table tt1 tablespace ts1 as select * from dba_objects;

表已创建。

SQL> insert into tt1 select * from dba_objects;

已创建11334行。

SQL> insert into tt1 select * from dba_objects;

已创建11334行。

SQL> insert into tt1 select * from dba_objects;

已创建11334行。

SQL> insert into tt1 select * from dba_objects;

已创建11334行。

SQL> insert into tt1 select * from dba_objects;

已创建11334行。

SQL> commit;

提交完毕。

SQL> create table tt2 tablespace ts2 as select * from dba_objects;

表已创建。

SQL> insert into tt2 select * from dba_objects;

已创建11335行。

SQL> insert into tt2 select * from dba_objects;

已创建11335行。

SQL> insert into tt2 select * from dba_objects;

已创建11335行。

SQL> insert into tt2 select * from dba_objects;

已创建11335行。

SQL> insert into tt2 select * from dba_objects;

已创建11335行。

SQL> commit;

提交完毕。

4、再用两种方法查看表空间使用情况

SQL> select * from dba_tablespace_usage_metrics where tablespace_name in ('TS1','TS2');

TABLESPACE_NAME USED_SPACE TABLESPACE_SIZE USED_PERCENT

--------------- ---------- --------------- ------------

TS1                    896          131072    .68359375

TS2                    896           12800            7

通过对照,表空间TS1和TS2实际使用的空间是一致的,都是896个block。但对于能够扩展的表空间TS1,这里表空间的最大值为131072个block,即指定的能够扩展到的1G。由此,计算出的使用率也就出现了偏差。

因此,对于自己主动扩展的表空间。DBA_TABLESPACE_USAGE_METRICS视图就不那么适用了。

使用脚本:

TABLESPACE_NAME SUM_SPACE SUM_BLOCKS USED_SPACE USED_RATE FREE_SPACE

--------------- ---------- ---------- ---------- ----------

TS1             100M            12800 7.06M      7.06%      92.94M

TS2             100M            12800 7.06M      7.06%      92.94M

能够看出。通过脚本查询出的结果。两个表空间的使用率是一致的。

总结:

对于非自己主动扩展的表空间,使用DBA_TABLESPACE_USAGE_METRICS视图,与传统脚本使用的DBA_DATA_FILE和DBA_FREE_SPACE查询的结果是一致的。

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

转自:http://blog.itpub.net/25744374/viewspace-774253

[转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别的更多相关文章

  1. db2 查看表空间使用率

    1. 统计所有节点表空间使用率 select substr(TABLESPACE_NAME,1,20) as TBSPC_NAME,bigint(TOTAL_PAGES * PAGE_SIZE)/10 ...

  2. 查看表空间使用率及shrink 表空间

    首先,可以通过下面的sql statement来查看表空间的使用情况.注意,该语句是在10g下测试过. SELECT FREE.TABLESPACE_NAME, FREE.FREE_SPACE/TOT ...

  3. ORACLE查看表空间对象

    ORACLE如何查看表空间存储了那些数据库对象呢?可以使用下面脚本简单的查询表空间存储了那些对象: SELECT TABLESPACE_NAME       AS TABLESPACE_NAME    ...

  4. Oracle数据库查看表空间sql语句

    转: Oracle数据库查看表空间sql语句 2018-09-03 15:49:51 兰海泽 阅读数 6212   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  5. oracle查看表空间的大小及使用情况sql语句

    --------------------------tablespace------------------------------------------------ 1.//查看表空间的名称及大小 ...

  6. Oracle 查看表空间的大小及使用情况sql语句

    --1.查看表空间的名称及大小 )), ) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.t ...

  7. oracle表空间使用率统计查询

    今天发现有一张采样表从1月5号开始不记录数据了,所以想查看一下表空间使用率,在网上零零散散找了很多资料,现在记录如下,也不知道哪一个最准确.还有一个就是网上拷贝的sql代码格式太乱了,不好看,找到一个 ...

  8. Oracle dba_tablespace_usage_metrics 视图 查看表空间 说明

    一.DBA_TABLESPACE_USAGE_METRICS 视图的理论说明   群里一朋友说使用dba_tablespace_usage_metrics 视图查看表空间的结果不正确,如下:     ...

  9. SYSAUX表空间使用率高问题处理

    SYSAUX表空间做为SYSTEM表空间的辅助表空间,主要存放EM相关的内容以及表统计信息,AWR快照,审计信息等,而假设SYSAUX表空间在默认条件下你假设不做不论什么配置,随着时间的推移.会膨胀的 ...

随机推荐

  1. jquery鼠标滑过展示图片时显示详情

    jquery: <script src="js/jquery.js" type="text/javascript"></script> ...

  2. CreateFileMapping共享内存时添加Global的作用

    来源:http://www.cnblogs.com/elvislogs/articles/ShareMemory.html 通常使用CreateFileMapping建立共享内存时名称中没有加入&qu ...

  3. MAC环境下生成Apple证书教程

    在MAC操作系统下,生成Apple证书比较简单,全图形化操作. 一.使用Keychain Access(钥匙串访问) MAC操作系统对证书的处理都采用了“Keychain Access”(中文系统名为 ...

  4. 异构数据源海量数据交换工具-Taobao DataX 下载和使用

    DataX介绍 DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换. 目前成熟的数据导入 ...

  5. Cortex-M3学习日志(三)-- 外部中断0

    无论是哪款单片机应该都有对应的中断的功能,中断在嵌入式系统的地位毋庸置疑.LPC1768微处理器包括4个外部中断,分别是EINT0.EINT1.EINT2.EINT3对应的引脚分别是P2.10~P2. ...

  6. [Leetcode][Python]24: Swap Nodes in Pairs

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 24: Swap Nodes in Pairshttps://oj.leetc ...

  7. poj2039---写出c++reverse函数,且且依次输出每一行的第一个、第二个.....

    #include <stdio.h> #include <stdlib.h> #include <string.h> void reverse(char *p1,c ...

  8. JDK1.7 安装加(一劳永逸的环境配置)

    1.去oracl官网下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html. ...

  9. English - because of,due to ,thanks to ,owing to ,as a result of ,on account of解析

    because of,due to ,thanks to ,owing to ,as a result of ,on account of 等都可以用来表示原因,但其用法却各有不同.下面就其用法分述如 ...

  10. Matlab中K-means聚类算法的使用(K-均值聚类)

    K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Kmeans(X,K) [Idx, ...