Oracle 手工清理临时段

今天开发说一个测试库里的表空间满了需要清理,连上测试库一看,确实已经使用99.98%了。

TABLESPACE_NAME                SIZE_G          FREE_G          USED_PCT
------------------------------ --------------- --------------- ----------
E2TEST                               96.00            0.02    99.98%

通过与开发沟通确定了删除策略,先删除了一些历史表但是清理效果不大,直接通过DBA_SEGMENTS视图查看ESOP2TEST表空间中bytes最大的表为E_CONT,占了28G。打算清理直接这张表。

OWNER                          SEGMENT_NAME       SUM(BYTES)/1024/1024
------------------------------ ------------------ --------------------
E2TEST                         E_CONT                  28983.3125

开发要求保留最近一个月的数据,所以打算建一张临时表把最近一个月的数据导进去,删除原表,再把临时表重命名为原表。过程其实很简单,步骤也不复杂,但是在做完全部步骤后发现表空间使用率依然很高,清理没有效果。

TABLESPACE_NAME                SIZE_G          FREE_G          USED_PCT
------------------------------ --------------- --------------- ----------
E2TEST                               96.00            0.89    99.07%

再次查看通过DBA_SEGMENTS查看空间占用情况。

SQL> select * from (select owner,segment_name,sum(bytes)/1024/1024 from dba_segments where tablespace_name=‘E2TEST‘ group by owner,segment_name order by 3 desc ) where rownum < 50;      

OWNER                          SEGMENT_NAME                   SUM(BYTES)/1024/1024
------------------------------ ------------------------------ --------------------
E2TEST                      20.962                                        28981

segment_name居然变为了数字。。。

查看这个段的类型为TEMPORARY

SQL> select * from (select owner,segment_name,segment_type,sum(bytes)/1024/1024 from dba_segments where tablespace_name=‘E2TEST‘ group by owner,segment_name,segment_type order by 4 desc ) where rownum < 50;

OWNER                          SEGMENT_NAME                   SEGMENT_TYPE       SUM(BYTES)/1024/1024
------------------------------ ------------------------------ ------------------ --------------------
E2TEST                      20.962                         TEMPORARY                         28981

在网上查资料,先看到惜分飞的一篇blog,介绍type为TEMPORARY,name为file#.block#对象重现和清理

http://www.xifenfei.com/2015/12/type%E4%B8%BAtemporaryname%E4%B8%BAfile-block%E5%AF%B9%E8%B1%A1%E9%87%8D%E7%8E%B0%E5%92%8C%E6%B8%85%E7%90%86.html

跟他里边描述的不太一样,按他写的方法无法进行清理。

继续查发现一篇文章介绍的情况跟我的比较相似,http://blog.chinaunix.net/uid-22948773-id-3758510.html

重启数据库或用下面的方法清理:

alter session set events ‘immediate trace name DROP_SEGMENTS level TS#+1‘;

level - tablespace number+1. If the value is 2147483647 then
             temp segments in ALL tablespaces are dropped, otherwise, only
             segments in a tablespace whose number is equal to the LEVEL
             specification are dropped.

1、查询所在表空间的编号

SQL> select ts# from v$tablespace where name=‘E2TEST‘;

       TS#
----------
         5

2、使用上述方法清理

SQL> alter session set events ‘immediate trace name DROP_SEGMENTS level 6‘;

Session altered.

3、再次查看最大的TEMPORY段已经没有了,表空间也彻底被释放了

SQL> select * from (select owner,segment_name,segment_type,sum(bytes)/1024/1024 from dba_segments where tablespace_name=‘E2TEST‘ group by owner,segment_name,segment_type order by 4 desc ) where rownum < 50;

OWNER                          SEGMENT_NAME                                                                      SEGMENT_TYPE       SUM(BYTES)/1024/1024
------------------------------ --------------------------------------------------------------------------------- ------------------ --------------------
E2TEST                      T_CONT                                                                            TABLE                             12332
E2TEST                      SYS_LOB0000017851C00008$$                                                         LOBSEGMENT                         9834
E2TEST                      ERMSGLOG                                                                          TABLE                              5974

TABLESPACE_NAME                SIZE_G          FREE_G          USED_PCT
------------------------------ --------------- --------------- ----------
E2TEST                               96.00           31.68    67.00%
时间: 2024-11-10 19:37:11

Oracle 手工清理临时段的相关文章

Oracle手工生成段建议(Segment Advisor)

一.描写叙述 从oracle 10g開始,oracle引入了段顾问(Segment Advisor),用于检查数据库中是否有与存储空间相关的建议,而且从10gR2開始,oracle自己主动调度并执行一个段顾问作业,定时分析数据库中的段,并将分析结果放在内部表中.可是非常多情况下,作为DBA,我们都会将oracle自带的各种调度作业(统计信息收集.段顾问.SQL顾问等等)禁用,进而通过手工进行控制执行类似作业(或者为了节省资源).因此非常多情况下,我们都没实用到段顾问这个非常实用的功能.这篇文章就

Oracle 手工不完全恢复总结(一)

完全恢复和不完全恢复都是对数据库进行恢复的操作. 完全恢复:指的是利用重做日志或增量备份将数据恢复到最近的当前时间点.回滚未提交事务.之所以叫完全恢复是由于Oracle应用了归档日志和联机重做日志中的所有的修改. 不完全恢复:利用备份产生一个非当前版本的数据库.恢复过程中不会应用备份产生后生成的所有重做日志. 不完全恢复应用的场景: 介质失败.损坏了一个.几个或全部的联机重做文件: 用户操作造成的数据丢失,比如用户误删除一张表: 由于个别归档日志文件的丢失: 丢失了当前的控制文件,必须使用备份的

ORACLE手工删除数据库

很多人习惯用ORACLE的DBCA工具创建.删除数据库,这里总结一下手工删除数据库实验的步骤,文中大量参考了乐沙弥的手动删除ORACLE数据库这篇博客的内容,当然还有Oracle官方相关文档.此处实验环境为Oracle Linux Server release 5.7,数据库版本为10.2.0.5.0 Step 1: .获得控制文件.数据文件,日志文件等相关信息 获取这些信息,一方面是为了后面的建库做参考,另外一个是为了验证后面一些操作,如果这些都没有必要,其实是可以可以跳过这一步的. SQL>

oracle 手工删库

今天因为插入中文是乱码,发现字符集不是ZHS16GBK,所以准备删除了重新建 [email protected] >alter database close; alter database close * 第 1 行出现错误: ORA-01093: ALTER DATABASE CLOSE ????????????? 说明还要session 连接,退出连接后在进行删除操作 [email protected] >alter database close; 数据库已更改. [email prote

oracle手工生成AWR报告方法记录

AWR(Automatic Workload Repository)报告是我们进行日常数据库性能评定.问题SQL发现的重要手段.熟练掌握AWR报告,是做好开发.运维DBA工作的重要基本功. AWR报告的原理是基于Oracle数据库的定时镜像功能.默认情况下,Oracle数据库后台进程会以一定间隔(一小时)收集系统当前状态镜像,并且保存在数据库中.生成AWR报告时,只需要指定进行分析的时间段(开始镜像编号和结束镜像编号),就可以生成该时间段的性能分析情况.AWR镜像保存在数据库中的时间为一个月左右

oracle 10G 清理垃圾表

一次边学边干的oralce运维经历, 步步是坑啊. 起因: 一套运行了5年的系统, 客户近期反映比较慢. 了解了一下运行环境: windows2003(16G + 4核) +  jdk(32) +tomcat  和 window2003(4G + 双核) + oracle10G 现场现象: 客户操作出入库单据, ie一片空白持续很长时间, 体验十分糟糕, 用客户的话说: 这一天做单的工作量对得起这份薪水. 初步判断: tomcat连接数据库时候十分缓慢, 而且tomcat各种cpu,内存显示都比

oracle定时清理日志操作

下面介绍下oracle下定时清理归档日志文件操作. 假设:归档日志满,清空归档日志办法如下. 第一步:在c盘下面建立一个RMAN_DEL.txt文件 第二步:做一个批处理文件,名为:RAMN_DEL.bat 放在c盘的根目录.文件内容如下所示: 第三步:添加一个任务计划: 执行步骤如下图所示,任务计划出来后点击下一步设置参数即可. 以上为window下执行计划任务定时删除归档日志方法.如果是linux请操作本人写的linux定时任务操作.版权所有.转载请说明出处.

物化视图日志过大,手工清理

参考 https://blog.csdn.net/demonson/article/details/91518341 问题说明: 1.生产环境遇到一个物化视图日志表100g,问题处理根据上述博客,后续测试环境重演 2.总结 由于测试环境关闭或者网络问题,导致主库物化视图日志一直保留,需要清除有问题的物化视图日志. How to purge MLOG$ Tables in the OLTP database (文档 ID 1922560.1) How to REGISTER and UNREGIS

Oracle需要清理的日志

oracle各类日志清理(一般oracle软件目录约10G左右) 一般先进$ORACLE_BASE目录,查看哪个目录占用较大空间,并层层深入,定位到占用较大的目录,判断文件类型并清理.如下: [[email protected] ~]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) [[email protected] ~]$ cd $ORACLE_BASE [[email prote