最近有网友提到收缩Oracle数据文件的问题,这是DBA经常碰到的一个常见问题。通常我们需要收缩相应的数据文件以减少来自磁盘空间的压力以及提高数据库的整体性能。但这并非对于所有情形都是适用的,尤其是生产环境。因为生产环境数据清洗相当较少,因此空间浪费也比较小,而且一旦收缩之后又要重新自动扩展数据文件,浪费系统资源。对于UAT,DEV环境,多DB,磁盘空间压力大的情形,收缩一下非常有必要。勒紧裤带过日子也是常有的事情,哈哈。总之收缩数据文件会使得磁盘空间得以释放以及加快数据迁移,RMAN备份等。本文分享了Tom大师的收缩脚本以及给出了undo,临时表空间,表段收缩的链接。

几种收缩的情形:
          收缩表段(shrink space) 
          收缩临时表空间 
          收缩undo表空间

1、演示收缩数据文件

  1. robin@ORADB:~/dba_scripts/custom/sql> sql
  2. SQL*Plus: Release 10.2.0.3.0 - Production on Wed Oct 30 15:05:18 2013
  3. Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.
  4. Connected to:
  5. Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
  6. goex_admin@USBOTST> @shrink_data_files;
  7. VALUE
  8. --------------------
  9. 8192
  10. Smallest
  11. Size  Current    Poss.
  12. FILE_NAME                                             Poss.     Size  Savings
  13. -------------------------------------------------- -------- -------- --------
  14. /u02/database/USBOTST/oradata/sysUSBOTST.dbf            605      650       45
  15. /u02/database/USBOTST/oradata/USBOTST_archive_idx.      725    1,871    1,146
  16. dbf
  17. /u02/database/USBOTST/oradata/USBOTST_his_idx.dbf         1       32       31
  18. /u02/database/USBOTST/oradata/USBOTST_ipo_idx.dbf         7       10        3
  19. /u02/database/USBOTST/oradata/USBOTST_account_tbl.    6,293    6,293        0
  20. dbf
  21. /u02/database/USBOTST/oradata/USBOTST_rpt_tbl.dbf        21      373      352
  22. /u02/database/USBOTST/oradata/USBOTST_audit_tbl.db      938      966       28
  23. f
  24. /u02/database/USBOTST/oradata/tbs_rman01.dbf             13       50       37
  25. /u02/database/USBOTST/undo/undotbsUSBOTST.dbf           358    7,350    6,992
  26. /u02/database/USBOTST/oradata/USBOTST_archive_tbl.      760    1,950    1,190
  27. dbf
  28. /u02/database/USBOTST/oradata/USBOTST_rpt_idx.dbf        10      359      349
  29. /u02/database/USBOTST/oradata/USBOTST_vou_tbl.dbf         4      145      141
  30. /u02/database/USBOTST/oradata/USBOTST_stock_l_tbl.        4       20       16
  31. dbf
  32. /u02/database/USBOTST/oradata/USBOTST_ca_idx.dbf          1       22       21
  33. /u02/database/USBOTST/oradata/USBOTST_his_tbl.dbf         1      959      958
  34. /u02/database/USBOTST/oradata/USBOTST_vou_idx.dbf         2       90       88
  35. /u02/database/USBOTST/oradata/sysauxUSBOTST.dbf         697      800      103
  36. /u02/database/USBOTST/oradata/spot_data.dbf              81       95       14
  37. /u02/database/USBOTST/oradata/USBOTST_tx_tbl.dbf         16      103       87
  38. /u02/database/USBOTST/oradata/USBOTST_tx_his_tbl.d       88      878      790
  39. bf
  40. /u02/database/USBOTST/oradata/USBOTST_ca_tbl.dbf          1       60       59
  41. /u02/database/USBOTST/oradata/USBOTST_imp_exp_tbl.       60      108       48
  42. dbf
  43. .........................................................................
  44. --------
  45. sum                                                                    29,686  -->可被释放的总空间
  46. 44 rows selected.
  47. Database altered.
  48. Database altered.
  49. Database altered.
  50. Database altered.
  51. alter database datafile '/u02/database/USBOTST/oradata/USBOTST_ipo_idx.dbf'
  52. *
  53. ERROR at line 1:
  54. ORA-03297: file contains used data beyond requested RESIZE value
  55. ---> Author : Leshami        --->Blog : http://blog.csdn.net/leshami
  56. ...........................................
  57. --可能存在个别文件出现无法收缩的情形,提示超出最小的size。

2、收缩脚本

  1. --此脚本可用于Oracle 10g,11g
  2. robin@ORADB:~/dba_scripts/custom/sql> more shrink_data_files.sql
  3. set verify off
  4. col value format a20
  5. column file_name format a50 word_wrapped
  6. column smallest format 999,990 heading "Smallest|Size|Poss."
  7. column currsize format 999,990 heading "Current|Size"
  8. column savings format 999,990 heading "Poss.|Savings"
  9. break on report
  10. compute sum of savings on report
  11. column value new_val blksize
  12. select value from v$parameter where name = 'db_block_size'
  13. /
  14. select file_name,
  15. ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
  16. ceil( blocks*&&blksize/1024/1024) currsize,
  17. ceil( blocks*&&blksize/1024/1024) -
  18. ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
  19. from dba_data_files a,
  20. ( select file_id, max(block_id+blocks-1) hwm
  21. from dba_extents
  22. group by file_id ) b
  23. where a.file_id = b.file_id(+)
  24. /
  25. column cmd format a75 word_wrapped
  26. set heading off feedback off termout off
  27. spool /tmp/tmp_shrink_data_files.sql
  28. select 'alter database datafile '''||file_name||''' resize ' ||
  29. ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd
  30. from dba_data_files a,
  31. ( select file_id, max(block_id+blocks-1) hwm
  32. from dba_extents
  33. group by file_id ) b
  34. where a.file_id = b.file_id(+)
  35. and ceil( blocks*&&blksize/1024/1024) -
  36. ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
  37. /
  38. spool off;
  39. set heading on feedback on termout on
  40. @/tmp/tmp_shrink_data_files.sql
 
转:http://blog.csdn.net/leshami/article/details/13628463

收缩Oracle数据文件的更多相关文章

  1. Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据

    Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据 PRM 全称为ParnassusData Recovery Manager ,由 诗檀软 ...

  2. oracle数据文件不小心被删除,导致对应的表空间删不掉的处理方法

    问题现象:数据文件被无意删除,导致数据库表空间无法删除,并且重新刷表空间提示表空间已经存在:解决方法:1.oracle用户登录服务器,使用sysdba连接数据库 >sqlplus / as sy ...

  3. Oracle数据文件在open状态被删除的恢复记录

    1.查看当前状态: SQL> select status from v$instance; STATUS------------OPEN SQL> show parameter name; ...

  4. 批量迁移Oracle数据文件,日志文件及控制文件

    有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求.对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移.当 ...

  5. 数据文件个数大于1024时ORACLE数据文件FILE_ID及RELATIVE_FNO的变化示例

    通过ROWID计算数据块的相关信息:  --详见: 数据文件头块保留大小.ROWID.数据文件最大大小等数据库限制的说明 根据small file tablespace的ROWID,计算出表空间.数据 ...

  6. Oracle 数据文件 reuse 属性 说明(转载)

    Oracle 表空间 创建参数 说明 http://blog.csdn.net/tianlesoftware/archive/2011/01/27/6166928.aspx 当我们对表空间添加数据文件 ...

  7. Oracle 数据文件迁移

    背景 这两天做一个oracle数据库迁移,以前都是用exp.imp来走,这次用到了expdp.impdp,的确有些优势,但同时又想起了只是拷贝数据文件迁移的方式,其实这个方式不常用做迁移,更多用在磁盘 ...

  8. oracle数据文件迁移

    这篇文章是从网络上获取的,然后根据内容一步步操作, 1.目前的疑问:移动日志文件的时候,为何要先进行切换? 2.move操作后,再进行rename操作的原理 --------------------- ...

  9. Oracle数据文件迁移到裸设备

    本文主要描述如何将Oracle表空间的文件系统形式的数据文件迁移到LV裸设备上. 前提条件 1.oracle运行正常. 2.已使用LVM命令规划好LV文件.如/dev/vgoracle/lvdatat ...

随机推荐

  1. 机器学习之逻辑回归(Logistic Regression)

    1. Classification 这篇文章我们来讨论分类问题(classification problems),也就是说你想预测的变量 y 是一个离散的值.我们会使用逻辑回归算法来解决分类问题. 之 ...

  2. Linux 删除文件夹和文件的命令

    linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就 ...

  3. hadoop疑难杂症解析

    1:Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-outAnswer:程序里面需要打开多个文件,进行分析,系统一般默认数量是10 ...

  4. CentOS安装Chrome

    问题 在CentOS安装Chrome会遇到 libstdc++.so.6(GLIBCXX_3.4.15)(64bit) 依赖失败的问题, 即使下载了最新的libstdc++.so.6(包含GLIBCX ...

  5. BigDecimal进行除法divide运算注意事项

     Java编程中  BigDecimal进行除法divide运算时,如果结果不整除,出现无限循环小数.则会抛出以下异常: java.lang.ArithmeticException: Non-term ...

  6. Android APP安全评估工具 Drozer - 安装介绍

    一.Drozedr安装 注意事项:安装需要 JavaRuntime Environment (JRE) or Java Development Kit (JDK)环境, 没有安装的请先安装java环境 ...

  7. 机器人学 —— 机器人感知(Gaussian Model)

    机器人感知是UPNN机器人专项中的最后一门课程,其利用视觉方法来对环境进行感知.与之前提到的机器人视觉不同,机器人感知更侧重于对环境物体的识别与检测.与计算机视觉不同,机器人视觉所识别的物体往往不需要 ...

  8. php mysql_insert_id()

    mysql_insert_id mysql_insert_id()返回给定的 link_identifier中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号.如果没有指 ...

  9. 监听Activity进入后台(最小化),并根据时间判断是否超时,此解决办法可用于超时重登陆

    通过重写一个继承自Activity的基类中的onUserLeaveHint()方法,当用户按Home键等操作使程序进入后台时即开始计时,当用户使程序恢复为前台显示时执行onResume()方法,在其中 ...

  10. ubuntu搭建svn、git遇到的问题及解决办法

    不错的git笔记博客: http://www.cnblogs.com/wanqieddy/category/406859.html http://blog.csdn.net/zxncvb/articl ...