`

Oracle 释放表及表空间大小

 
阅读更多

转自:http://blog.sina.com.cn/s/blog_62d1205301013ceu.html

1.查看一个表所占的空间大小:

SELECT bytes/1024/1024 ||'MB' TABLE_SIZE ,u.* FROM USER_SEGMENTS U WHERE U.SEGMENT_NAME='JK_TEST';

2.查看一个表空间所占的实际大小:

SELECT SUM(BYTES) / 1024 / 1024 ||'MB' FROM USER_SEGMENTS U  WHERE TABLESPACE_NAME = 'DATA01';

3.查看一个表空间对应的数据文件:

SELECT * FROM DBA_DATA_FILES D WHERE D.TABLESPACE_NAME = 'DATA01';

4.查看表空间的使用情况:

SELECT A.TABLESPACE_NAME,      

       FILENUM,   

       TOTAL "TOTAL (MB)",  

       F.FREE "FREE (MB)",

       TO_CHAR(ROUND(FREE * 100 / TOTAL, 2), '990.00') "FREE%", 

       TO_CHAR(ROUND((TOTAL - FREE) * 100 / TOTAL, 2), '990.00') "USED%",    

       ROUND(MAXSIZES, 2) "MAX (MB)"

  FROM (SELECT TABLESPACE_NAME,          

               COUNT(FILE_ID) FILENUM,        

               SUM(BYTES / (1024 * 1024)) TOTAL,          

               SUM(MAXBYTES) / 1024 / 1024 MAXSIZES      

          FROM DBA_DATA_FILES       

         GROUP BY TABLESPACE_NAME) A,     

       (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / (1024 * 1024))) FREE     

          FROM DBA_FREE_SPACE      

         GROUP BY TABLESPACE_NAME) F

 WHERE A.TABLESPACE_NAME = F.TABLESPACE_NAME

5.查看数据文件的实际使用情况:

SELECT CEIL(MAX_BLOCK * BLOCK_SIZE / 1024)

  FROM (SELECT MAX(BLOCK_ID) MAX_BLOCK

          FROM DBA_EXTENTS

         WHERE FILE_ID IN (SELECT FILE_ID

                             FROM DBA_DATA_FILES D

                            WHERE D.TABLESPACE_NAME = 'USERS')) M,

       (SELECT VALUE / 1024 BLOCK_SIZE

          FROM V$PARAMETER

         WHERE NAME = 'db_block_size') B

一、创建一个有十万条记录的测试表jk_test ,查看其所占空间大小3873M

delete jk_test。再次查看大小不会变,此时执行select * from jk_test会发现速度超极慢,查询结果却是空,查看其COST,发现是10万多。很难理解吧,其实是其所占空间没有释放的缘故。

执行alter table jk_test move 或 alter table jk_test move storage(initial 64k)

或alter table jk_test deallocate unused或 alter table jk_test shrink space.

注意:因为alter table jk_test move 是通过消除行迁移,清除空间碎片,删除空闲空间,实现缩小所占的空间,但会导致此表上的索引无效(因为ROWID变了,无法找到),所以执行 move 就需要重建索引。

找到表对应的索引。

select index_name,table_name,tablespace_name,index_type,status  from dba_indexes  where table_owner='SCOTT' ;

根据status 的值,重建无效的就行了。

sql='alter index '||index_name||' rebuild'; 使用存储过程执行,稍微安慰。

还要注意alter table move过程中会产生锁,应该避免在业务高峰期操作!

再次查看其所占空间大小,发现已经很小了,再一次执行查询,很快了吧。

另外说明:truncate table jk_test 会执行的更快,而且其所占的空间也会释放,我想应该是truncate 语句执行后是不会进入oracle回收站(recylebin)的缘故。如果drop 一个表加上purge 也不会进回收站(在此里面的数据可以通过flashback找回)。

不管是delete还是truncate 相应数据文件的大小并不会改变,如果想改变数据文件所占空间大小可执行如下语句:alter database datafile 'filename' resize 8g重定义数据文件的大小(不能小于该数据文件已用空间的大小)。

另补充一些PURGE知识

Purge操作:

1). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin

2). Purge tablespace tablespace_name user user_name: 清空指定表空间的Recycle Bin中指定用户的对象

3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象

4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限

5). Drop table table_name purge:  删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。

6). Purge index recycle_bin_object_name: 当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。 因为索引是可以重建的。

二、如果某些表占用了数据文件的最后一些块,则需要先将该表导出或移动到其他的表空间中,然后删除表,再进行收缩。不过如果是移动到其他的表空间,需要重建其索引。

 

1)SQL> alter table t_obj move tablespace t_tbs1;   ---移动表到其它表空间

 

也可以直接使用exp和imp来进行

 

2)SQL>alter owner.index_name rebuild;     --重建索引

 

3)删除原来的表空间

三:对表分析之后也可以优化(本人没有试过)

analyze table ysgl_compile_reqsub 

compute statistics for all indexes; 

也要看情况,不是什么情况都可以优化,等下次有机会再测试一下。

 

分享到:
评论

相关推荐

    查询表空间占用、记录条数、表归属用户信息,并举例截除过期数据释放表空间,Oracle适用

    --本文档为标准SQL代码,Oracle下适用,其他数据库如SQLserver,PGsql等不适用 1、当前登录用户,所有表占用表空间情况,提供合计 ...4、举例说明:应用表收缩及转储形式,截除过期数据,释放表空间;——可用于生产库

    表数据已经删除,但是表空间不能释放的情况.txt

    oracle表数据已经删除,但是表空间不能释放的情况;支持查询单表占用空间大小,释放掉占用的无效空间;支持批量生成释放脚本,释放掉空表占用的表空间;

    一个释放临时表空间实例

    重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。 网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到...

    Oracle自学(学习)材料 (共18章 偏理论一点)

    改变和 UNDO 表空间 10-12 自动回滚管理:转换 UNDO 表空间 10-13 自动回滚管理:删除一个 UNDO 表空间 10-14 自动回滚管理:其它参数 10-15 回滚数据的状态 10-16 自动回滚管理:调整 UNDO 表空间大小 10-17 自动...

    oracle日常知识

    涉及到日常操作oracle知识,例如建表,查看表空间大小,查询表空间以及使用率,oracle查询锁和释放锁

    Oracle数据库管理员技术指南

    1.7.1 创建表空间 1.7.2 执行数据字典配置脚本 1.7.3 建立另外的回退段 1.7.4 修改 SYSTEM 用户的缺省和临时 表空间 1.7.5 更改 SYS 和 SYSTEM 的缺省 口令 1.7.6 建立其他用户和模式对象 1.7.7 启用归档...

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

    交换空间大小:3.25GB 硬盘空间:10GB  安装 1. 安装程序成功下载,将会得到如下2个文件: 解压文件将得到database文件夹,文件组织如下: 点击setup.exe执行安装程序,开始安装。 2. 点击安装程序将会出现...

    ORACLE9i_优化设计与系统调整

    §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1 数据文件 26 §1.2.2 控制文件 26 §1.2.3 重做日志文件 26 §1.2.4 其它支持文件 26 §1.3 数据块、区间和段 28 §...

    最全的oracle常用命令大全.txt

    2、查看表空间物理文件的名称及大小 select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; 3、查看回滚段名称及大小 ...

    收获不知Oracle

    3.2.7.2 表空间大小与自动扩展105 3.2.7.3 回滚表空间新建与切换109 3.2.7.4 临时表空间新建与切换111 3.2.7.5 临时表空间组及其妙用114 3.3 课程结束你给程序安上了翅膀 117 3.3.1 过度扩展与性能 117 3.3.2 ...

    Oracle8i_9i数据库基础

    §3.3.6 将表移动到新的数据段或新的表空间 102 §3.3.7 手工分配表的存储空间 104 §3.3.8 标记不使用的列和删除不使用的列 104 §3.3 主键 106 §3.3.1 创建主键 106 §3.3.2 改变主键 109 §3.3.3 删除主键 109 ...

    深入解析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...

    oracle数据库经典题目

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

    深入解析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成因...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    ORACLE数据库物理分布设计.doc

    下面我就以Oracle为例从优化操作系统、磁盘布局优化和配置、数据库初始化 参数的选择、设置和管理内存、设置和管理CPU、设置和管理表空 间、设置和管理回滚段、设置和管理联机重做日志、设置和管理归档重做日志、...

    Toad 使用快速入门

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

Global site tag (gtag.js) - Google Analytics