oracle 10G 清理垃圾表

一次边学边干的oralce运维经历, 步步是坑啊。

起因: 一套运行了5年的系统, 客户近期反映比较慢。

了解了一下运行环境: windows2003(16G + 4核) +  jdk(32) +tomcat  和 window2003(4G + 双核) + oracle10G

现场现象: 客户操作出入库单据, ie一片空白持续很长时间, 体验十分糟糕, 用客户的话说: 这一天做单的工作量对得起这份薪水。

初步判断: tomcat连接数据库时候十分缓慢, 而且tomcat各种cpu,内存显示都比较正常, 所以把问题定位在数据库上, 然后发现数据库端由很多垃圾数据表, 大概4~5w张。

于是开始先删除这些表, 因为自己对oracle也不是很熟悉, 于是就理所当然的想着像sql server一样, drop table搞定。

select table_name from user_tables where table_name like 'T\_%' escape '\'

首先通过语句查询出表名一共4.5w个。 然后使用文本编辑器, 产生了4.5W个语句格式如下:

DROP TABLE tablename;

使用青蛙执行脚本文件5个小时总算执行完毕, 以为一切ok。 这是客户提醒说他依稀记得, 这样drop表好像还需要执行个语句, 不然表依然在数据库。

听后比较愕然, 度娘下, 结果真是。 表被drop 以后, 其实只是放到了一个叫垃圾箱的地方, 还要做垃圾回收。 再度娘下:

4.5w个表名转换了语句:

PURGE TABLE  tablename;

或者drop的时候使用

DROP TABLE tablename PURGE;

使用青蛙执行脚本文件20个小时语句执行2.7w, oralce直接宕机了。  这时候发现硬盘满了。

这时候客户想看看是什么占用空间比较大, 删除了这么多表 , 依然这么大的空间。很不正常。

select * from dba_tablespaces;

发现一个叫UNDOTBS01 的表空间99%的使用率, 占用33G。

于是又问度娘, 度娘说:

这个表空间是:回滚表空间,用来存放撤消操作的记录

我勒个去, 真是涨姿势了, 以前最多也就是oralce里面写个兼容oralce的语句, 还真的没有搞过这种运维的工作的。那个汗啊~~~~~~~~~, 不过幸好有度娘@#@#¥@

分析下这个原因, 硬盘满了, 这个表空间无法增长了, 已经无法执行其他操作了。 慢、宕机也就很正常了。

--create undo tablespace undotBS2 datafile 'C:\UNDOTBS1.DBF' size 100m;
--alter system set undo_tablespace=undotBS2;
--drop tablespace undotbs1 including contents;

执行这些语句, 重启oralce实例。 然后执行

select * from dba_tablespaces;

发现UNDOTBS2 生效, 占100M。

这时候, oralce操作明显变快了。登陆系统、做业务也明显速度提升。

总结:

oralce清理表, 需要加PURGE参数方可生效, 否则只是放到垃圾回收站:

DROP TABLE tablename PURGE;

回滚表也需要适时清理,虽然可以自增长, 但是这个表空间过大, 影响oralce的运行效率:

--create undo tablespace undotBS2 datafile 'C:\UNDOTBS1.DBF' size 100m;
--alter system set undo_tablespace=undotBS2;
--drop tablespace undotbs1 including contents;
时间: 2024-08-11 05:33:02

oracle 10G 清理垃圾表的相关文章

使用CI操作oracle 10g的单表增删改查

<?php if (!defined('BASEPATH'))    exit('No direct script access allowed'); class UseOra extends CI_Controller{ public function index()    {        echo '欢迎使用测试CI使用Oracle 10g 的功能,您可以在地址栏中使用如下的函数参数:<br>';        echo '=============================

再说“使用CI操作oracle 10g的单表增删改查”

--Control中的UseOra.php <?php if (!defined('BASEPATH'))    exit('No direct script access allowed'); class UseOra extends CI_Controller{ public function index()    {        echo '欢迎使用测试CI使用Oracle 10g 的功能,您可以在地址栏中使用如下的函数参数:<br>';        echo '=======

Oracle 10G R2 让表常驻内存

首先检查Oracle 参数: SQL> show parameters sga; NAME                                 TYPE        VALUE------------------------------------ ----------- -------lock_sga                             boolean     TRUEpre_page_sga                   boolean     TRU

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

Oracle 10g创建表空间的完整步骤详解

本文我们主要介绍了Oracle 10g创建表空间的完整步骤,包括表空间的创建与删除.为应用创建用户以及权限的授予等操作,希望能够对您有所帮助. AD:WOT2014:用户标签系统与用户数据化运营培训专场 Oracle 10g数据库中,当在数据库中创建用户时,基于应用性能和管理方面的考虑,最好为不同的用户创建独立的表空间. 那么创建表空间的步骤是怎样实现的呢?本文我们主要就介绍了这一部分内容,接下来就让我们一起来了解一下这部分内容吧. 1.创建表空间 不论是Lnux环境,还是Wndows环境,都要

Oracle 10g bigfile表空间简介

Oracle 10g bigfile表空间简介 01. A Bigfile 表空间包含一个非常大的数据文件 02. SMALLFILE表空间和BIGFILE表空间可以在同一个数据库共存 1.创建一个bigfile表空间 SQL> CREATE BIGFILE TABLESPACE  big01 datafile '/oracle/oradata/orcl/big01.dbf' size 50M; Tablespace created. 1.2 查看数据库所有表空间bigfile属性,BIG01为

oracle 10g 用dbms_xmlgen将数据表转成xml格式

oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle用plsql将sql查询的所有数据导出为xml

Oracle 10g bigfile表空间、smallfile 表空间

Oracle 10g bigfile表空间简介   01. A Bigfile 表空间包含一个非常大的数据文件 02. SMALLFILE表空间和BIGFILE表空间可以在同一个数据库共存 1.创建一个bigfile表空间     SQL> CREATE BIGFILE TABLESPACE  big01            datafile '/oracle/oradata/orcl/big01.dbf' size 50M; Tablespace created. 1.2 查看数据库所有表空

电脑注册表是做什么的?怎么清理注册表中的垃圾文件?

注册表是Windows系统中非常重要的一个内容,里面存储着许多重要的数据,当然也会产生很多垃圾文件,从而占用电脑的内存空间.定期的清理注册表可以对电脑进行"瘦身",加快电脑的运行效率.但是清理注册表一定要采用科学的方法,否则可能会影响软件程序的运行,甚至导致系统的瘫痪.下面就为大家介绍一下注册表的相关内容.电脑注册表是什么?注册表英文名是Registry,也叫登录档,是Microsoft Windows系统中的一个重要的数据库,用于存储系统和应用程序的设置信息.意思就是,如果你安装了一