1. 程式人生 > >Oracle UNDO表空間

Oracle UNDO表空間

一、還原資料與還原表空間

還原資料是:

• 原始的、修改之前的資料副本

• 針對更改資料的每個事務處理而捕獲

• 至少保留到事務處理結束

• 用於支援:

– 回退操作

– 讀取一致性查詢

– Oracle 閃回查詢、Oracle 閃回事務處理和 Oracle 閃回表

– 從失敗的事務處理中進行恢復

還原資訊儲存在還原段中,還原段又儲存在還原表空間中。

還原表空間:

• 僅用於還原段

• 有特殊的恢復注意事項

• 只能與單個例項相關聯(叢集情況還原表空間是分開的)

• 在任意給定時間,一個給定的例項只能有一個表空間是當前可寫還原表空間

二、事務處理與還原資料

計算機生成了可選文字:還原段、緩衝區快取記憶體中的資料用於還原的al日”資料儲存在還原表空間、筍UPDATEOML操作重做日誌緩衝區國新更改的詳細倍息儲存在重做日誌檔案皿做日誌檔案國

• 每個事務處理僅分配一個還原段。

• 一個還原段可以同時服務多個事務處理。

三、還原資料與重做資料

還原

重做

記錄

如何還原更改

如何重現更改

用於

回退、讀取一致性、閃回

前滾資料庫更改

儲存於

還原段

重做日誌檔案

避免

在多使用者系統中出現讀取不一致

資料丟失

四、相關引數說明

計算機生成了可選文字:SQL>showparameterundo;NA州E下丫PEVALUEundo_managementUndOFetent1OnundotablespaceSQL>lAUTO900UNDOTBSI

以上為預設值。

啟用自動還原管理:UNDO_MANAGEMENT='AUTO'

設定還原保留時間:UNDO_RETENTION=10800--這個引數一般設定3小時,設定大點200G左右

設定還原表空間:UNDO_TABLESPACE='UNDOTBS1'

五、設定還原保留時間

計算機生成了可選文字:SQL>showparameterundo;NA州E下丫PEVALUEundo_managementUndOFetent1OnundotablespaceSQL>lAUTO900UNDOTBSI

指令碼修改立即生效無需重啟:

alter system set undo_retention=10800  

UNDO_RETENTION 指定已提交的還原資訊要保留多長時間(秒),預設為900秒。

僅在以下情況下才必須設定此引數:

• 還原表空間啟用了 AUTOEXTEND 選項

• 需要設定 LOB 的還原保留時間

• 需要保證保留時間

還原保留時間是建議值,當UNDO表空間滿了且沒到900秒也會覆蓋,如果需要確保必須保留900秒,則需要設定保證還原保留時間

六、設定保證還原保留時間

SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;

--保證還原保留時間

SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;--不保證還原保留時間

在有guarantee的保證下,ORACLE將會保證undo資訊能夠儲存到undo_retention設定的值之後才被覆蓋,如果這個時候同時執行了很多事物,將undo表空間耗完了,那麼那個事物會失敗,會報ORA-30036 錯誤,所以使用guarantee一定要慎用,如果非要使用guarantee,那麼儘量將undo 表空間設大一點。

計算機生成了可選文字:保留時間保-15分鐘在還原表空間中還原資料執行時間不超過15分鐘的sELECT語句始終可以得到滿憊的結果。生成的還原資料多於可用空間時事務處理會失敗。

七、還原資料的使用

1、閃回查詢

說明:查詢指定時間點的所有資料

select empno, ename, job, mgr, sal

from scott.emp

as of timestamp to_timestamp('2016-01-21 15:10:00', 'yyyy-mm-dd hh24:mi:ss')

where mgr = 7566;

2、閃回版本查詢

說明:

1)檢視兩個時間點之間行的所有版本。

2)檢視更改了行的事務處理。

注意:

1)不能使用 VERSIONS 子句查詢外部表、臨時表、固定表、檢視。

2)VERSIONS 子句不能跨 DDL 命令使用

3)段收縮操作已過濾掉。

SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;--獲取SCN

update…commit;inset…commit;delete…commit;

SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;--獲取SCN

select VERSIONS_STARTSCN,versions_starttime,VERSIONS_ENDSCN,versions_endtime,versions_xid,versions_operation

from employees versions between scn 2797818 and 2797868

order by VERSIONS_STARTTIME;

select VERSIONS_STARTSCN,versions_starttime,VERSIONS_ENDSCN,versions_endtime,versions_xid,versions_operation

from employees versions between timestamp minvalue and maxvalue

order by VERSIONS_STARTTIME;

閃回版本查詢偽列解析

VERSIONS_STARTSCN

VERSIONS_STARTTIME

該條記錄操作時的SCN或時間,如果為空,表示該行記錄是在查詢範圍外建立的

VERSIONS_ENDSCN

VERSIONS_ENDTIME

該條記錄失效時的SCN或時間,如果為空,說明記錄當前時間在

當前表內不存在,或者已經被刪除了,可以配合著

VERSIONS_OPERATION列來看,如果

VERSIONS_OPERATION列值為D,說明該列已被刪除,如果該

列為空,則說明記錄在這段時間無操作

VERSIONS_XID

該操作的事務ID

VERSIONS_OPERATION

對該行執行的操作:I表示INSERT,D表示DELETE,U表示UPDATE

提示:對於索引鍵的update操作,版本查詢可能會將其識別成兩

個操作:DELETE和INSERT

3、閃回表

說明:

1)需要具有對特定表的 FLASHBACK ANY TABLE 或 FLASHBACK 物件許可權和具有 SELECT、INSERT、DELETE 和ALTER 許可權。

2)FLASHBACK TABLE 命令作為單個事務處理執行,要求獲取 DML 排它鎖。

3)不閃回統計資訊,保留當前索引和從屬物件。

4)操作不能對系統表執行,不能跨DDL操作,會生成還原資料和重做資料。

ALTER TABLE temp_liutao ENABLE ROW MOVEMENT;

FLASHBACK TABLE temp_liutao TO TIMESTAMP TO_TIMESTAMP('2016-01-20 16:10:00','YYYY-MM-DD HH24:MI:SS');

flashback table temp_liutao to timestamp(systimestamp - interval '3'minute);

flashback table t_topcommsc_request to scn 13884734132482;

ALTER TABLE temp_liutao DISABLE ROW MOVEMENT;