小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

oracle回滾段

 月影斜 2010-05-07
1. 概述
本文主要從回滾段的原理,分配和使用,以及回滾段的相關(guān)參數(shù)包括初始化參數(shù)的設(shè)置和回滾段的管理來(lái)介紹回滾段。以及回滾段涉及的多種問(wèn)題。
2. 回滾段工作原理
回滾段是磁盤上的一段存儲(chǔ)空間,用來(lái)保存數(shù)據(jù)變化前后的映像來(lái)提供一致性讀,保證事務(wù)完整性。
oracle基于兩個(gè)原則給事務(wù)分配回滾段。首先oracle試圖將一個(gè)新的事務(wù)指派給某個(gè)擁有最少活動(dòng)事務(wù)數(shù)的回滾段;如果沒(méi)有單個(gè)段能滿足這個(gè)需求,那么該事務(wù)將被指派給某個(gè)段來(lái)保存undo信息,以便此undo信息能夠盡可能長(zhǎng)的時(shí)間內(nèi)被用于讀一致性視圖保留。讀一致性保證查詢或者返回?cái)?shù)據(jù),或者失敗。當(dāng)失敗時(shí)系統(tǒng)發(fā)出ora-01555錯(cuò)誤。所以,回滾段中已經(jīng)提交的事務(wù)數(shù)據(jù)是非常寶貴的。Oracle設(shè)法盡可能長(zhǎng)的保留回滾段已經(jīng)提交的數(shù)據(jù)。
回滾段中的范圍以循環(huán)的方式被使用。一個(gè)事務(wù)僅僅使用一個(gè)回滾段。當(dāng)一個(gè)范圍裝滿回滾段數(shù)據(jù)后回滾段就自動(dòng)使用下一個(gè)范圍。多個(gè)事務(wù)可以使用一個(gè)范圍,但是一個(gè)回滾段的數(shù)據(jù)塊只能存放一個(gè)事務(wù)數(shù)據(jù)。當(dāng)回滾段使用完最后一個(gè)范圍時(shí),當(dāng)回滾段的第一個(gè)范圍是不活動(dòng)的或者不被使用后,回滾段的指針才指向第一個(gè)范圍。
3. 回滾段的類型
回滾段分系統(tǒng)回滾段和非系統(tǒng)回滾段,其中非系統(tǒng)回滾段又分為PUBLIC回滾段和PRIVATE回滾段.
系統(tǒng)回滾段用于處理涉及系統(tǒng)的CATALOG的事物(比如大多數(shù)的DDL), 它位于SYSTEM表空間, 由于只有SYSTEM表空間可以隨時(shí)保持可用, 因此, 不要把SYSTEM回滾段放在其他的表空間中.
注意:系統(tǒng)回滾段應(yīng)放在SYSTEM表空間中, 并且應(yīng)該永遠(yuǎn)保持ONLINE狀態(tài).
PUBLIC回滾段對(duì)于數(shù)據(jù)庫(kù)的所有實(shí)例(INSTANCE)都是可用的, 除非將其設(shè)置為OFFLINE。創(chuàng)建后只要online就可用。
PRIVATE回滾段是指對(duì)于數(shù)據(jù)庫(kù)的某個(gè)實(shí)例是私有的, 為了使用PRIVATE回滾段, 某個(gè)實(shí)例應(yīng)當(dāng)在其INITsid.ORA的ROLLBACK_SEGMENTS中標(biāo)明所有要使用的PRIVATE回滾段, 或通過(guò)使用ALTER ROLLBACK SEGMENT XXX ONLINE來(lái)使用某一個(gè)回滾段.
注意:在單實(shí)例系統(tǒng)中,建議將所有回滾段設(shè)為PUBLIC;在多實(shí)例系統(tǒng)中(如OPS), 建議將每個(gè)實(shí)例的PRIVATE回滾段放置到訪問(wèn)比較快的本地設(shè)備上。
4. 回滾段的使用
一般情況下,如果對(duì)回滾段的大小估計(jì)不準(zhǔn)確的話,會(huì)導(dǎo)致系統(tǒng)產(chǎn)生回滾段不能自動(dòng)擴(kuò)展范圍的錯(cuò)誤。
4.1. 創(chuàng)建回滾段
當(dāng)創(chuàng)建回滾段時(shí),系統(tǒng)必須要有CREATE ROLLBACK SEGMENT系統(tǒng)權(quán)限。
CREATE ROLLBACK SEGMENT RB01  TABLESPACE RBS1
STORAGE (INITIAL integer K|M NEXT integer K|M  MINEXTENTS integer MAXEXTENTS integer OPTIMAL integer K|M );
4.2. 更改ONLINE/OFFLINE狀態(tài)
ALTER ROLLBACK SEGMENT RB01 ONLINE;
4.3. 更改OPTIMAL參數(shù)
ALTER ROLLBACK SEGMENT RB01 STORAGE ( MAXEXTENTS 200 OPTIMAL 2048K );
4.4. 縮小回滾段
ALTER ROLLBACK SEGMENT RB01 SHRINK;
(有OPTIMAL參數(shù)時(shí), 縮小到OPTIMAL值; 沒(méi)有OPTIMAL參數(shù)時(shí), 縮小到MINEXTENTS所對(duì)應(yīng)的尺寸) ALTER ROLLBACK SEGMENT RB01 SHRINK TO 2048K;
4.5. 修改INITIAL/NEXT參數(shù)
原則上,INITIAL總應(yīng)該等于NEXT,除了使用SET TRANSACTION USE ROLLBACK SEGMENT XXX的回滾段。由于INITIAL不能直接修改,只能先drop然后創(chuàng)建。
DROP ROLLBACK SEGMENT RB01;
CREATE ROLLBACK SEGMENT RB01 TABLESPACE RBS1
STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 20  MAXEXTENTS 121 OPTIMAL 2000K);
4.6. 在事務(wù)中使用特定的回滾段
SET TRANSACTION USE ROLLBACK SEGMENT RB_LARGE1;
4.7. 刪除回滾段
DROP ROLLBACK SEGMENT rollback_segment;
5. 重作表空間的使用
在oracle9i中推薦使用重做表空間代替回滾段,當(dāng)然也可是使用回滾段。重做表空間是一種讓系統(tǒng)來(lái)自動(dòng)管理回滾段的方式。在系統(tǒng)里有4個(gè)和重做表空間的相關(guān)參數(shù):
SQL> show parameter undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_suppress_errors                 boolean     TRUE
undo_tablespace                      string      rbs3
SQL>
當(dāng)將undo_management設(shè)置成AUTO時(shí)系統(tǒng)使用重做表空間來(lái)管理回滾段,當(dāng)它被設(shè)置成MENUAL時(shí)系統(tǒng)使用回滾段。Undo_tablespace指名系統(tǒng)使用哪一個(gè)重做表空間。undo_suppress_errors被設(shè)置成true時(shí)表示系統(tǒng)創(chuàng)建和使用回滾段時(shí)忽略錯(cuò)誤。undo_retention是自動(dòng)管理模式下系統(tǒng)提交后,回滾段的數(shù)據(jù)保留多長(zhǎng)時(shí)間,單位是秒。這個(gè)參數(shù)的設(shè)置要看保留的時(shí)間和硬盤的空間大小來(lái)設(shè)定。下面是Undo 表空間大小的設(shè)計(jì)規(guī)范的計(jì)算公式:
Undospace = UR * UPS *db_block_size+ 冗余量
UR: 表示在undo中保持的最長(zhǎng)時(shí)間數(shù)(秒),由數(shù)據(jù)庫(kù)參數(shù)UNDO_RETENTION值決定。
UPS:表示在undo中,每秒產(chǎn)生的數(shù)據(jù)庫(kù)塊數(shù)量。
例如:在數(shù)據(jù)庫(kù)中保留2小時(shí)的回退數(shù)據(jù),假定每秒產(chǎn)生200個(gè)數(shù)據(jù)庫(kù)塊。則Undospace = 2 * 3600 * 200 * 4K = 5.8G
5.1. 創(chuàng)建重做表空間
CREATE UNDO TABLESPACE "RBS2"
DATAFILE '$DATAHOME/RBS2_1.dbf' SIZE 200M REUSE AUTOEXTEND ON
NEXT  1024K MAXSIZE  600M;
5.2. 增加數(shù)據(jù)文件
ALTER TABLESPACE RBS3 ADD DATAFILE '/export/home2/oradata/openview/rbs3_3.dbf' SIZE 10M AUTOEXTEND ON  NEXT 5M MAXSIZE 300M;
5.3. 修改數(shù)據(jù)文件
增加數(shù)據(jù)文件的大?。?br>ALTER DATABASE DATAFILE '/export/home2/oradata/openview/RBS3_2.dbf' RESIZE 300M;
修改數(shù)據(jù)文件的擴(kuò)展類參數(shù)
ALTER DATABASE DATAFILE '/export/home2/oradata/openview/RBS3_2.dbf' AUTOEXTEND ON  NEXT 10M MAXSIZE 500M;
6. ORA-01555問(wèn)題
這個(gè)問(wèn)題是一致性讀取時(shí)發(fā)生的?;貪L段是以循環(huán)方式使用回滾段中的范圍,當(dāng)前范圍被寫滿后就使用下一個(gè)范圍。當(dāng)回滾段的撤銷數(shù)據(jù)不再是活動(dòng)的,可能是已經(jīng)提交或者回滾,那么空間就可以重用。當(dāng)一個(gè)長(zhǎng)時(shí)間運(yùn)行的查詢?cè)谑聞?wù)活動(dòng)時(shí)開(kāi)始運(yùn)行,當(dāng)事務(wù)結(jié)束時(shí)還沒(méi)有運(yùn)行完,此時(shí)該查詢意識(shí)到舊數(shù)據(jù)已經(jīng)不復(fù)存在時(shí),就產(chǎn)生了ORA-01555:snapshot too old的錯(cuò)誤。
從數(shù)據(jù)庫(kù)應(yīng)用的角度來(lái)講,產(chǎn)生這個(gè)錯(cuò)誤的原因有:
大的查詢。一般來(lái)說(shuō),需要DBA找到這個(gè)大的查詢,如果可以優(yōu)化的話,盡量提高性能,否則為大的查詢所使用的事務(wù)建立單獨(dú)的回滾段,當(dāng)查詢開(kāi)始時(shí)將該段聯(lián)機(jī),完成后再將該段脫機(jī);或者象oracle建議那樣使用更大的回滾段。
過(guò)度頻繁的提交??梢詫螚l提交的事務(wù)改成成批提交。
或者由于設(shè)置了較小的optimal參數(shù)。此時(shí)可以將這個(gè)參數(shù)加大。
很顯然,回滾段為數(shù)據(jù)庫(kù)的管理提供一個(gè)挑戰(zhàn)的機(jī)會(huì)。不過(guò)在oracle9i中使用自動(dòng)管理undo表空間來(lái)解決回滾段的管理問(wèn)題,因此這個(gè)錯(cuò)誤成為了歷史。
7. ORA-01552 錯(cuò)誤
ORA-01552 cannot use system rollback segment for non-system tablespace。
這個(gè)錯(cuò)誤說(shuō)明在系統(tǒng)中沒(méi)有可用的非系統(tǒng)回滾段。原因如下:
除了系統(tǒng)回滾段, 未創(chuàng)建其它回滾段
只創(chuàng)建了PRIVATE回滾段, 但I(xiàn)NITsid.ORA的ROLLBACK_SEGMENTS中未列出這些回滾段
創(chuàng)建了PUBLIC回滾段, 但這些回滾段都處于OFFLINE狀態(tài)
解決辦法,根據(jù)上述原因依次解決。
8. 創(chuàng)建回滾段時(shí)需要注意的問(wèn)題
INITIAL和 NEXT最好一樣,除了應(yīng)用使用指定的回滾段。
Private回滾段如果需要被其他用戶使用,那么需要在INITsid.ora中使用rollback_segments指定。
MINEXTENTS最小等于2
OPTIMAL最小應(yīng)該設(shè)置成兩個(gè)extents大小。
9. 與之相關(guān)的性能視圖
和undo有關(guān)的動(dòng)態(tài)性能視圖
v$undostat        包含undo的統(tǒng)計(jì)信息。使用這張視圖可以估計(jì)系統(tǒng)當(dāng)前所需的undo大小。
v$rollstat      undo模式的視圖。是undo表空間的undo segments的                                        統(tǒng)計(jì)信息
v$transaction      包含undo segments的信息。
dba_undo_extents  包含undo表空間中每一個(gè)范圍的提交時(shí)間。
和回滾段相關(guān)的性能視圖
DBA_ROLLBACK_GEGS     描述回滾段的信息,包含回滾段的名字和表空間;
DBA_SEGMENTS           描述回滾段的附加信息;
V$ROLLNAME         列出在線回滾段的名稱
V$ROLLSTAT               包含回滾段的統(tǒng)計(jì)信息
V$TRANSACTION           包含撤銷的統(tǒng)計(jì)信息
 
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/weikaifenglove/archive/2009/04/10/4059360.aspx

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多