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批量导入文本文件快速的方法(sqlldr实现)

    Oracle批量导入文本文件快速的方法(sqlldr实现)

    批量导入文本文件在Oracle数据库操作中经常遇见,今天给大家介绍一种通过sqlldr批处理实现的方法,有需要的朋友们可以参考借鉴,下面来一起看看。
    2016-09-09
  • Oracle数据库自定义类型type的用法详解

    Oracle数据库自定义类型type的用法详解

    这篇文章主要介绍了Oracle数据库自定义类型type的用法详解,Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库,可以看作是 Oracle 就只有一个大数据库,需要的朋友可以参考下
    2023-07-07
  • Oracle数据行拆分多行方法示例

    Oracle数据行拆分多行方法示例

    oracle数据库使用过程中,怎样将一行或者多行数据分割成需要的多行数据,本文我们就来看看具体方法,需要的朋友可以参考。
    2017-10-10
  • Oracle数据库的备份与恢复

    Oracle数据库的备份与恢复

    Oracle数据库的备份与恢复...
    2007-03-03
  • Oracle字符串拆分实例详解

    Oracle字符串拆分实例详解

    这篇文章主要给大家介绍了关于Oracle字符串拆分的相关资料,Oracle提供了多种分割函数,其中最常用的是REGEXP_SUBSTR函数,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • 记一次Oracle数据恢复过程

    记一次Oracle数据恢复过程

    本文简单记录一下最近一次数据恢复的过程,需要的朋友可以参考下
    2015-08-08
  • Oracle中nvl()和nvl2()函数实例详解

    Oracle中nvl()和nvl2()函数实例详解

    NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回响应的列名或表达式,下面这篇文章主要给大家介绍了关于Oracle中nvl()和nvl2()函数的相关资料,需要的朋友可以参考下
    2022-05-05
  • oracle中sql%rowcount的作用详解

    oracle中sql%rowcount的作用详解

    这篇文章主要介绍了oracle中sql%rowcount的作用,sql%rowcount来判断是否更新了记录的状态,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁

    Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁

    Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁的实现方法
    2009-02-02
  • Oracle数据库表被锁如何查询和解锁详解

    Oracle数据库表被锁如何查询和解锁详解

    作为一个IT技术人员,可能经常遇到在使用Oracle数据时,由于操作不当导致数据库锁表,从而影响项目正常使用,下面这篇文章主要给大家介绍了关于Oracle数据库表被锁如何查询和解锁的相关资料,需要的朋友可以参考下
    2023-03-03

最新评论