深度理解Oracle10g中UNDO_RETENTION引數的使用
阿新 • • 發佈:2019-01-31
每一中資料庫都需要有一種管理回滾或者撤銷資料的方法。當一個DML發生以後,在使用者還沒有提交(COMMIT)改變,使用者不希望這種改變繼續保持,需要撤銷所做的修改,將資料回退到沒有發生改變以前,這時就需要使用一種被稱為撤銷記錄的資料。
使用撤銷記錄,我們可以:
1、 當使用ROLLBACK語句時回滾事務,撤銷DML操作改變的資料
2、 恢復資料庫
3、 提供讀取的一致性
4、 使用Oracle Flashback Query分析基於先前時間點的資料
5、 使用Oracle Flashback特性從邏輯故障中恢復資料庫
UNDO_RETENTION
檢視初始化引數的設定:
初始化引數的描述:
如果將初始化引數UNDO_MANAGEMENT設定為AUTO,則Oracle10g將啟用AUM。
可以在初始化引數UNDO_RETENTION中設定撤銷保留時間的大小:
UNDO_RETENTION=1800 設定保留時間為30分鐘(1800秒)
UNDO_RETENTION引數預設設定為900秒。
也可以使用ALTER DATABASE命令保證資料庫中的撤銷保留
關閉撤銷資訊的保證保留
Oracle10g中的自動撤銷管理(AUM)
在Oracle10g中對於回滾段的管理可以通過配置引數而實現自動管理。為啟用撤銷空間的自動管理,首先必須在init.ora中或者SPFILE檔案中指定自動撤銷模式。其次需要建立一個專用的表空間來存放撤銷資訊,這保證使用者不會在SYSTEM表空間中儲存撤銷資訊。此外還需要為撤銷選擇一個保留時間。 如果需要實現AUM,需要配置以下3個引數: UNDO_MAMAGEMENTUNDO_TABLESPACE
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_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 UNDOTBS01 RETENTION GUARANTEE |
ALTER DATABASE UNDOTBS01 RETENTION NOGUARANTEE |