Oracle 原理:UNDO表空间
UNDO表空間又稱為,回滾表空間,撤銷表空間。Undo segment保存在UNDO 表空間,一個數據庫可以有多個UNDO表空間,但是在同一時刻中,只能使用同一個UNDO表空間。
一、UNDO表空間的作用和機制
對于DML語句,只要修改了數據塊,Oracle就會把原來修改前的數據塊保留下來,存儲在Undo segment (回滾段),當執行rollback操作時,把原先的數據重新覆蓋回來?;貪L段存放在UNDO表空間中。UNDO表空間的管理分為手動管理和自動管理。在11g中默認是采用自動管理模式。
UNDO的作用:把原來修改前的數據塊保留下來。主要用于 一致性讀,回滾事務,實例恢復。
一致性讀的例子:用戶 A 執行一個SQL查詢操作select * from salary_tbl?.需要1分鐘。此時用戶B執行了
update?salary_tbl set?salary=2000 where?salary = 1000; 那么用戶A查詢的數據??salary 是1000 而不是2000,當前時刻查詢的數據。如果UNDO表空間大小不足會把UNDO的空間進行覆蓋,此時查詢原來的數據就查詢不到了,此時報ORA-1555錯誤:snapshoot too old? ?
數據庫coredown后的實例恢復:是在 SMON進程完成前滾并打開數據庫以后發生,SMON進程回去查看UNDO SEGMENT第一個數據塊中記錄的事務表,在數據庫宕機時將沒有提交也沒有回滾的事物全部回滾。
undo_retention :為UNDO塊中的屬性,決定了undo塊中的數據至少保存多少秒。例如一個100秒的查詢,undo_retention為50。如果在UNDO空間不足的情況下會優先重置過期的數據。如果沒重置則還可以查詢,如果重置了數據,那么此時100秒的查詢操作就會報ORA-1555錯誤。
retention garentee :?為UNDO塊中的屬性,10g開始的新特性。確保 UNDO段中的數據未到?undo_retention 絕不會被覆蓋。
所以利用UNDO表空間的優先順序是: 空undo數據塊 >undo_retention 到期的數據塊 >未設置retention garentee的數據塊 >報錯
?
二、UNDO表空間的相關操作
查詢表空間select * from dba_tablespaces. 。 只要字段??CONTENTS的值是UNDO 就是UNDO表空間 ,
查看UNDO表空間管理方式? : >>??show parameter undo_management
創建UNDO表空間:
create undo tablespace temp2 tempfile 'D:\ORACLE\ORADATA\ORCL\undo2_01.dbf' size 10m autoextend on;給表空間分配臨時文件: alter tablespace <spacesname> add tempfile '<路徑/文件名.dbf>' size? [100m] autoextend on ;
查看默認UNDO表空間:? ??show parameter undo
系統默認UNDO表空間切換 alter system? set undo_tablespace = '<spacesname>';
啟用[取消]?retention garentee: alter tablespace <spacename>?retention [ [garentee]? or [nogarentee] ];
查詢?retention garentee 狀態:?select tablespace_name,a.retention from dba_tablespaces a ;
更改undo_retention :??alter system set undo_retention ? =1000;
查詢UNDO 表空間使用情況 :?select * from v$undostat ;? (UNDOBLKS 使用的數據塊? ?TXNCOUNT 事物數? BEGIN_TIME 和END_TIME UNDO生效時間和結束時間)
?
三、11g 的UNDO表空間的新特性
?RMAN備份恢復UNDO表空間:是一個關于UNDO表空間的備份優化,在11g之前,都是自動把UNDO表空間的所有進行備份?,F實的生產環境中,UNDO表空間的歷史數據都是十分龐大的,備份用不上的數據不緊占空間,而且影響執行效率。RMAM備份:已經提交數據就不需要再備份了 。
總結
以上是生活随笔為你收集整理的Oracle 原理:UNDO表空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 原理:临时表空间的操作方式
- 下一篇: Oracle 原理: 初步认识程序包