深入理解Oracle10g中UNDO_RETENTION參數的使用

 深入理解Oracle10gUNDO_RETENTION參數的使用

每一中數據庫都需要有一種管理回滾或者撤銷數據的方法。當一個DML發生以後,在用戶還沒有提交(COMMIT)改變,用戶不希望這種改變繼續保持,需要撤銷所做的修改,將數據回退到沒有發生改變以前,這時就需要使用一種被稱爲撤銷記錄的數據。

使用撤銷記錄,我們可以:

1 當使用ROLLBACK語句時回滾事務,撤銷DML操作改變的數據

2 恢復數據庫

3 提供讀取的一致性

4 使用Oracle Flashback Query分析基於先前時間點的數據

5 使用Oracle Flashback特性從邏輯故障中恢復數據庫

Oracle10g中的自動撤銷管理(AUM

Oracle10g中對於回滾段的管理可以通過配置參數而實現自動管理。爲啓用撤銷空間的自動管理,首先必須在init.ora中或者SPFILE文件中指定自動撤銷模式。其次需要創建一個專用的表空間來存放撤銷信息,這保證用戶不會在SYSTEM表空間中保存撤銷信息。此外還需要爲撤銷選擇一個保留時間。

如果需要實現AUM,需要配置以下3個參數:

UNDO_MAMAGEMENT

UNDO_TABLESPACE

UNDO_RETENTION

查看初始化參數的設置:

SQL> show parameter undo_tablespace;

NAME TYPE VALUE

------------------------------------ ----------- -----------------------

undo_tablespace string UNDOTBS1

SQL> show parameter undo_management;

NAME TYPE VALUE

------------------------------------ ----------- -----------------------

undo_management string AUTO

SQL> show parameter undo_retention;

NAME TYPE VALUE

------------------------------------ ----------- -----------------------

undo_retention integer 900

SQL>



初始化參數的描述:

Initialization Parameter

Description

UNDO_MANAGEMENT

If AUTO, use automatic undo management. The default is MANUAL

UNDO_TABLESPACE

An optional dynamic parameter specifying the name of an undo tablespace. This parameter should be used only when the database has multiple undo tablespaces and you want to direct the database instance to use a particular undo tablespace.

UNDO_RETENTION

The UNDO_RETENTION parameter is ignored for a fixed size undo tablespace. The database may overwrite unexpired undo information when tablespace space becomes low.

For an undo tablespace with the AUTOEXTEND option enabled, the database attempts to honor the minimum retention period specified by UNDO_RETENTION. When space is low, instead of overwriting unexpired undo information, the tablespace auto-extends. If the MAXSIZE clause is specified for an auto-extending undo tablespace, when the maximum size is reached, the database may begin to overwrite unexpired undo information.



如果將初始化參數UNDO_MANAGEMENT設置爲AUTO,則Oracle10g將啓用AUM

可以在初始化參數UNDO_RETENTION中設置撤銷保留時間的大小:

UNDO_RETENTION1800 設置保留時間爲30分鐘(1800秒)

UNDO_RETENTION參數默認設置爲900秒。

UNDO_RETENTION的值應該設置爲多少才合理?

不存在理想的UNDO_RETENTION的時間間隔。保留時間間隔依賴於估計最長的事務可能運行的時間長度。根據數據庫中最長事務長度的信息,可以給UNDO_RETENTION分配一個大致的時間。

可以通過v$undostat視圖的maxquerylen列查詢在過去的一段時間內,最長的查詢執行的時間(以秒爲單位)。UNDO_RETENTION參數中的時間設置應該至少與maxquerylen列中給出的時間一樣長。

Oracle提供如下爲新數據庫設置撤銷保留時間間隔的指導:

1 OLTP系統:15分鐘

2 混合: 1小時

3 DSS系統:3小時

4 閃回查詢:24小時

UNDO_RETENTION參數的較高值並不保證撤銷數據保留UNDO_RETENTION參數指定的時間。爲保證撤銷保留指定的時間,必須使用RETENTION GRARANTEE子句。

例如:

CREATE UNDO TABLESPACE UNDOTBS01

DATAFILE

‘E:\oracle\product\10.2.0\oradata\keymen\UNDOTBS01.DBF’

SIZE 500M AUTOEXTEND ON

RETENTION GUARANTEE



也可以使用ALTER DATABASE命令保證數據庫中的撤銷保留

ALTER DATABASE UNDOTBS01 RETENTION GUARANTEE



關閉撤銷信息的保證保留

ALTER DATABASE UNDOTBS01 RETENTION NOGUARANTEE



設置撤銷表空間的尺寸

Oracle建議使用Undo Advisor的幫助下設置撤銷表空間的尺寸。可以創建一個小尺寸(大約500M)的撤銷表空間,AUTOEXTEND數據文件屬性設置爲ON,從而允許表空間自動擴展。此表空間將自動增長以支持數據庫中活動事務數目的增長以及事務長度的增長。

在數據庫運行適當的一段時間後,可以使用UNDO Advisor來得出關於設置撤銷表空間尺寸的建議。應該使用Analysis Time Period字段中允許的最大時間。出於此目的,可以使用OEM UNDO Management頁面中給出的Longest——Runing Query長度。還必須根據閃回需求指定New UNDO Retention字段的值。例如:如果希望表能閃回24小時,應該使用24小時作爲這個字段的值。

假如數據庫中用RETENTION GUARANTEE子句配置了保證保留撤銷。如果撤銷表空間太小不能滿足使用它的所有活動事務,那麼會發生以下情況:

1 如果撤銷表空間用完85%,Oracle將發佈一個自動錶空間警告

2 當撤銷表空間用完97%時,Oracle將發佈一個自動錶空間嚴重警告

3 所有DML語句將不允許,並且會接收到一個空間超出錯誤

4 DDL語句允許繼續執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章