`
wh870712
  • 浏览: 39265 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

oracle10g 释放表空间

阅读更多
我们都知道数据表的庞大导而致其查询速度的降低是水到渠成的,所以我们只有将相关的数据表的数据相应的移走,但是如果使用Oracle delete之后,相关的数据删除了,但是速度没有多大改善,忧闷了。

使用备份表再drop掉原表。的确可以解决问题。但是较麻烦,今天请教了一个Oracle高手,解决了问题。 由于Oracle delete操作是不释放表空间的,要想提高查询速度则必须释放表空间。

对Oracle 9i而言,释放表空间则需要重新分析表。


analyze table itemLog compute statistics; 再进行select ,感觉的确快了很多。

另一种方法:使用exp将表导出,drop 掉表,再imp回去。


在一个应用中如果数据量比较大,开始影响到页面 sql 执行效率的时候,我们通常会考虑到将历史数据搬迁到一个历史库中,以此来提高当前系统的性能,但往往有时候可以发现搬迁了以后效率并没有提升或者反而有一定的下降。



      其中一个主要的原因就是我们在操作的时候通常都是用 delete 语句来删除一些历史数据,但 delete 语句是不会释放表空间占用的数据块,也就是说数据是删掉了,但位置还保留着,这块空着的表空间只能由以后再 insert 进来的时候填充。很显然这不是我们想要的效果,我们想要的就是减少表空间,提高 sql 的执行效率。



      下面说下解决的办法,思路就是用 alter table XX move tablespace XX; 语句将表先移到一个空闲的表空间上再移回来,网上也有人通过查 user_tables 里面的 block 字段来观察 move 表空间前后的占用的块,那个里面只是一个统计的结果,不能作为实际考量,因为在 move tablespace 的时候所有字段的 rowid 都是重新创建的,没有数据的那些块自然也就丢掉了,再 move 回来。可以理解成类似于在其他表空间创建一个临时表,把当前的表删掉重新建回来。



      还有一点要注意的就是,move 的同时既然 rowid 是重新创建的,那么该表上的索引自然也就失效了,再 move 回来以后别忘了把索引重新再建一下,要不然 sql 会报错无法执行。

      最后别忘了分析下表。analyze table XX compute statistics;

ALTER   TABLE   table_name   MOVE
truncate   table   tab_name;

如果整表数据都可以清除,建议首选truncate   table   table_name;
如果delete部分数据之后还再想整理表空间,一种方法使用导入导出重组表,另一种方法是使用create   table   table_name   as   select   ...达到重组表的目的。不过第二种方法需要中转表,相对麻烦一些。

DORP表,在重新建表


一种方法先DORP掉表,在重新建此表,表空间就会释放
二种方法就是MOVE表到另外一个表空间中,然后在MOVE回来

二、清除表中的数据

truncate操作 同没有where条件的delete操作十分相似,只是把表里的信息全部删除,但是表依然存在。

例如:truncate table  XX

Truncate不支持回滚,并且不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除。

truncate table 后,有可能表空间仍没有释放,可以使用如下语句:

alter table 表名称 deallocate   UNUSED KEEP 0;

注意如果不加KEEP 0的话,表空间是不会释放的。

例如:

alter table F_MINUTE_TD_NET_FHO_B7 deallocate   UNUSED KEEP 0;

或者:

TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE才能释放表空间。

例如: truncate table  test1 DROP STORAGE;

分享到:
评论

相关推荐

    Oracle 10g 学习笔记

    │ oracle10g系统管理之表空间(一) - lvhuiqing的专栏 - CSDN博客.mht.lnk │ oracle10g系统管理之表管理 - lvhuiqing的专栏 - CSDN博客.mht │ oracle10g系统管理之表管理 - lvhuiqing的专栏 - CSDN博客.mht.lnk ...

    RedHat AS 4安装Oracle10g手册

    (1) 简化过程(以oracle登录,释放安装文件,使用更少的磁盘空间,速度更快) 在安装LINUX时最好分一个区/orasetup,这样一来即使系统坏了,也只是重装系统,而无须重新拷贝数据库安装文件. zcat ship.db.lnx32.cpio....

    oracle 在删除表,表空间,用户时 如何释放磁盘空间.docx

    oracle 在删除表,表空间,用户时 如何释放磁盘空间.pdf

    oracle Rman删除归档脚本for windows

    oracle rman占用磁盘空间,利用Windows计划任务执行该脚本释放空间,脚本内相关路径需根据实际情况进行更改

    深入解析Oracle.DBA入门进阶与诊断案例

    8.8 Oracle 11g UNDO表空间备份增强 360 8.9 回滚机制的深入研究 361 8.9.1 从DML更新事务开始 361 8.9.2 获得事务信息 362 8.9.3 获得回滚段名称并转储段头信息 362 8.9.4 获得跟踪文件信息 363 8.9.5...

    深入解析OracleDBA入门进阶与诊断案例 3/4

     8.8 Oracle 11g UNDO表空间备份增强   8.9 回滚机制的深入研究   8.10 Oracle 9i闪回查询的新特性   8.11 使用ERRORSTACK进行错误跟踪   8.12 Oracle 10g闪回查询特性的增强   8.13 ORA-01555成因...

    深入解析OracleDBA入门进阶与诊断案例 2/4

     8.8 Oracle 11g UNDO表空间备份增强   8.9 回滚机制的深入研究   8.10 Oracle 9i闪回查询的新特性   8.11 使用ERRORSTACK进行错误跟踪   8.12 Oracle 10g闪回查询特性的增强   8.13 ORA-01555成因...

    深入解析OracleDBA入门进阶与诊断案例 4/4

     8.8 Oracle 11g UNDO表空间备份增强   8.9 回滚机制的深入研究   8.10 Oracle 9i闪回查询的新特性   8.11 使用ERRORSTACK进行错误跟踪   8.12 Oracle 10g闪回查询特性的增强   8.13 ORA-01555成因...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行...

    oracle数据库经典题目

    18. 表空间是Oracle数据库中数据的逻辑组织,每个数据库至少有一个SYSTEM系统表空间。 19.视图是一个表示表的数据的数据库对象,它允许用户从一个表或一组表中通过一定的查询语句建立一个“虚表”。 20.序列是一种...

    小型机和oracle日常巡检

    讲述了IBM小型机日常巡检内容,同时对oracle10g中进程占用的PS空间较大做了参数修改,确保能释放资源。另外,oracle的巡检只是最简单的巡检,仅供参考

    解决Oracle RMAN删除归档日志不释放问题的方法

    最近同事在工作中遇到一个问题,他那边的一套Oracle 11g数据库使用RMAN没办法删除旧的归档,导致磁盘使用率很高。 oracle@ps251n2s:[/opt/oracle/archive/db] ls -ltr |more total 3059881082 -rw-r----- 1 oracle...

    如何Shrink Undo表空间,释放过度占用的空间

    环境:OS:Red Hat Enterprise Linux AS release 4 (Nahant)DB:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production 一台Oracle10gR2数据库报出如下错误:ORA-1653: unable to extend table ...

    数据库巡检方案.pdf

    检查文件系统的使用情况 如果文件系统的剩余空间小于 10%,则需要删除不必要的文件以释放空间。 $df -h Filesystem size used avail capacity Mounted on /dev/md/dsk/d0 20G 17G 3.1G 85% / /proc 0K 0K 0K 0% /...

    Oracle9i的init.ora参数中文说明

    值范围: Oracle8i National Language Support Guide 中指定的任何有效的10 字节字符串。 默认值: 从 NLS_TERRITORY 中获得 nls_date_language: 说明: 指定拼写日期名, 月名和日期缩写词 (AM, PM, AD, BC) 的语言。...

    Toad 使用快速入门

     注意,如果是选择了专门建立toad这个用户的话,需要先修改一下脚本,指定用户的默认表空间和临时表空间。 需要使用Oracle8i 的Profile analyzer,必须运行ToadProfiler.sql  需要加强Toad的安全性,必须...

    mysql数据库my.cnf配置文件

    [client] port = 3306 socket=/home/mysql/data...myisam_max_sort_file_size = 10G # 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出 myisam_repair_threads ...

    (重要)AIX command 使用总结.txt

    <1> mklv -y lvinformix -c 2 rootvg 64 //在卷组rootvg上创建逻辑卷lvinformix, 大小为64(LP)×16M=1G, 磁盘镜像需用-c参数指定副本数 <2> crfs -v jfs -d lvinformix -m /opt/informix //在lvinformix上创建文件...

    超级有影响力霸气的Java面试题大全文档

    为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java...

Global site tag (gtag.js) - Google Analytics