Oracle数据库表空间占用过大的解决办法

最近调接口的时候接口访问历史表报错:


检查之后发现表空间满了,随后把相应表空间进行了扩展,顺带总结了Oracle检查&调整表空间的sql语句如下:
--查看某张表的表空间
select table_name,tablespace_name from user_tables where TABLE_NAME='表名';



--查询表空间的使用情况
SELECT UPPER(F.TABLESPACE_NAME)"表空间名",
  D.TOT_GROOTTE_MB "表空间大小(M)",
  D.TOT_GROOTTE_MB-F.TOTAL_BYTES "已使用空间(M)",
  TO_CHAR(ROUND((D.TOT_GROOTTE_MB-F.TOTAL_BYTES)/D.TOT_GROOTTE_MB*100,2),'990.99')||'%'"使用比",
  F.TOTAL_BYTES "空闲空间(M)",
  F.MAX_BYTES "最大块(M)"
  FROM(SELECT TABLESPACE_NAME,
  ROUND(SUM(BYTES)/(1024*1024),2)TOTAL_BYTES,
  ROUND(MAX(BYTES)/(1024*1024),2)MAX_BYTES
  FROM SYS.DBA_FREE_SPACE
  GROUP BY TABLESPACE_NAME)F,
  (SELECT DD.TABLESPACE_NAME,
  ROUND(SUM(DD.BYTES)/(1024*1024),2)TOT_GROOTTE_MB
  FROM SYS.DBA_DATA_FILES DD
  GROUP BY DD.TABLESPACE_NAME)D
  WHERE D.TABLESPACE_NAME=F.TABLESPACE_NAME
  ORDERBY1;


--查询某个用户的默认表空间和默认临时表空间
 select username,default_tablespace,temporary_tablespace from dba_users where username='用户名';



-- 查询某个用户下所有表使用的表空间
select owner,table_name,tablespace_name from dba_tables where owner='用户名';


--查询某个表空间下面的所有表
 select * from all_tables where tablespace_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;




--增加表空间
1、先查看一下数据文件存放位置:select * from dba_data_files;
2、登录服务器查看相关目录下是否有足够的空间  df -h
----css_app02.dbf 表示这是css_app表空间的其中一份存储文件. 表空间存储文件命名方式:表空间名01.dbf,表空间名02.dbf .....表空间名0N.dbf   
3、拓展表空间的两种方法:
方法一: 
给表空间增加数据文件:
--增加固定大小的文件,不允许数据文件自动增长
alter tablespace 表空间名 add  datafile ‘/mnt/disk/oracle/CSS_APP02.dbf’size 30720M  autoextend off;
--新增数据文件,并且允许数据文件自动增长
alter tablespace 表空间名 add  datafile ‘/mnt/disk/oracle/CSS_APP02.dbf’size 30720M  autoextend on next 50M maxsize 5G;
--新增数据文件,并且允许数据文件自动增长(无限制)
alter tablespace 表空间名 add  datafile ‘/mnt/disk/oracle/CSS_APP02.dbf’size 30720M  autoextend on next 50M maxsize unlimited;

方法二:
改变已存在的数据文件的大小:
alter datdabase datafile  ‘/mnt/disk/oracle/CSS_APP01.dbf’ resize 30720M;

--系统表空间过大的情况
1、system表空间过大(使用率95%以上)
a、检查aud$表大小
--查看数据库表大小SQL
select bytes,owner,segment_name 
from dba_segments 
where segment_type='TABLE' order by bytes desc;

--查看aud$表大小SQL
select bytes,owner,segment_name 
from dba_segments 
where segment_type='TABLE' and segment_name = 'AUD$';
b、如果aud$过大,清理(导出aud$表之后,使用truncate清理)
c、如果出现aud$表为空。但是system表空间的使用率照样达到99%的情况,建议增加数据文件


2、sysaux表空间过大(使用率95%以上)
a、修改统计信息的保存时间
select dbms_stats.get_stats_history_retention from dual;  --检查统计信息保存时间(默认应该是31天)
exec dbms_stats.alter_stats_history_retention(7);  --如果31天将其改为7天
select dbms_stats.get_stats_history_retention from dual;  --验证是否修改成功
b、删除AWR报告快照
        补充:Oracle 10g中快照会保留7天,11g的快照保留8天,超出会自动删除。AWR快照可以从其他数据库导入,而这部分数据会保存时间极长。有时候也会遇到自动快照不能自动收集,而手工创建的快照又可以成功,对于这种情况就需要把以前的快照清理掉。
          删除AWR有两种方式进行删除:dbms_workload_repository,dbms_swrf_internal。dbms_workload_repository可以删除本地和其他数据库的快照,可以选择不同的快照来进行删除;dbms_swrf_internal只能对其他数据库的快照来进行操作,会把所有的快照直接干掉。
 
使用dbms_workload_repository包删除:
 select dbid, retention from dba_hist_wr_control;
 select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = '得到的dbid值';
 exec dbms_workload_repository.drop_snapshot_range('得到的min(snap_id)值','得到的max(snap_id)值','得到的dbid值');
 select * from dba_hist_snapshot where dbid = '得到的dbid值';
使用dbm_swrf_internal包删除:
 select dbid, retention from dba_hist_wr_control;
 select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = '得到的dbid值';
 exec dbms_swrf_internal.unregister_database('得到的dbid值');
 select * from dba_hist_snapshot where dbid = '得到的dbid值';

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于Oracle数据库中UNDOTBS表空间不断增大的问题,有几个可能的原因和解决方法。 1. 长时间运行的事务:如果有长时间运行的事务,它们可能会占用大量的UNDOTBS空间。你可以通过查询v$transaction视图来检查当前活动的事务,并尝试终止或优化这些事务,以释放空间。 2. 回滚段保留时间过长:回滚段在事务回滚或撤销时使用UNDOTBS空间。如果回滚段保留时间设置过长,UNDOTBS空间会不断增大。你可以通过修改回滚段保留时间的参数(UNDO_RETENTION)来控制UNDOTBS空间的增长。 3. 高并发环境:在高并发环境下,频繁的并发事务可能会导致UNDOTBS空间增长迅速。你可以考虑增加UNDOTBS表空间的大小,以适应更多的并发事务。 4.未提交事务或长时间未提交事务:未提交的事务会一直占用UNDOTBS空间,直到它们被提交或回滚。确保所有事务都能及时提交或回滚,以避免UNDOTBS空间持续增长。 5. 导致大量回滚数据的操作:某些操作可能导致产生大量的回滚数据,例如大批量的数据插入、更新或删除操作。你可以考虑将这些操作拆分成更小的批次,以减少对UNDOTBS空间的需求。 请注意,在进行任何更改之前,务必备份数据库以防止数据丢失。此外,如果你不确定如何处理UNDOTBS空间的增长问题,建议咨询有经验的数据库管理员。希望这些信息对你有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值