传统的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. javaEE简答题整理

    1. 什么是JavaEE?其编程思想是什么? JavaEE是一个标准的中间件体系结构,是企业分布式应用开发标准.JavaEE的编程思想是组件—容器. 2. 为什么提出JavaEE体系结构? (1)为满 ...

  2. C语言复杂的函数指针声明

    复习C语言ING,发现复杂的函数指针声明看不懂,百度半天终于略知一二. 讲的比较详细的一篇blog: http://blog.csdn.net/megaboy/article/details/4827 ...

  3. 将Python代码嵌入C++程序进行编写

    将Python代码嵌入C++程序进行编写的实例,python嵌入 把python嵌入的C++里面需要做一些步骤 安装python程序,这样才能使用python的头文件和库 在我们写的源文件中增加“Py ...

  4. Oracle EBS-SQL (SYS-15):查询表空间2.sql

    /*表空间查询*/ SELECT d.status "状态", d.tablespace_name "名称", d.contents "类型" ...

  5. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(九)

    目的 1. 使用verilog/vhdl设计一个PCI的watchdog设备. 2. 通过systemverilog 写testbench. 很久之前研究过AC97的verilog代码.但是很久没用v ...

  6. Oracle Dataguard HA (主备,灾备)方案部署调试

    包括: centos6.5 oracle11gR2 DataGuard安装 dataGuard 主备switchover角色切换 数据同步测试 <一,>DG数据库数据同步测试1,正常启动主 ...

  7. [Oracle] Listener的动态注册

    在有Oracle Listener的动态注册之前,采用的是静态注册,所谓静态注册是指Oracle实例在启动时,读取listener.ora里的配置,然后注册到Listener,它主要有两个缺点: 1. ...

  8. S3C6410嵌入式应用平台构建(五)——linux-3.14.4移植到OK6410-(Nand分区问题)

    前一篇文章,我们的Linux能后启动了,只是在识别nand时候,没有获取到时钟源,导致后面的分区没哟进行. 我们从启动的log发现: [06/08-11:25:41:371]s3c24xx-nand ...

  9. Tomcat从零开始(十一)WebappLoader概述

    好的,我们先看看这个WebappLoader到底在开始的时候做了什么,先看看他的start()方法. public void start() throws LifecycleException { / ...

  10. Date Time Picker控件

    Step1 在界面中添加一个Date Time Picker控件,ID为:IDC_DATETIMEPICKER1 Step2 该控件关联变量 CDateTimeCtrl m_dateCtrl; Ste ...