收縮Oracle資料檔案
最近有網友提到收縮Oracle資料檔案的問題,這是DBA經常碰到的一個常見問題。通常我們需要收縮相應的資料檔案以減少來自磁碟空間的壓力以及提高資料庫的整體效能。但這並非對於所有情形都是適用的,尤其是生產環境。因為生產環境資料清洗相當較少,因此空間浪費也比較小,而且一旦收縮之後又要重新自動擴充套件資料檔案,浪費系統資源。對於UAT,DEV環境,多DB,磁碟空間壓力大的情形,收縮一下非常有必要。勒緊褲帶過日子也是常有的事情,哈哈。總之收縮資料檔案會使得磁碟空間得以釋放以及加快資料遷移,RMAN備份等。本文分享了Tom大師的收縮指令碼以及給出了undo,臨時表空間,表段收縮的連結。
幾種收縮的情形:
收縮表段(shrink space)
收縮臨時表空間
收縮undo表空間
1、演示收縮資料檔案
- robin@ORADB:~/dba_scripts/custom/sql> sql
- SQL*Plus: Release 10.2.0.3.0 - Production on Wed Oct 30 15:05:18 2013
- Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
- Connected to:
- Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
- goex_admin@USBOTST> @shrink_data_files;
- VALUE
- --------------------
- 8192
- Smallest
- Size Current Poss.
- FILE_NAME Poss. Size Savings
- -------------------------------------------------- -------- -------- --------
- /u02/database/USBOTST/oradata/sysUSBOTST.dbf 605 650 45
- /u02/database/USBOTST/oradata/USBOTST_archive_idx. 725 1,871 1,146
- dbf
- /u02/database/USBOTST/oradata/USBOTST_his_idx.dbf 1 32 31
- /u02/database/USBOTST/oradata/USBOTST_ipo_idx.dbf 7 10 3
- /u02/database/USBOTST/oradata/USBOTST_account_tbl. 6,293 6,293 0
- dbf
- /u02/database/USBOTST/oradata/USBOTST_rpt_tbl.dbf 21 373 352
- /u02/database/USBOTST/oradata/USBOTST_audit_tbl.db 938 966 28
- f
- /u02/database/USBOTST/oradata/tbs_rman01.dbf 13 50 37
- /u02/database/USBOTST/undo/undotbsUSBOTST.dbf 358 7,350 6,992
- /u02/database/USBOTST/oradata/USBOTST_archive_tbl. 760 1,950 1,190
- dbf
- /u02/database/USBOTST/oradata/USBOTST_rpt_idx.dbf 10 359 349
- /u02/database/USBOTST/oradata/USBOTST_vou_tbl.dbf 4 145 141
- /u02/database/USBOTST/oradata/USBOTST_stock_l_tbl. 4 20 16
- dbf
- /u02/database/USBOTST/oradata/USBOTST_ca_idx.dbf 1 22 21
- /u02/database/USBOTST/oradata/USBOTST_his_tbl.dbf 1 959 958
- /u02/database/USBOTST/oradata/USBOTST_vou_idx.dbf 2 90 88
- /u02/database/USBOTST/oradata/sysauxUSBOTST.dbf 697 800 103
- /u02/database/USBOTST/oradata/spot_data.dbf 81 95 14
- /u02/database/USBOTST/oradata/USBOTST_tx_tbl.dbf 16 103 87
- /u02/database/USBOTST/oradata/USBOTST_tx_his_tbl.d 88 878 790
- bf
- /u02/database/USBOTST/oradata/USBOTST_ca_tbl.dbf 1 60 59
- /u02/database/USBOTST/oradata/USBOTST_imp_exp_tbl. 60 108 48
- dbf
- .........................................................................
- --------
- sum 29,686 -->可被釋放的總空間
- 44 rows selected.
- Database altered.
- Database altered.
- Database altered.
- Database altered.
- alter database datafile '/u02/database/USBOTST/oradata/USBOTST_ipo_idx.dbf'
- *
- ERROR at line 1:
- ORA-03297: file contains used data beyond requested RESIZE value
- ---> Author : Leshami --->Blog : http://blog.csdn.net/leshami
- ...........................................
- --可能存在個別檔案出現無法收縮的情形,提示超出最小的size。
2、收縮指令碼
- --此指令碼可用於Oracle 10g,11g
- robin@ORADB:~/dba_scripts/custom/sql> more shrink_data_files.sql
- set verify off
- col value format a20
- column file_name format a50 word_wrapped
- column smallest format 999,990 heading "Smallest|Size|Poss."
- column currsize format 999,990 heading "Current|Size"
- column savings format 999,990 heading "Poss.|Savings"
- break on report
- compute sum of savings on report
- column value new_val blksize
- select value from v$parameter where name = 'db_block_size'
- /
- select file_name,
- ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
- ceil( blocks*&&blksize/1024/1024) currsize,
- ceil( blocks*&&blksize/1024/1024) -
- ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
- from dba_data_files a,
- ( select file_id, max(block_id+blocks-1) hwm
- from dba_extents
- group by file_id ) b
- where a.file_id = b.file_id(+)
- /
- column cmd format a75 word_wrapped
- set heading off feedback off termout off
- spool /tmp/tmp_shrink_data_files.sql
- select 'alter database datafile '''||file_name||''' resize ' ||
- ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd
- from dba_data_files a,
- ( select file_id, max(block_id+blocks-1) hwm
- from dba_extents
- group by file_id ) b
- where a.file_id = b.file_id(+)
- and ceil( blocks*&&blksize/1024/1024) -
- ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
- /
- spool off;
- set heading on feedback on termout on
- @/tmp/tmp_shrink_data_files.sql
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062422/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle案例11——Oracle表空間資料庫檔案收縮Oracle資料庫
- sqlserver收縮資料庫、收縮資料檔案的操作SQLServer資料庫
- 表空間(資料檔案shrink)收縮示例
- Oracle 資料檔案回收Oracle
- SQL語句收縮日誌檔案SQL
- OceanBase 資料檔案縮容實踐
- Linux加密壓縮檔案/資料夾Linux加密
- Oracle資料檔案和臨時檔案的管理Oracle
- oracle資料庫的配置檔案Oracle資料庫
- oracle 線上rename資料檔案Oracle
- 使用libzip壓縮檔案和資料夾
- 修改Oracle資料檔名及資料檔案存放路徑Oracle
- SQL Server收縮資料庫SQLServer資料庫
- sql server 資料庫收縮SQLServer資料庫
- oracle徹底刪除資料檔案Oracle
- oracle uncatalog資料庫備份檔案Oracle資料庫
- Oracle表空間收縮方案Oracle
- sqlserver 資料庫收縮的方法SQLServer資料庫
- oracle dg庫資料檔案空間不足Oracle
- Oracle10g刪除資料檔案Oracle
- 【Oracle】如何修改資料檔案和日誌檔案的路徑Oracle
- Java實現解壓縮檔案和資料夾Java
- oracle11g修改資料檔案路徑Oracle
- oracle 普通表空間資料檔案壞塊Oracle
- oracle 修改資料檔案位置(路徑)(移動)Oracle
- 分析Oracle資料庫日誌檔案(三)EPOracle資料庫
- 分析Oracle資料庫日誌檔案(二)DOOracle資料庫
- 分析Oracle資料庫日誌檔案(一)HBOracle資料庫
- oracle 修改資料檔案路徑(四種方式)Oracle
- java 壓縮(解壓)檔案或者資料夾工具類Java
- 檔案壓縮和解壓縮
- 資料庫自動收縮造成的阻塞資料庫
- Oracle使用RMAN將普通資料檔案轉成ASMOracleASM
- Oracle DG備庫手動管理新增資料檔案Oracle
- 【RESIZE】Oracle收縮表空間主要命令Oracle
- 使用Java API進行tar.gz檔案及資料夾壓縮解壓縮JavaAPI
- Linux 檔案壓縮Linux
- gulp壓縮檔案
- ext4和xfs檔案系統的擴容和收縮