undo資料表空間概述,undo表概述

來源:互聯網
上載者:User

undo資料表空間概述,undo表概述
oracle028undo資料表空間概述


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使用不夠就事務掛起

























相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.