undo資料表空間概述
UNDO的簡要概序:
1. 一般的資料表空間中的段是手動建立的,undo資料表空間和普通的資料表空間相似,但是undo資料表空間中undo段,undo段是自動產生的;Oracle自動使用、維護undo段。
2. 一般資料表空間中的段是我們自己手動使用的,而undo表中的段是oracle自動使用的。
show parameter undo_tablespace;//查詢當前的undo資料表空間
NAME TYPE VALUE
-------------------------------------------------- ----------- ----------------
undo_tablespace string UNDOTBS1
select * from v$rollname;//當前有多少段
//下面的段是系統提供的復原段:
1. 對資料庫物件進行操作的時候,也就是使用資料字典的時,SYSTEM的UNDO段才會使用
2. 如果undo資料表空間壞了,可能會使用SYSTEM段
0 SYSTEM
//下面的是存在於 UNDOTBS1中,這下面段是在資料庫運行一段時間會自動調整的段
1 _SYSSMU1_3780397527$
2 _SYSSMU2_2232571081$
3 _SYSSMU3_2097677531$
4 _SYSSMU4_1152005954$
5 _SYSSMU5_1527469038$
6 _SYSSMU6_2443381498$
7 _SYSSMU7_3286610060$
8 _SYSSMU8_2012382730$
9 _SYSSMU9_1424341975$
10 _SYSSMU10_3550978943$
select SEGMENT_NAE,BLOCKS,EXTENTS from dba_segments where SEGMENT_NAME='SYSTEM';//在system的資料表空間中段的大小
SYSTEM 48 6
--UNDO資料表空間佔用空間情況以及資料檔案存放位置
select file_name,bytes/1024/1024 from dba_data_files
where tablespace_name like '%UNDOTBS%';
/u01/app/oracle/oradata/jiagulun/undotbs01.dbf 90
select SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME='SYSTEM';//段所佔的區
SYSTEM SYSTEM 0 1 128 8
SYSTEM SYSTEM 1 1 136 8
SYSTEM SYSTEM 2 1 528 8
SYSTEM SYSTEM 3 1 536 8
SYSTEM SYSTEM 4 1 544 8
SYSTEM SYSTEM 5 1 552 8
select SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME='_SYSSMU7_3286610060$';
_SYSSMU7_3286610060$ UNDOTBS1 0 3 224 8
_SYSSMU7_3286610060$ UNDOTBS1 1 3 232 8
_SYSSMU7_3286610060$ UNDOTBS1 2 3 312 8
_SYSSMU7_3286610060$ UNDOTBS1 3 3 1024 128
_SYSSMU7_3286610060$ UNDOTBS1 4 3 11392 128
通過上面可以看到對於系統的undo段中的區是連續的,而且區中的塊也是連續的
但是對於非系統的undo段中的區不是連續的,但是區中的塊是連續的
undo資料表空間的管理方式:在9i以前資料表空間自動建立,段是自動建立;但是區是手動分區的,這樣就會存在一些問題:
一些比較大的DML語言跑跑就因為undo段夠就會出現問題,空間不足。
在其後就自動分配了,在某些請款下也會自動回收的。
show parameter undo;
NAME TYPE VALUE
-------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------
undo_tablespace string UNDOTBS1
NAME TYPE VALUE
-------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
undo資料表空間的作用
1. oracle會在事務開啟的時候使用undo:
在oracle在修改資料的時候,oracle會把被修改的資料放入undo表
空間的undo段裡面。(當修改語句越多,使用的undo段越多)正
因為儲存了被修改的資料,所以undo可以復原
2. 保證一個會話讀不到另外一個會話未提交的資料,靠undo資料表空間儲存原資料,所以undo保證讀一致性
3. oracle的執行個體崩潰恢複:前滾,復原*
Undo段中區的狀態
free:從來沒有用過的
expired:當過了undo_retention時間,oracle會釋放。原則expired不會被釋放。未測時間
inactive:表示事務已經提交,但是還沒有過undo_retention,原則上是要保留undo_retention時間,但是空間壓力比較
大,可以被覆蓋
active:表示在事務還未提交時,所使用區的狀態,不可以被覆蓋
undo_retention
alter tablespace undotbs1 retention guarantee//設定inactive區的資料至少儲存undo_retention後才被覆蓋
alter tablespace undotbs1 retention noguarantee
select TABLESPACE_NAME, RETENTION from dba_tablespaces;
SYSTEM NOT APPLY
SYSAUX NOT APPLY
UNDOTBS1 GUARANTEE
TEMP NOT APPLY
USERS NOT APPLY
EXAMPLE NOT APPLY
當進行DML時,就會使用FREE空間,當FREE空間不夠時就擴undo資料表空間的,當擴不了時,就使用EXPIRED的,當設定資料表空間為guarantee時,
就使用不了inactive那麼事務就必須掛起。當資料表空間設定為Noguarantee時就使用inactive,假如inactive使用不夠就事務掛起
--------------------------------------------------------------------------------
RMAN備份與恢複之undo資料表空間丟失
關於Oracle 釋放過度使用的undo資料表空間
Oracle undo的一些理解
Oracle undo 鏡像資料探究
Oracle 復原(ROLLBACK)和撤銷(undo)
Linux-6-64下安裝Oracle 12C筆記
在CentOS 6.4下安裝Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虛擬機器中安裝步驟
Debian 下 安裝 Oracle 11g XE R2
--------------------------------------------------------------------------------