http://blog.itpub.net/29345367/viewspace-1816427/

方法一:

在实际的应用中经常会遇到TRUNCATE或者DELETE表中的数据后发现表空间并没有将空间进行释放,磁盘空间被告占用感觉空间白白被浪费掉了。

通过下面的SQL语句查看表空间总大小及实用大小,然后拼出来一个SQL语句将表空间的数据文件重新设定大小
select 'alter database datafile ''' || a.file_name || ''' resize ' ||
round(a.filesize - (a.filesize - c.hwmsize - 100) * 0.8) || 'M;',
a.filesize || 'M' as "数据文件的总大小",
c.hwmsize || 'M' as "数据文件的实用大小"
from (select file_id, file_name, round(bytes / 1024 / 1024) as filesize
from dba_data_files) a,
(select file_id, round(max(block_id) * 8 / 1024) as HWMsize
from dba_extents
group by file_id) c
where a.file_id = c.file_id
and a.filesize - c.hwmsize > 100;

上面的那个SQL语句运行可能是有点慢下面的语句更快:

注意:对于此SQL语句由于dba_free_space这个视图在统计空闲空间时没有考虑表空间中的数据文件自动扩展时产生的可使用空间。同时,对于分配给行的空间,在删除行以后,仍可继续用于表的插入操作,但不将其作为可用于其他数据库对象的空间算入下面SQL查询结果中,但是对于截取表时,该空间就可用于其他的数据库对象。如果不考虑数据文件扩展的情况下用此SQL语句基本上可以满足要求了,如果要很精确的话可以考虑上面SQL语句就是太慢了点。
select a.tablespace_name,
a.file_name,
a.totalsize,
b.freesize,
'ALTER DATABASE DATAFILE ''' || a.file_name || ''' RESIZE ' ||
round((a.totalsize - b.freesize) + 200) || 'M;' as "alter datafile"
from (select a.file_name,
a.file_id,
a.tablespace_name,
a.bytes / 1024 / 1024 as totalsize
from dba_data_files a) a,
(select b.tablespace_name,
b.file_id,
sum(b.bytes / 1024 / 1024) as freesize
from dba_free_space b
group by b.tablespace_name, b.file_id) b
where a.file_id = b.file_id
and b.freesize > 100
and a.tablespace_name not like 'UNDO%'

从网上查了一个关于回收表空间的语句:

alter tablespace TABLESPACENAME coalesce

此语句是整合表空间的碎片增加表空间的连续性,但是他不会收缩一个文件的大小的。

回收某个表使用空间的步骤:

(1)、选择某个表空间中超过N个blocks的segments,通过此语句可以看出那个表占用的空间大。

select segment_name,segment_type,blocks from dba_segments

where tablespace_name='TABLESPACENAME'

and blocks > N

order by blocks;

(2)、分析表,得知表的一些信息

analyze table TABLENAME estimate statistics;

执行完后再执行

select initial_extent,next_extent,min_extents,blocks,empty_blocks from dba_tables

where table_name='HISHOLDSINFO' and owner='hs_his';

(3)、使用alter table ... deallocate unused 命令回收表的空间

例如: alter table hs_his.HISHOLDSINFO' deallocate unused keep 1k;

方法二:
oracle database用一段时间以后,硬盘空间会不够,更甚者硬盘会used 100%。(oracle表空间设置为自动扩展)。此时oracle会出现各种莫名其妙的错误,为保持oracle数据库的稳定,我们需要实时查看硬盘空间。 那么怎样缩小一些不用的表空间,以释放硬盘空间?

  oracle常用的此类命令Alter database datafile(tempfile),当然也可从toad等UI工具去操作。

  ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 1229M;

    如果盲目去操作,oracle会报ora-03297错误。表示在所定义的空间之后有数据存在,不能收缩。我们不得不查出最后的数据所处的位置, 然后表空间设置到稍比这位置大一点的大小。

  1. 查该数据文件中数据处在最大位置

    select max(block_id) from dba_extents where file_id=15;< /FONT>

      max(block_id)

        383497

    查询file_id,也可在toad工具tablespace直接看到。

    select file#,name from v$datafile;

  2. 查出最大块位置

    select 383497*8/1024 from dual;

      2996.0703125

    这说明该文件中最大使用块位于2996M与3000M之间,

  3. 修改表空间(也可用toad工具界面修改)

    ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 3000M;

 
 

ORACLE 收缩表空间的数据文件的更多相关文章

  1. Oracle数据库表空间与数据文件的关系描述正确的是( )

    Oracle数据库表空间与数据文件的关系描述正确的是( ) A.一个表空间只能对应一个数据文件 B.一个表空间可以对应多个数据文件 C.一个数据文件可以对应多个表空间 D.表空间与数据文件没任何对应关 ...

  2. Oracle的表空间和数据文件

    一. 概念 表空间:是一个或多个数据文件的逻辑集合 表空间逻辑存储对象: 永久段-->如表与索引 临时段-->如临时表数据与排序段 回滚段-->用于事物回滚或闪回内存的撤销数据 表空 ...

  3. oracle维护表空间和数据文件

    1:重要参考 wiki 2: oracle doc 表空间参考 3:来自dba-oracle的参考 26,27,28,29 一:oracle 表空间概念 表空间是联系数据库的物理磁盘(数据文件)和逻辑 ...

  4. ORACLE - 管理表空间和数据文件

    ORACLE表空间是一个逻辑分区,一个数据文件只能属于一个表空间,一个表空间可以拥有多个数据文件. 一般情况下,如果一个实例分配给多个应用使用,需要创建不同的表空间,每个用户使用自己的表空间. 一.表 ...

  5. Oracle管理表空间和数据文件详解

    介绍 表空间是数据库的逻辑组成部分 从物理上将:数据库数据存放在数据文件中 从逻辑上将:数据库则是存放在表空间中 表空间由一个或是多个数据文件组成 数据库的逻辑结构 介绍: Oracle中逻辑结构包括 ...

  6. Oracle 为表空间增加数据文件

    dba权限检查下 select tablespace_name, file_id, file_name, ),) total_space from dba_data_files order by ta ...

  7. Oracle的表空间、数据文件、用户

          每一个Oracle数据库都是由三种类型的文件组成:数据文件(Data File).日志文件(Log File)和控制文件(Control File).数据库的文件为数据库信息提供真正的物理 ...

  8. oracle 删除表空间及数据文件方法

    oracle 11g版本,创建数据库表空间,默认单个数据文件最大为32G,如果数据文件大于32G,可以增加数据文件. --删除空的表空间,但是不包含物理文件 drop tablespace table ...

  9. oracle查看表空间下数据文件

    下面两个数据字典视图就知道了.查看有哪些表空间:select * from dba_tablespaces;查看有哪些数据文件在哪个表空间中:select * from dba_data_files; ...

随机推荐

  1. ModelForm基本使用

    介绍 Django提供Form和ModelForm两种表单验证方式.相比较Form,ModelForm可以直接与与数据库表相关联,不需要像Form那样需要手动逐一字段添加表单验证的字段.且可以随意选择 ...

  2. BP神经网络反向传播之计算过程分解(详细版)

    摘要:本文先从梯度下降法的理论推导开始,说明梯度下降法为什么能够求得函数的局部极小值.通过两个小例子,说明梯度下降法求解极限值实现过程.在通过分解BP神经网络,详细说明梯度下降法在神经网络的运算过程, ...

  3. LDAP分布式数据库的介绍和安装使用

     目录服务 目录是一个为查询.浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样.目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没 ...

  4. Spring MVC-学习笔记(1)认识spring mvc

    1.基于XML Schema.Controller接口的spring mvc简单例子 1>创建一个动态Web项目,选择同时创建web.xml文件 2>在WEB-INF/lib中粘贴spri ...

  5. 使用 js 修饰器封装 axios

    修饰器 修饰器是一个 JavaScript 函数(建议是纯函数),它用于修改类属性/方法或类本身.修饰器提案正处于第二阶段,我们可以使用 babel-plugin-transform-decorato ...

  6. Angular ngTemplateOutlet

    虽然我们可以通过使用 ViewContainerRef 将 ElementRef创建的视图插入指定的位置,但是仍然希望有某中快捷的方式帮我们实现. ngTemplateOutlet与ngCompone ...

  7. python的cls,self,classmethod,staticmethod

    python类里会出现这三个单词,self和cls都可以用别的单词代替,类的方法有三种, 一是通过def定义的 普通的一般的,需要至少传递一个参数,一般用self,这样的方法必须通过一个类的实例去访问 ...

  8. CSS制作垂直口风琴2

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 使用Kafka的一些简单介绍: 1集群 2原理 3 术语

    目录 第一节 Kafka 集群 Kafka 集群搭建 Kafka 集群快速搭建 第二节 集群管理工具 集群管理工具 集群 Issues 第三节 使用命令操纵集群 第四节 Kafka 术语说明 第五节 ...

  10. spark cli

    Spark SQL CLI Spark1.1增加了Spark SQL CLI和ThriftServer SparkSQL CLI配置 1.创建并配置hive-site.xml 在运行Spark SQL ...