当前位置:  数据库>oracle

Oracle 10g数据文件的收缩与数据对象跨表空间的迁移

    来源: 互联网  发布时间:2017-04-17

    本文导语: 1.Oracle10g数据库文件的收缩:   1.1 问题:     一个数据库里面有上百万条数据,使用Delete语句删除大部分数据后,数据库文件所占空间并不会缩小释放多余的空间。     如使用RESIZE语句对数据文件大小做调整,如下:     >A...

1.Oracle10g数据库文件的收缩:


  1.1 问题:

    一个数据库里面有上百万条数据,使用Delete语句删除大部分数据后,数据库文件所占空间并不会缩小释放多余的空间。

    如使用RESIZE语句对数据文件大小做调整,如下:

    >ALTER DATABASE DATAFILE 'D:/Oracle10g/oradata/ORDB/NEWDB.ORA' RESIZE 100M;

    则会报一个错误:ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据。

    这主要涉及到Oracle的逻辑存储和段空间管理以及数据库块中的数据分布。

    Oralce有一个High Water Mark(高水位线),它表示Oracle对象使用空间最高水位线。

    当插入了数据以后,HWM就会上涨;Delete语句删除数据后,HWH并没有降低。

    HWH数据库块分布在调整范围之外,此时使用RESIZE命令会报错。

 

  1.2 方法:

    网上查到资料说通过Move Tablespace移动表和索引后,可以重置表的HWH,然后再使用Resize就可以缩减数据库文件。
 
    但我在Oracle10g中尝试多次,都没有成功。另外,数据库如果有Long型的字段,是不能使用Move命令的。
 
    好在是Oracle10g,有shrink! :)



    Shrink的语法如下:
 
    --------------------

    alter table shrink space [ | compact | cascade ];
    alter table shrink space compcat;
    说明:收缩表,移动块中数据位置到一起,但 High Water Mark 保持不变

    alter table shrink space;
    说明:收缩表,降低 High Water Mark

    alter table shrink space cascade;
    说明:收缩表,降低 High Water Mark,并且把相关索引也收缩一下。

    alter index idxname shrink space;
    说明:回缩索引

    --------------------

 

  1.3 操作:

    对所有表空间中的所有表执行一次shrink命令,需要根据shrink语法,构造shrink命令。

    此时,为了构建shrink命令,可以使用如下SQL语句来查询表空间数据库文件的File_ID:

    ---------------------

    select * from dba_data_files;

    ---------------------


    另外,在执行shrink前,必须开启数据表的行迁移功能,SQL语句如下:

    ---------------------

    alter table Tbl_Name enable row movement;

    ---------------------
    注意:该SQL语句会造成引用表Tbl_Name的对象(如存储过程、包、视图等)变为无效,后续需要重新编译一次确认是否有效。


    构造shrink命令,建立create_shrink.sql文件,其内容如下:

    -------------------
    set heading off;
    set echo off;
    set feedback off;
    set termout on;
    spool c:/shrink.sql;
    select 'alter table THAMS.'|| table_name || ' enable row movement; ' from user_tables where tablespace_name='THAMS';
    select 'alter table THAMS.'|| table_name || ' shrink space CASCADE;' from user_tables where tablespace_name='THAMS';
    select 'alter index THAMS.'|| segment_name || ' shrink space;' from dba_extents where segment_type='INDEX' and file_id=14;
    spool off;
    -------------------









    以表空间的默认用户THAMS登录数据库,成功执行create_shrink.sql后,得到shrink.sql文件。

    以sys/system身份登录数据库,执行shrink.sql文件后,在OEMC中查看表空间,会发现数据库表空间的“已使用”比例大大下降。
  
    此时,再经过EXP/IMP后,会得到一个占用空间很小的数据库文件。


    
 
 

您可能感兴趣的文章:

  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • ORACLE数据库常用字段数据类型介绍
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • jsp文件上传smartupload到oracle数据库中没有longblob的数据类型如何处理的?
  • 将Oracle 8i数据成功移植Oracle 10g的方法
  • Oracle收购TimesTen 提高数据库软件性能
  • 我从JSP页将数据插入到oracle数据库中,为何汉字插入后数据库中显示为乱码呢?
  • Oracle数据库恢复后心得
  • 紧急求救:对Oracle数据库中long 型数据进行模糊查询 如何查?
  • Linux下Oracle数据库,dbstart持续不动,数据库无法启动解决
  • 卸载oracle数据库
  • Access2000迁移到Oracle9i要点
  • MySQL数据迁移到Oracle记录
  • 解决系统从Oracle到Sybase的迁移
  • oracle 数据库数据迁移解决方案
  • Oracle 10g同字节序跨平台迁移
  • 深入ORACLE迁移到MYSQL的总结分析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • ORACLE日期相关操作
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • Oracle 12c的九大最新技术特性介绍
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE中DBMS_RANDOM随机数生成包
  • Linux系统下Oracle的启动与Oracle监听的启动
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • 网间Oracle的连接,远程连接Oracle服务器??
  • 请教:.profile中:if [ -d /opt/oracle/db01/app/oracle/product/9.2.0 ]是什么意思?
  • 在linux 中如何删除oracle db 与卸载oracle.
  • linux下安装oracle后使用命令行启动的方法 linux启动oracle
  • 如何将Aix上的oracle 物理备份 然后再在linux 系统上还原oracle
  • 那里有免费的oracle odbc driver for linux?或怎么破解easysoft oracle odbc driver安装包?急


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3