收缩Oracle数据文件

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

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

1、演示收缩数据文件

[sql] view plain copy

print?

  1. [email protected]:~/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. [email protected]> @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、收缩脚本

[sql] view plain copy

print?

  1. --此脚本可用于Oracle 10g,11g
  2. [email protected]:~/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

时间: 2024-11-12 13:31:31

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

第13章 oracle 数据文件

2015-10-23 目录 参考资料 [1] 林树泽.Oracle 11g R2 DBA操作指南[M].北京:清华大学出版社,2013 [2] oracle 数据文件管理 [3] 数据文件管理—oracle管理指南 [4] Oracle控制文件.数据文件.临时文件总结笔记 [5] 修改oracle数据文件大小 [6] Oracle删除数据文件 [7] oracle数据文件迁移 [8] Oracle 数据库/表空间/数据文件之间的关系 [9] Oracle数据文件和临时文件的管理

Oracle数据文件物理删除后的恢复

做系统管理的都是这样,难免会误删文件,某天要是把某个Oracle数据文件删除,那该如何恢复呢?(这里数据库是OPEN的,并且未关闭) 建立测试表空间 创建测试用户 插入测试数据 删除数据文件 恢复数据库文件 建立测试表空间 SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /opt/oracle/oradat

曲演杂坛--收缩数据库数据文件

--===================================================================== 部分朋友在遇到收缩数据库文件的时候遇到一些困难,发现明明有大量剩余空间或删除了大量数据,还是无法收缩数据库,这是为啥子呢? --==================================================================== 要收缩数据库文件,首先我们需要确定有多少空间可以收缩,由于收缩文件是按照Extent来收缩

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

PRM 全称为ParnassusData Recovery Manager ,由 诗檀软件自主研发,拥有独立的软件著作权. PRM可以独立于Oracle软件运行,直接从Oracle数据文件中抽取表上的数据. 当以下几种场景中,都可以用上PRM: 无备份或者备份不可用情况下,数据表被意外truncate掉或者DROP掉 由于数据库损坏,导致的数据打不开 无法OPEN 数据块存在损坏,Oracle无法读取出数据 数据文件存在损坏,或者数据文件头信息不一致 等等 以上这些问题中,用户均可以考虑使用PR

Oracle 数据文件误删除的不完全恢复

应用环境: 我的一个表被人不小心误删除了,这时候,我不可以把整个库都恢复回去,那样太麻烦了. 所以现在我就从新到一个新库,只将这一个数据文件拷贝过来恢复. 那我们Oracle在恢复文件的时候是不可以只恢复一部分数据文件的,因为oracle  要保证数据文件块头信息一致,所以如果我们要恢复部分文件的话,就得采取以下这种方法: 可以另起一个库,再把要恢复的数据文件拷贝过来,恢复.(当然不单单是该数据文件,还要包括system表空间,undo表空间) 1)另起一个库很简单,可以搞出参数文件,在参数文件

在线移动oracle 数据文件位置

    在线移动oracle 数据文件 Oracle数据文件可以在数据库OPEN的时候被重命名或移动,但此时表空间必须为只读,这将允许用户从表中查询,但禁止他们这样做的插入,更新和删除,在表空间至于只读状态的时候,冻结数据文件块头.阻止更新数据文件块头,此时才能在线拷贝数据文件 <注:system表空间除外,system 表空间无法offline> 本测试以TEST表空间为例 SQL> select * from v$version; BANNER -------------------

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

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

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

有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求.对于这种情形可以采取批量迁移的方式将多个数据文件或者日志文件实现一次性迁移.当然备份恢复也是其中的方式之一.本文主要描述如何使用批量方式来迁移数据文件,日志文件.如需要也可以将整个数据库迁移到新的位置以及重命名数据库. [sql] view plain copy print? 1.环境及需求 [email protected]:~> cat /etc/issue Welcom

Oracle数据文件和临时文件的管理

一.数据文件概述在Oracle数据库中,SYSTEM和SYSAUX表空间至少需要包含一个数据文件,此外还将包含多个其他表空间及与其相关的数据文件和临时文件.Oracle的数据文件和临时文件是操作系统文件,属于数据库物理结构范畴,用于存储数据库中的逻辑结构的数据.在创建表空间时,必须明确的为每个表空间指定数据文件. Oracle通过两种方式为文件分配编号:绝对文件号,用于唯一标识数据库中的数据文件,绝对文件号可以通过v$datafile或v$tempfile视图的FILE#列查询,也可以通过DBA