程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 簡介Oracle回滾段空間回收步驟

簡介Oracle回滾段空間回收步驟

編輯:Oracle數據庫基礎

是誰"偷偷的"用了那麼多空間呢(本來有幾十個G的Free磁盤空間的)?

  檢查數據庫表空間占用空間情況:


  SQL> select tablespace_name,sum(bytes)/1024/1024/1024 GB
  2 from dba_data_files group by tablespace_name
  3 union all
  4 select tablespace_name,sum(bytes)/1024/1024/1024 GB
  5 from dba_temp_files group by tablespace_name order by GB;
  TABLESPACE_NAME GB
  ------------------------------ ----------
  USERS .004882813
  UNDOTBS2 .09765625
  SYSTEM .478515625
  SYSAUX .634765625
  WAPCM_TS_VISIT_DETAIL .9765625
  HY_DS_DEFAULT 1
  MINT_TS_DEFAULT 1
  MMS_TS_DATA2 1.375
  MMS_IDX_SJH 2
  MMS_TS_DEFAULT 2
  IVRCN_TS_DATA 2
  TABLESPACE_NAME GB
  ------------------------------ ----------
  MMS_TS_DATA1 2
  CM_TS_DEFAULT 5
  TEMP 20.5498047
  UNDOTBS1 27.1582031
  15 rows selected.

  不幸的發現,UNDO表空間已經擴展至27G,而TEMP表空間也擴展至20G,這2個表空間加起來占用了47G的磁盤空間,導致了空間不足。

  顯然曾經有大事務占用了大量的UNDO表空間和Temp表空間,Oracle的AUM(Auto Undo Management)從出生以來就經常出現只擴展,不收縮(shrink)的情況(通常我們可以設置足夠的UNDO表空間大小,然後取消其自動擴展屬性).

  現在我們可以采用如下步驟回收UNDO空間:

  1.確認文件


  SQL> select file_name,bytes/1024/1024 from dba_data_files
  2 where tablespace_name like 'UNDOTBS1';
  FILE_NAME
  --------------------------------------------------------------------------------
  BYTES/1024/1024
  ---------------
  +ORADG/danaly/datafile/undotbs1.265.600173875
  27810

2.檢查UNDO Segment狀態


  SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
  2 from v$rollstat order by rssize;
  USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
  ---------- ---------- --------------------- ---------------------- ----------
  0 0 .000358582 .000358582 0
  2 0 .071517944 .071517944 0
  3 0 .13722229 .13722229 0
  9 0 .236984253 .236984253 0
  10 0 .625144958 .625144958 0
  5 1 1.22946167 1.22946167 0
  8 0 1.27175903 1.27175903 0
  4 1 1.27895355 1.27895355 0
  7 0 1.56770325 1.56770325 0
  1 0 2.02474976 2.02474976 0
  6 0 2.9671936 2.9671936 0
  11 rows selected.

  3.創建新的UNDO表空間


  SQL> create undo tablespace undotbs2;
  Tablespace created.

  4.切換UNDO表空間為新的UNDO表空間


  SQL> alter system set undo_tablespace=undotbs2 scope=both;
  System altered.

  此處使用spfile需要注意,以前曾經記錄過這樣一個案例:Oracle診斷案例-Spfile案例一則5.等待原UNDO表空間所有UNDO SEGMENT OFFLINE


  SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
  2 from v$rollstat order by rssize;
  USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
  ---------- ---------- --------------- --------------------- ---------------------- ----------
  14 0 ONLINE .000114441 .000114441 0
  19 0 ONLINE .000114441 .000114441 0
  11 0 ONLINE .000114441 .000114441 0
  12 0 ONLINE .000114441 .000114441 0
  13 0 ONLINE .000114441 .000114441 0

20 0 ONLINE .000114441 .000114441 0
  15 1 ONLINE .000114441 .000114441 0
  16 0 ONLINE .000114441 .000114441 0
  17 0 ONLINE .000114441 .000114441 0
  18 0 ONLINE .000114441 .000114441 0
  0 0 ONLINE .000358582 .000358582 0
  USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
  ---------- ---------- --------------- --------------------- ---------------------- ----------
  6 0 PENDING OFFLINE 2.9671936 2.9671936 0
  12 rows selected.

  再看:


  11:32:11 SQL> /
  USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
  ---------- ---------- --------------- --------------------- ---------------------- ----------
  15 1 ONLINE .000114441 .000114441 0
  11 0 ONLINE .000114441 .000114441 0
  12 0 ONLINE .000114441 .000114441 0
  13 0 ONLINE .000114441 .000114441 0
  14 0 ONLINE .000114441 .000114441 0
  20 0 ONLINE .000114441 .000114441 0
  16 0 ONLINE .000114441 .000114441 0
  17 0 ONLINE .000114441 .000114441 0
  18 0 ONLINE .000114441 .000114441 0
  19 0 ONLINE .000114441 .000114441 0
  0 0 ONLINE .000358582 .000358582 0
  11 rows selected.
  Elapsed: 00:00:00.00

  6.刪除原UNDO表空間


  11:34:00 SQL> drop tablespace undotbs1 including contents;
  Tablespace dropped.
  Elapsed: 00:00:03.13

  7.檢查空間情況

  由於我使用的ASM管理,可以使用10gR2提供的信工具asmcmd來察看空間占用情況.


  [oracle@danaly ~]$ export Oracle_SID=+ASM
  [Oracle@danaly ~]$ asmcmd
  ASMCMD> du
  Used_MB Mirror_used_MB
  21625 21625
  ASMCMD> exit

  空間已經釋放。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved