|
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
|
|
|
來(lái)自: 月影斜 > 《學(xué)習(xí)筆記》