oracle数据库检查所有表空间使用率的脚本

REM tablespace report

set linesize 200

select a.tablespace_name,
round(a.bytes_alloc / 1024 / 1024) megs_alloc,
round(nvl(b.bytes_free, 0) / 1024 / 1024) megs_free,
round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) megs_used,
round((nvl(b.bytes_free, 0) / a.bytes_alloc) 100) Pct_Free,
100 - round((nvl(b.bytes_free, 0) / a.bytes_alloc)
100) Pct_used,
round(maxbytes / 1048576) Max
from (select f.tablespace_name,
sum(f.bytes) bytes_alloc,
sum(decode(f.autoextensible, ‘YES‘, f.maxbytes, ‘NO‘, f.bytes)) maxbytes
from dba_data_files f
group by tablespace_name) a,
(select f.tablespace_name, sum(f.bytes) bytes_free
from dba_free_space f
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name(+)
union all
select h.tablespace_name,
round(sum(h.bytes_free + h.bytes_used) / 1048576) megs_alloc,
round(sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) /
1048576) megs_free,
round(sum(nvl(p.bytes_used, 0)) / 1048576) megs_used,
round((sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) /
sum(h.bytes_used + h.bytes_free)) 100) Pct_Free,
100 -
round((sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) /
sum(h.bytes_used + h.bytes_free))
100) pctused,
round(sum(f.maxbytes) / 1048576) max
from sys.v
$TEMP_SPACEHEADER h,
sys.v
$Temp_extent_pool p,
dba_temp_files f
where p.file_id(+) = h.file_id
and p.tablespace_name(+) = h.tablespace_name
and f.file_id = h.file_id
and f.tablespace_name = h.tablespace_name
group by h.tablespace_name
ORDER BY 1
/

SELECT d.tablespace_name "Name",
            TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),‘99,999,990.900‘) "Size (M)",
            TO_CHAR(NVL(t.hwm, 0)/1024/1024,‘99999999.999‘)  "HWM (M)",
            TO_CHAR(NVL(t.hwm / a.bytes * 100, 0), ‘990.00‘) "HWM % " ,
            TO_CHAR(NVL(t.bytes/1024/1024, 0),‘99999999.999‘) "Using (M)",
        TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), ‘990.00‘) "Using %"
       FROM sys.dba_tablespaces d,
            (select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a,
            (select tablespace_name, sum(bytes_cached) hwm, sum(bytes_used) bytes from v$temp_extent_pool group by tablespace_name) t
      WHERE d.tablespace_name = a.tablespace_name(+)
        AND d.tablespace_name = t.tablespace_name(+)
        AND d.extent_management like ‘LOCAL‘
        AND d.contents like ‘TEMPORARY‘

/

ttitle -
center ‘Database Freespace Summary‘ skip 2

comp sum of nfrags totsiz avasiz on report
break on report

set pages 999
col tsname format a16 justify c heading ‘Tablespace‘
col nfrags format 999,990 justify c heading ‘Free|Frags‘
col mxfrag format 999,999 justify c heading ‘Largest|Frag (MB)‘
col totsiz format 999,999 justify c heading ‘Total|(MB)‘
col avasiz format 999,999 justify c heading ‘Available|(MB)‘
col pctusd format 990 justify c heading ‘Pct|Used‘

select total.TABLESPACE_NAME tsname,
D nfrags,
C/1024/1024 mxfrag,
A/1024/1024 totsiz,
B/1024/1024 avasiz,
(1-nvl(B,0)/A)*100 pctusd
from
(select sum(bytes) A,
tablespace_name
from dba_data_files
group by tablespace_name) TOTAL,
(select sum(bytes) B,
max(bytes) C,
count(bytes) D,
tablespace_name
from dba_free_space
group by tablespace_name) FREE
where
total.TABLESPACE_NAME=free.TABLESPACE_NAME(+)
/

SELECT t.tablespace_name,
CASE
WHEN t.contents = ‘TEMPORARY‘ AND t.extent_management = ‘LOCAL‘ THEN
u.bytes
ELSE
df.user_bytes - NVL(fs.bytes, 0)
END / 1024 / 1024 used_mb,
CASE
WHEN t.contents = ‘TEMPORARY‘ AND t.extent_management = ‘LOCAL‘ THEN
df.user_bytes - NVL(u.bytes, 0)
ELSE
NVL(fs.bytes, 0)
END / 1024 / 1024 free_mb,
fs.min_fragment / 1024 / 1024 min_fragment_mb,
fs.max_fragment / 1024 / 1024 max_fragment_mb,
(fs.bytes / 1024 / 1024) / fs.fragments avg_fragment_mb,
fs.fragments,
t.status,
t.contents,
t.logging,
t.extent_management,
t.allocation_type,
t.force_logging,
t.segment_space_management,
t.def_tab_compression,
t.retention,
t.bigfile
FROM dba_tablespaces t,
(SELECT tablespace_name,
SUM(bytes) bytes,
MIN(min_fragment) min_fragment,
MAX(max_fragment) max_fragment,
SUM(fragments) fragments
FROM (SELECT tablespace_name,
SUM(bytes) bytes,
MIN(bytes) min_fragment,
MAX(bytes) max_fragment,
COUNT() fragments
FROM dba_free_space
GROUP BY tablespace_name
UNION ALL
SELECT tablespace_name,
SUM(bytes) bytes,
MIN(bytes) min_fragment,
MAX(bytes) max_fragment,
COUNT(
) fragments
FROM dba_undo_extents
WHERE status = ‘EXPIRED‘
GROUP BY tablespace_name)
GROUP BY tablespace_name) fs,
(SELECT tablespace_name, SUM(user_bytes) user_bytes
FROM dba_data_files
GROUP BY tablespace_name
UNION ALL
SELECT tablespace_name, SUM(user_bytes) user_bytes
FROM dba_temp_files
GROUP BY tablespace_name) df,
(SELECT tablespace_name, SUM(bytes_used) bytes
FROM gv$temp_extent_pool
GROUP BY tablespace_name) u
WHERE t.tablespace_name = df.tablespace_name(+)
AND t.tablespace_name = fs.tablespace_name(+)
AND t.tablespace_name = u.tablespace_name(+)
/

更多技术分享,请关注微信公众号 Big Data课堂

原文地址:https://blog.51cto.com/14278624/2375573

时间: 2024-11-02 10:37:38

oracle数据库检查所有表空间使用率的脚本的相关文章

实例讲解Oracle数据库设置默认表空间问题

实例讲解Oracle数据库设置默认表空间问题 实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空间.导致系统

Oracle 11gR2 Database UNDO表空间使用率居高不下-转载

客户的数据库是Oracle Database 11.2.0.3.0 for AIX 6.1 64bit的单机数据库.客户查询DBA_FREE_SPACE发现UNDO表空间的使用率高达98%以上.客户的UNDO表空间已经手动扩展到了25GB,且一直在增加,为了UNDO表空间能及时的被释放,UNDO表空间对应的所有数据文件自动扩展都被关闭.查询DBA_UNDO_EXTENTS发现在UNDO表空间中当前没有ACTIVE的EXTENT存在,UNEXPIRED的占到总空间的60%,有30%是EXPIRED

Oracle数据库自带表空间

需求:需要整理现场用户创建的表空间以及其存储数据,进行规范化管理.在整理用户现场建立的表空间时,需要排除掉非用户创建的表空间,所有首先需要那些表空间是用户创建的,那些是Oracle自带的. 本机测试建立一个新库,发现自带表空间如下: 下面对每一个表空间进行简单说明(部分内容引自网络): 1.SYSAUX表空间 SYSAUX表空间在Oracle Database 10g中引入,作为SYSTEM表空间的辅助表空间.以前一些使用独立表空间或系统表空间的数据库组件现在在SYSAUX表空间中创建.SYSA

【Oracle数据库】误删表空间文件【ora-01033ORA-01110】解决办法

今天整理电脑文件,误删了数据库文件,导致连接数据库时报错:ora-01033:oracle initialization or shutdown in progress 在DOS窗口下恢复文件过程记录如下: Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\Users\Administrator>set ORACLE_SID=orcl C:\Users\Administrator>sqlp

expdp导出oracle数据库中指定表空间下数据

大家在工作中,应该很多接触各种各样的数据库,笔者在此记录一下,我的一次导出数据经历. 工作环境是oracle+Linux(红帽系统,类似centos) 1.进入linux系统(这里不在赘余) 2.运行sqlplus,建议创建oracle用户 管理数据库,直接输入sqlplus 可能不行,需要修改系统的环境变量,我这里是用的 . /home/oracle/.bash_profile 临时改变系统环境变量 3.在进入sqlplus 中,创建目录路径:输入命令: create directory my

oracle下的数据库实例、表空间、用户及其表的区分

oracle数据库组成: 由oracle数据库和数据库实例两部分组成: 数据库是指一系列数据文件的集合,数据库实例则是oracle后台进程/线程以及在服务器分配的共享内存区: 查询当前数据库名 1 SQL> select name from v$database; 2 3 NAME 4 --------- 5 ORCL 查询当前数据库实例名 数据库实例名(instance_name)用于对外部连接.在操作系统中要取得与数据库的联系,必须使用数据库实例名.比如我们作开发,要连接数据库,就得连接数据

Oracle bigfile 大文件表空间

Database 是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成.表空间内的逻辑存储单位为段(segment),段又可以继续划分为数据扩展(extent).而数据扩展是由一组连续的数据块(datablock)构成. 大文件表空间 在Oracle中用户可以创建大文件表空间(bigfile tablespace).这样Oracle数据库使用的表空间(tablespace)可以由一个单一的大文件构成,而不是若干个小数据文件.这使Oracle可以发挥64位系统的能力,创建.管理超大

Oracle表空间使用率过大问题处理方法

一. 查看Oracle数据库内表空间使用情况 SELECT a.tablespace_name "表空间名", total "表空间大小", free "表空间剩余大小", (total - free) "表空间使用大小", total/(1024*1024*1024) "表空间大小(G)", free/(1024*1024*1024) "表空间剩余大小(G)", (total - fr

Oracle 数据库 数据文件 表 表空间 用户的关系

这涉及到数据库的物理结构和逻辑结构. 首先,你需要明白的一点是:数据库的物理结构是由数据库的操作系统文件所决定,每一个Oracle数据库是由三种类型的文件组成:数据文件.日志文件和控制文件.数据库的文件为数据库信息提供真正的物理存储. 每一个Oracle数据库有一个或多个物理的数据文件(data file).一个数据库的数据文件包含全部数据库数据.逻辑数据库结构(如表.索引等)的数据物理地存储在数据库的数据文件中.数据文件通常为*.dbf格式,例如:userCIMS.dbf.数据文件有下列特征: