每一中資料庫都需要有一種管理回滾或者撤銷資料的方法。當一個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_RETENTION=1800 設定保留時間為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語句允許繼續執行
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/seagal890/archive/2008/10/09/3044226.aspx