Oracle OCP(48):UNDO TABLESPACE

Ryan_Bai發表於2019-05-09

一、官檔

  • 11g:BOOK → SQL Language Reference → 16 SQL Statements: CREATE SYNONYM to CREATE TRIGGER → CREATE TABLESPACE

二、基本語法

CREATE [BIGFILE|SMALLFILE] UNDO TABLESPACE
[資料檔案語句]
[範圍管理語句]
[一致性保護]

三、資料檔案大小

  • 資料檔案的路徑名:DATAFILE datefile_spec1 [,datefile_spec2] ...

  • 檔案的初始大小:[SIZE INTEGER [K|M|G|T|P|E]]

  • 重用:[REUSE]

  • 表明是否自動擴充套件:[AUTOEXTEND]

    • 不自動擴充套件:OFF

    • 自動擴充套件:ON

      • 表示資料檔案滿了以後,擴充套件的大小:[NEXT INTEGER [K|M|G|T|P|E]]

      • 最大擴充套件到:[MAXSIZE ]

        • 表示無限的表空間:[UNLIMITED]

        • 表示資料檔案的最大大小:INTEGER [K|M|G|T|P|E]]

四、範圍管理語句

說明了表空間如何管理範圍。一旦你宣告瞭這個子句,只能通過移植的方式改變這些引數。

  • 如果希望表空間本地管理的話,宣告local選項,本地管理表空間是通過點陣圖管理的

    EXTENT MANAGEMENT LOCAL

    • 說明表空間自動分配範圍,使用者不能指定範圍的大小。只有9.0以上的版本具有這個功能。

      AUTOALLOCATE

    • uniform說明表空間的範圍的固定大小,預設是1m。

      UNIFORM [SIZE INTEGER [K|M|G|T|P|E]]

  • 如果沒有設定extent_management_clause,oracle會給他設定一個預設值。

    • compatible小於9.0.0:如果初始化引數,那麼系統建立字典管理表空間。

    • compatible大於9.0.0:

      那麼按照如下設定

      • 如果沒有指定 default storage_clause,oracle建立一個自動分配的本地管理表空間。

      • 如果指定 default storage_clause

        • 如果指定了mininum extent,那麼oracle判斷mininum extent 、initial、next是否相等,以及pctincrease是否=0.

          • 如果滿足以上的條件,oracle建立一個本地管理表空間,extent size是initial。

          • 如果不滿足以上條件,那麼oracle將建立一個自動分配的本地管理表空間。

        • 如果沒有指定mininum extent。initial、那麼oracle判斷next是否相等,以及pctincrease是否=0。

          • 如果滿足oracle建立一個本地管理表空間並指定uniform。

          • 否則oracle將建立一個自動分配的本地管理表空間。

注意:本地管理表空間只能儲存永久物件。如果你宣告瞭local,將不能宣告default storage_clause,mininum extent、temporary.

五、一致性保護

如果你傾向於保證資料一致性,也就是專注於查詢,那麼你有必要通過ALTER TABLESPACE undotbs1 RETENTION GUARANTEE,來保證一致性,也就是不管你空間夠不夠用,你都不可以使用inactive狀態的區,這樣就有可能導致由於沒有可用的undo空間而導致資料庫hang住,但是這樣你可以保證查詢語句執行時間在  undo_retention值之內的所有查詢的一致性。

  • RETENTION

    • GUARANTEE:

    • NOGUARANTEE:

六、常用語句

CREATE UNDO TABLESPACE UNDOTBS1
DATAFILE '+ARCHDG1' SIZE 30G
EXTENT MANAGEMENT LOCAL;

七、UNDO使用情況

SELECT TABLESPACE_NAME,
       SUM(ACTIVE_MB) ACTIVE_MB,
       SUM(UNEXPIRED_MB) UNEXPIRED_MB,
       SUM(EXPIRED_MB) EXPIRED_MB
  FROM (SELECT TABLESPACE_NAME,
               DECODE(STATUS, 'ACTIVE', SIZE_MB) ACTIVE_MB,
               DECODE(STATUS, 'UNEXPIRED', SIZE_MB) UNEXPIRED_MB,
               DECODE(STATUS, 'EXPIRED', SIZE_MB) EXPIRED_MB
          FROM (SELECT TABLESPACE_NAME,
                       (SUM(BLOCKS) * 8) / 1024 SIZE_MB,
                       STATUS
                  FROM DBA_UNDO_EXTENTS
                 GROUP BY TABLESPACE_NAME, STATUS))
 GROUP BY TABLESPACE_NAME
 ORDER BY TABLESPACE_NAME;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2643760/,如需轉載,請註明出處,否則將追究法律責任。

相關文章