不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

Q:oracle表空间满了怎么办?

Posted on 2024-02-01 15:31  三年三班王小朋  阅读(46)  评论(0编辑  收藏  举报

查询表空间使用率:

--查看表空间使用率

SELECT a.tablespace_name as "TABLESPACE_NAME",
DECODE(TRUNC(total),0,REPLACE(TO_CHAR(total),'.', '0.'),TO_CHAR(total)) as "MAX_SIZE(G)",
DECODE(TRUNC(total - free),0,REPLACE(TO_CHAR(total - free),'.', '0.'),TO_CHAR(total - free)) as "USEAGE_SIZE(G)",
DECODE(TRUNC(free),0,REPLACE(TO_CHAR(free),'.', '0.'),TO_CHAR(free)) as "FREE_SIZE(G)",
DECODE(TRUNC(round((total-free)/total,6)*100),0,REPLACE(TO_CHAR(round((total-free)/total,6)*100),'.', '0.'),TO_CHAR(round((total-free)/total,6)*100)) AS "USEAGE_RATE(%)"
FROM (SELECT tablespace_name,ROUND(SUM(bytes)/(1024*1024*1024),6) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, ROUND(SUM(bytes)/(1024*1024*1024),6) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
order by a.tablespace_name desc;

 

--各个表空间占用磁盘空间大小
select tablespace_name,sum(bytes)/1024/1024 "Size(MB)" from dba_data_files group by tablespace_name;

 

查询具体表使用率:

--各个表占所有段的存储信息

SELECT SEGMENT_NAME, ROUND(SUM(BYTES / 1024 / 1024 / 1024), 2) G,OWNER
FROM DBA_SEGMENTS
--WHERE SEGMENT_NAME IN
--(SELECT TABLE_NAME FROM USER_TAB_COLUMNS WHERE DATA_TYPE = 'CLOB')
GROUP BY SEGMENT_NAME,OWNER
ORDER BY 2 DESC;

SYS_LOB:数据库中varchar2只能值为4000,PL/SQL中 VARCHAR2 变量类型,字节长度为32767,针对 VARCHAR2 满足不了我们的需要时,Oracle就提出了大数据类型LOB( Large Object,大对象)。
LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图象、影音等)。

--查询某个sys_lob(红标字体)的存储大小

SELECT B.TABLE_NAME,
B.COLUMN_NAME,
A.SEGMENT_NAME,
a.SEGMENT_TYPE,
ROUND(SUM(A.BYTES / 1024 / 1024 / 1024), 2) G
FROM DBA_SEGMENTS A
LEFT JOIN DBA_LOBS B
ON A.OWNER = B.OWNER
AND A.SEGMENT_NAME = B.SEGMENT_NAME
WHERE B.SEGMENT_NAME = 'SYS_LOB0000029275C00015$$'
HAVING ROUND(SUM(A.BYTES / 1024 / 1024 / 1024), 2) >1
GROUP BY B.TABLE_NAME, B.COLUMN_NAME, A.SEGMENT_NAME,a.SEGMENT_TYPE;

--各个表占用当前用户的表空间大小
select Segment_Name,Sum(bytes)/1024/1024 as "SIZE(MB)" From User_Extents Group By Segment_Name order by Sum(bytes) desc;

 

处理方法:

--增加表空间(开启omf直接改表空间名即可)
alter tablespace 表空间名 add datafile size 32700m;
alter tablespace TBS_HIP_CDR add datafile size 32700m;
--未开启omf
alter tablespace oracle_data add datafile '/u01/app/oracle/oradata/ybzjk/oracle_data1.dbf' size 100m autoextend on next 100m maxsize 1024m;

--HIS数据库清楚审计日志(12c以后用存储过程清理,清理表不管用)
BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,container => DBMS_AUDIT_MGMT.CONTAINER_CURRENT,use_last_arch_timestamp => FALSE);
END;
/