Oracle中如何查看表空间使用率

 更新时间:2023年07月29日 09:36:48   作者:王绍桦  
这篇文章主要介绍了Oracle中如何查看表空间使用率问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Oracle查看表空间使用率

查看用户默认表空间

SELECT USERNAME,DEFAULT_TABLESPACE FROM DBA_USERS WHERE USERNAME='DB_USER_NAME';

查看表空间文件路径、大小、已使用、使用率

SELECT
  B.FILE_NAME 物理文件名,
  B.TABLESPACE_NAME 表空间名称,
  B.BYTES/1024/1024 大小M,
  (B.BYTES-SUM(NVL(A.BYTES,0)))/1024/1024 已使用M,
  SUBSTR((B.BYTES-SUM(NVL(A.BYTES,0)))/(B.BYTES)*100,1,5) 使用率
FROM DBA_FREE_SPACE A,DBA_DATA_FILES B
WHERE A.FILE_ID=B.FILE_ID
GROUP BY B.TABLESPACE_NAME,B.FILE_NAME,B.BYTES
ORDER BY B.TABLESPACE_NAME;

查看表空间是否开启自动扩展

SELECT FILE_NAME AS 数据文件,TABLESPACE_NAME AS 表空间名称,AUTOEXTENSIBLE AS 自动扩展,STATUS AS 状态,MAXBYTES AS 可扩展最大值,USER_BYTES AS 已使用大小,INCREMENT_BY AS 自动扩展增量 FROM DBA_DATA_FILES;

创建表空间并开启自动扩展

CREATE SMALLFILE TABLESPACE TABLE_SPACE_NAME DATAFILE 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST.DBF' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED NOLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO DEFAULT NOCOMPRESS;

修改表空间大小

ALTER DATABASE DATAFILE 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST.DBF' RESIZE 200M;

删除表空间和数据文件

DROP TABLESPACE TABLE_SPACE_NAME INCLUDING CONTENTS AND DATAFILES;

查看临时表空间信息

SELECT * FROM DBA_TEMP_FILES

Oracle临时表空间使用率

今天开发反映说临时表空间不够要求添加临时表空间,添加完成(添加了30G的临时表空间)又报临时表空间的不足,开发又要求是添加,有添加了10G,监控临时表空间的使用情况,又撑满了,又添加了30G,最后临时表空间又撑满了,最后批处理还是没有执行,SQL语句的执行是一次性全部执行完成,最后的解决办法是开发使用游标,一万条数据一提交或者定量提交,下午监控临时表空间的使用情况发现使用率 74.91%。不禁有些疑问到底是那些用户在使用临时表空间,使用临时表空间的大小有多大,

在做一些什么操作,SQL语句是什么。

首先要说明一点的是表空间的使用惰性,如果你一下使用几十个G的临时表空间,如果SQL语句执行失败,临时表空间的释放需要时间,不会一下全部释放,这个时候我们检查临时表空间的使用率发现使用率已经是99%,如果你扩容临时表空间,扩容30G,开发又开始执行sql,你会发现临时表空间使用率蹭蹭的网上增最后又达到了99%,开发的sql又没有执行过去,还是报临时表空间不足,而临时表空间释放有需要时间,如果开发的非常着急需要执行sql。所以建议dba一次扩容临时表,扩容大点,

说一下今天处理问题的过程

1.查询临时表空间的使用率

select c.tablespace_name,
       to_char(c.bytes / 1024 / 1024 / 1024, '99,999.999') total_gb,
       to_char((c.bytes - d.bytes_used) / 1024 / 1024 / 1024, '99,999.999') free_gb,
       to_char(d.bytes_used / 1024 / 1024 / 1024, '99,999.999') use_gb,
       to_char(d.bytes_used * 100 / c.bytes, '99.99') || '%' use
  from (select tablespace_name, sum(bytes) bytes
          from dba_temp_files
         GROUP by tablespace_name) c,
       (select tablespace_name, sum(bytes_cached) bytes_used
          from v$temp_extent_pool
         GROUP by tablespace_name) d
 where c.tablespace_name = d.tablespace_name;

2.查询那些用户在使用

select a.username,
       a.sql_id,
       a.SEGTYPE,
       b.BYTES_USED/1024/1024/1024||'G',
       b.BYTES_FREE/1024/1024/1024  
from V$TEMPSEG_USAGE a join V$TEMP_SPACE_HEADER b on a.TABLESPACE=b.tablespace_name;

解释username  正在执行sql的用户名

  • sql_id:正在执行的sql的的sql_id
  • segtype:正在执行的SQL语句做的是什么操作
  • BYTES_USED:正在执行sql语句使用的临时表空间的大小
  • BYTES_FREE:剩余多少临时表空间

大家可以看到这个临时表空间的有6个数据文件,查询的结果显示按照每个临时的数据文件使用了多少,还剩余多少,又又有一个问题是第一用户DBSNMP用户已经把临时表空间占满了那么第二个用户还能使用这个六个数据文件的临时表空间么,个人理解是六个数据文件中有第一个用户在使用,也有第二个用户在使用。

查询实例中时候是否有大字段在使用临时表空间:

select *  from V$TEMPORARY_LOBS;

关于数据字典V$TEMP_SPACE_HEADER官方文档的解释:

V$TEMP_SPACE_HEADER 显示每个LOCALLY MANAGED临时表空间的每个文件的聚合信息,包括当前正在使用的空间量以及空间头中标识的空闲量。        

ColumnDatatypeDescription
TABLESPACE_NAMEVARCHAR2(30)Name of the temporary tablespace
FILE_IDNUMBERAbsolute file number
BYTES_USEDNUMBERHow many bytes are in use
BLOCKS_USEDNUMBERHow many blocks are in use
BYTES_FREENUMBERHow many bytes are free
BLOCKS_FREENUMBERHow many blocks are free
RELATIVE_FNONUMBERThe relative file number for the file

关于V$TEMPSEG_USAGE的官方文档的解释:

V$TEMPSEG_USAGE 描述临时段使用情况。 

数据类型描述
USERNAMEVARCHAR2(30)请求临时空间的用户
USERVARCHAR2(30)此列已过时并维护以便向后兼容。 此列的值始终等于中的值 USERNAME 。
SESSION_ADDRRAW(4 | 8)会话地址
SESSION_NUMNUMBER会话序列号
SQLADDRRAW(4 | 8)SQL语句的地址
SQLHASHNUMBERSQL语句的哈希值
SQL_IDVARCHAR2(13)SQL语句的SQL标识符
TABLESPACEVARCHAR2(31)分配空间的表空间
CONTENTSVARCHAR2(9)指示表是否 TEMPORARY 或 PERMANENT
SEGTYPEVARCHAR2(9)排序类型的类型:

SORT

HASH

DATA

INDEX

LOB_DATA

LOB_INDEX

SEGFILE#NUMBER初始范围的文件号
SEGBLK#NUMBER初始范围的块号
EXTENTSNUMBER分配给排序的范围
BLOCKSNUMBER分配给排序的块中的范围
SEGRFNO#NUMBER初始范围的相对文件号

关于V$TEMP_EXTENT_POOL的官方文档中的解释

V$TEMP_EXTENT_POOL显示缓存并用于实例的临时空间的状态。

请注意,临时空间缓存的加载是惰性的,并且实例可以处于休眠状态。

数据类型描述
TABLESPACE_NAMEVARCHAR2(30)表空间的名称
FILE_IDNUMBER绝对文件号
EXTENTS_CACHEDNUMBER已缓存的范围数
EXTENTS_USEDNUMBER实际使用的范围数
BLOCKS_CACHEDNUMBER缓存的块数
BLOCKS_USEDNUMBER使用的块数
BYTES_CACHEDNUMBER缓存的字节数
BYTES_USEDNUMBER使用的字节数
RELATIVE_FNONUMBER相对文件号

关于V$TEMPORARY_LOBS官方文档解释

V$TEMPORARY_LOBS 显示临时LOB。

数据类型描述
SIDNUMBER会话ID
CACHE_LOBSNUMBER缓存临时LOB的数量
NOCACHE_LOBSNUMBERnocache临时LOB的数量
ABSTRACT_LOBSNUMBER抽象LOB的数量

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • oracle查询所有表信息表字段详细示例

    oracle查询所有表信息表字段详细示例

    最近在工作中遇到个需求,要在Oracle数据库中查询表的所有字段、字段类型和字段说明,所以这篇文章主要给大家介绍了关于oracle查询所有表信息表字段的相关资料,需要的朋友可以参考下
    2023-11-11
  • oracle 11g数据库安全加固注意事项

    oracle 11g数据库安全加固注意事项

    这篇文章主要介绍了oracle11g数据库安全加固须谨慎 ,需要的朋友可以参考下
    2015-08-08
  • Oracle去掉特殊字符的具体方法

    Oracle去掉特殊字符的具体方法

    这篇文章介绍了Oracle去掉特殊字符的实例代码,有需要的朋友可以参考一下
    2013-10-10
  • ORA-02298: 无法验证 (约束)提示未找到父项关键字的解决办法

    ORA-02298: 无法验证 (约束)提示未找到父项关键字的解决办法

    这篇文章主要介绍了ORA-02298: 无法验证 (约束)提示未找到父项关键字的解决办法,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Oracle区别ADG与DG案例详解

    Oracle区别ADG与DG案例详解

    这篇文章主要介绍了Oracle区别ADG与DG案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • oracle加字段和字段注释sql语句示例代码

    oracle加字段和字段注释sql语句示例代码

    这篇文章主要介绍了oracle加字段和字段注释sql语句的相关资料, Oracle中通过ALTER TABLE添加字段,COMMENT ON COLUMN添加注释,示例如employees表添加email字段并注释,支持多字段批量添加,需要的朋友可以参考下
    2025-05-05
  • Oracle读取excel数据

    Oracle读取excel数据

    本文给大家介绍Oracle读取excel数据的相关知识,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-03-03
  • Oracle中日期的使用方法实例

    Oracle中日期的使用方法实例

    oracle数据类型看起来非常简单,但用起来会发现有许多知识点,下面这篇文章主要给大家介绍了关于Oracle中日期使用方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 对于oracle对session进行跟踪的分析

    对于oracle对session进行跟踪的分析

    这篇文章主要介绍了对于oracle对session进行跟踪的分析,涉及判断SQL性能优劣的信息等内容,需要的朋友可以参考下。
    2017-09-09
  • Oracle配置数据库防火墙的流程步骤

    Oracle配置数据库防火墙的流程步骤

    数据库防火墙用于监控和控制对数据库的访问,防止未经授权的访问、SQL注入攻击和其他恶意活动,以下是一个详细的指导,展示如何使用开源的数据库防火墙工具,如 GreenSQL,来保护 MySQL 数据库,需要的朋友可以参考下
    2024-09-09

最新评论