Oracle數(shù)據(jù)庫回滾段專題_第1頁
Oracle數(shù)據(jù)庫回滾段專題_第2頁
Oracle數(shù)據(jù)庫回滾段專題_第3頁
Oracle數(shù)據(jù)庫回滾段專題_第4頁
Oracle數(shù)據(jù)庫回滾段專題_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Oracle數(shù)據(jù)庫回滾段專題回滾段概述回滾段用于存放數(shù)據(jù)修改之前的值(包括數(shù)據(jù)修改之前的位置和值)?;貪L段的頭部包含正在使用的該回滾段事務(wù)的信息。一個事務(wù)只能使用一個回滾段來存放它的回滾信息,而一個回滾段可以存放多個事務(wù)的回滾信息。回滾段的作用事務(wù)回滾:當(dāng)事務(wù)修改表中數(shù)據(jù)的時候,該數(shù)據(jù)修改前的值(即前影像)會存放在回滾 段中,當(dāng)用戶回滾事務(wù) (ROLLBACK )時,ORACLE將會利用回滾段中的數(shù)據(jù)前影像來 將修改的數(shù)據(jù)恢復(fù)到原來的值。事務(wù)恢復(fù):當(dāng)事務(wù)正在處理的時候,例程失敗,回滾段的信息保存在重做日志文件中, ORACLE將在下次打開數(shù)據(jù)庫時利用回滾來恢復(fù)未提交的數(shù)據(jù)。讀一致性:當(dāng)一個會話

2、正在修改數(shù)據(jù)時,其他的會話將看不到該會話未提交的修改。而 且,當(dāng)一個語句正在執(zhí)行時,該語句將看不到從該語句開始執(zhí)行后的未提交的修改(語句級讀一致性)。當(dāng)ORACLE執(zhí)行SELECT語句時,ORACLE依照當(dāng)前的系統(tǒng)改變號 (SYSTEM CHANGE NUMBER-SCN )來保證任何前于當(dāng)前 SCN的未提交的改變不被該語句處理???以想象:當(dāng)一個長時間的查詢正在執(zhí)行時,若其他會話改變了該查詢要查詢的某個數(shù)據(jù)塊,ORACLE將利用回滾段的數(shù)據(jù)前影像來構(gòu)造一個讀一致性視圖。事務(wù)級的讀一致性O(shè)RACL一般提供SQL語句級(SQL STATEMENT LEVE的讀一致性,可以用 以下語句來實現(xiàn)事務(wù)級

3、的讀一致性。SET TRANSACTION READ ONLY或:SET TANNSACTION SERIALIZABLE以上兩個語句 都將在事務(wù)開始后提供讀一致性。需要注意的是,使用第二 個語句對數(shù)據(jù)庫的并發(fā)性和性能將帶來影響?;貪L段的種類系統(tǒng)回滾段:當(dāng)數(shù)據(jù)庫創(chuàng)建后,將自動創(chuàng)建一個系統(tǒng)回滾段,該回滾段只用于存放系統(tǒng)表空間中對象的前影像,比如數(shù)據(jù)字典。非系統(tǒng)回滾段:擁有多個表空間的數(shù)據(jù)庫至少應(yīng)該有一個非系統(tǒng)回滾段,用于存放非系統(tǒng)表空間中對象的數(shù)據(jù)前影像。非系統(tǒng)回滾段又分為私有回滾段和公有回滾段,私有回滾段應(yīng)在參數(shù)文件的 ROLLBACK SEGMENTS參數(shù)中列出,以便例程啟動時自動使其在線(

4、ONLINE )。公有回滾段一般在 OPS( ORACLE并行服務(wù)器)中出現(xiàn),將在例程啟動時自動在線。DEFERED回滾段: 當(dāng)我們把一個表空間置于 Ofline狀態(tài)后,由于表空間此時不能進 行讀寫,這個時候如果有用戶執(zhí)行 Rollback命令要把相關(guān)此表空間上數(shù)據(jù)的事務(wù)進行回滾, Rollback Completed.消息會返回給用戶, 此時,對于用戶而言事務(wù)已經(jīng)回滾,但是對于DB而言,回滾并沒有真正的完成,這個時候數(shù)據(jù)庫將該回滾信息寫入系統(tǒng)回滾段(也就是延遲回滾段),等表空間重新 Online的時候,數(shù)據(jù)庫從系統(tǒng)回滾段中將回滾信息應(yīng)用回滾段的使用分配回滾段:當(dāng)事務(wù)開始時,ORACLE各為該

5、事務(wù)分配回滾段,并將擁有最 少事務(wù)的回滾段分配給該事務(wù)。事務(wù)可以用以下語句申請指定的回滾段:SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segme nt事務(wù)將以順序,循環(huán)的方式使用回滾段的區(qū)(EXTENTS,當(dāng)當(dāng)前區(qū)用滿后 移到下一個區(qū)。幾個事務(wù)可以寫在回滾段的同一個區(qū), 但每個回滾段的塊只能包 含一個事務(wù)的信息。例如(兩個事務(wù)使用同一個回滾段,該回滾段有四個區(qū)):1、事務(wù)在進行中,它們正在使用回滾段的第三個區(qū);2、當(dāng)兩個事務(wù)產(chǎn)生更多的回滾信息,它們將繼續(xù)使用第三個區(qū);3、當(dāng)?shù)谌齻€區(qū)滿后,事務(wù)將寫到第四個區(qū),當(dāng)事務(wù)開始寫到一個新的 區(qū)時, 稱

6、為翻轉(zhuǎn)(WRAP ;4、當(dāng)?shù)谒膫€區(qū)用滿時,如果第一個區(qū)是空閑或非活動(使用該區(qū)的所有事 務(wù)完成而沒有活動的事務(wù))的,事務(wù)將接著使用第一個區(qū)?;貪L段的擴張(EXTEND當(dāng)當(dāng)前回滾段區(qū)的所有塊用完而事務(wù)還需要更多的回滾空間時,回滾段的指針將移到下一個區(qū)。當(dāng)最后一個區(qū)用完,指針將移到第一個區(qū)的前面。回滾段 指針移到下一個區(qū)的前提是下一個區(qū)沒有活動的事務(wù),同時指針不能跨區(qū)。當(dāng)下一個區(qū)正在使用時,事務(wù)將為回滾段分配一個新的區(qū),這種分配稱為回滾段的擴展。回滾段將一直擴展到該回滾段區(qū)的個數(shù)到達回滾段的參數(shù)MAXEXTENTS的值時為止。SQL create rollback segment un_do1 t

7、ablespace un_do storage (initial 100k next 100k min exte nts 10 maxexte nts 100optimal 1000k);不要設(shè)置 MAXEXTENTS 為 UNLIMITEDOPTIMAL參數(shù)來節(jié)約空間的使用 從Oracle 9i開始,Oracle引入了自動管理的 Un do表空間,如果選擇使用自動的Un do表空間的管理,那么用戶不再能夠創(chuàng)建或刪除回滾段,也不再需要為事務(wù)指定回滾段,這一切將由Oracle自動進行。SQL show parameter undoNAMEundo_management undo_retentio

8、n undo_tablespace想使用手動管理回滾段?string AUTO integer 900 stringUNDOTBS1TYPE VALUESQL select name,isses_modifiable,issys_modifiable from v$parameter where name like %undo%;NAMEISSES ISSYS_MOD undo_managementFALSE FALSE undo_tablespaceFALSE IMMEDIATEundo_retentionFALSE IMMEDIATE不支持直接修改回滾段參數(shù)SQL alter system

9、 set undo_management=manual scope=spfile; 系統(tǒng)已更改。SQL startup force ORACLE 例程已經(jīng)啟動。SQL show parameter undoNAMETYPEVALUEundo_managementstringMANUALundo_retentioninteger900undo_tablespacestringUNDOTBS1現(xiàn)在回滾段屬于手動管理狀態(tài)SQL create rollback segment un_do1 tablespace un_do storage (initial 100k next 100k minexte

10、nts 10 maxextents 100 optimal 1000k);create rollback segment un_do1 tablespace un_do storage (initial 100k next 100k minextents10 maxextents 100 optimal 1000k)*第 1 行出現(xiàn)錯誤 :ORA-30574: 無法利用 AUTO 段空間管理在表空間中創(chuàng)建回退段不能在使用自動段空間上使用建立回滾段SQL create tablespace uuud datafile E:oracleproduct10.2.0oradataORACLEDATAF

11、ILEuuud.dbf size 10m extent management local uniform segment space management manual; 表空間已創(chuàng)建。建立手動段空間SQL create rollback segment ud1 tablespace uuud storage (initial 100k next 100k minextents 10 maxextents 100 optimal 1000k);create rollback segment ud1 tablespace uuud storage (initial 100k next 100k

12、minextents 10 maxextents 100 optimal 1000k)*第 1 行出現(xiàn)錯誤 :ORA-01593: 回退段最佳大小 (125 blks) 小于計算的初始大小 (130 blks)初始區(qū)100k,最小10個區(qū),而回滾段最佳大小事1000k,小于回滾段最小空間,所以報錯SQL create rollback segment ud1 tablespace uuud storage (initial 100k next 100k minextents 10 maxextents 100 optimal 1100k);create rollback segment ud1

13、 tablespace uuud storage (initial 100k next 100k minextents 10 maxextents 100 optimal 1100k)*第 1 行出現(xiàn)錯誤 :ORA-01552: 非系統(tǒng)表空間 UUUD 不能使用系統(tǒng)回退段非系統(tǒng)永久表空間不能使用回滾段SQL create undo tablespace uuuud datafile E:oracleproduct10.2.0oradataORACLEDATAFILEuuuud.dbf size 10m RETENTION NOGUARANTEE;表空間已創(chuàng)建。SQL create rollba

14、ck segment ud1 tablespace uuuud storage (initial 100k next 100k min exte n ts 10 maxexte nts 100 optimal 1100k);回退段已創(chuàng)建。如果系統(tǒng)表空間使用本地管理表空間,其余表空間只能使用本地管理表空間 如果系統(tǒng)表空間使用字典管理表空間,其余表空間只能使用字典管理表空間 包括回滾段SQL select segme nt_n ame,tablespace_ name from dba_rollback_segs;SEGMENT_NAMETABLESPACE_NAMESYSTEMSYSTEM_SY

15、SSMU1$UNDOTBS1_SYSSMU2$UNDOTBS1_SYSSMU3$UNDOTBS1_SYSSMU4$UNDOTBS1_SYSSMU5$UNDOTBS1_SYSSMU6$UNDOTBS1_SYSSMU7$UNDOTBS1_SYSSMU8$UNDOTBS1_SYSSMU9$UNDOTBS1_SYSSMU10$UNDOTBS1SEGMENT_NAMETABLESPACE_NAME_SYSSMU11$UUUUD_SYSSMU12$UUUUD_SYSSMU13$UUUUD_SYSSMU14$UUUUD_SYSSMU15$UUUUD_SYSSMU16$UUUUD_SYSSMU17$UUUUD

16、_SYSSMU18$UUUUD_SYSSMU19$UUUUD_SYSSMU20$UUUUDUD1UUUUD已選擇 22 行。默認(rèn)創(chuàng)建 system 回滾段 1 個非系統(tǒng)回滾段 10 個 每次創(chuàng)建一個回滾表空間,包含 單獨增減了一個回滾段 UD110 個回滾段從 9i 以后,創(chuàng)建回滾段不再需要undo 表空間了,本例使用的是 system 表空間SQL create rollback segment 1ud storage (initial 100k next 100k minextents 2 maxextents100 optimal 1100k);回退段已創(chuàng)建。SQL select seg

17、ment_name,tablespace_name from dba_rollback_segs;SEGMENT_NAMETABLESPACE_NAMESYSTEM _SYSSMU1$ _SYSSMU2$ _SYSSMU3$ _SYSSMU4$ _SYSSMU5$ _SYSSMU6$ _SYSSMU7$ _SYSSMU8$ _SYSSMU9$ _SYSSMU10$SYSTEMUNDOTBS1UNDOTBS1UNDOTBS1UNDOTBS1UNDOTBS1UNDOTBS1UNDOTBS1UNDOTBS1UNDOTBS1UNDOTBS1SEGMENT_NAMETABLESPACE_NAME_SYS

18、SMU11$ _SYSSMU12$ _SYSSMU13$ _SYSSMU14$ _SYSSMU15$ _SYSSMU16$ _SYSSMU17$ _SYSSMU18$ _SYSSMU19$ _SYSSMU20$ UD1UUUUDUUUUDUUUUDUUUUDUUUUDUUUUDUUUUDUUUUDUUUUDUUUUDUUUUD_SYSSMU22$UUUUUD_SYSSMU23$UUUUUD_SYSSMU24$UUUUUD_SYSSMU25$UUUUUD_SYSSMU26$UUUUUD_SYSSMU27$UUUUUD_SYSSMU28$UUUUUD_SYSSMU29$UUUUUD_SYSSMU3

19、0$UUUUUD_SYSSMU31$UUUUUD1udSYSTEM已選擇 33 行。當(dāng)回滾段創(chuàng)建后,回滾段是離線的, 不能被數(shù)據(jù)庫使用, 為了使回滾段被事務(wù)利用,必須將 回滾段在線??梢杂靡韵旅钍够貪L段在線:SQL select segment_name,tablespace_name,status from dba_rollback_segs;SEGMENT_NAMESTATUSTABLESPACE_NAMESYSTEMSYSTEMONLINE_SYSSMU1$UNDOTBS1OFFLINE_SYSSMU2$UNDOTBS1OFFLINE_SYSSMU3$UNDOTBS1OFFLINE_S

20、YSSMU4$UNDOTBS1OFFLINE_SYSSMU5$UNDOTBS1OFFLINE_SYSSMU6$UNDOTBS1OFFLINE_SYSSMU7$UNDOTBS1OFFLINE_SYSSMU8$UNDOTBS1OFFLINE_SYSSMU9$UNDOTBS1OFFLINE_SYSSMU10$UNDOTBS1OFFLINESEGMENT_NAMETABLESPACE_NAMESTATUS_SYSSMU11$UUUUDOFFLINE_SYSSMU12$UUUUDOFFLINE_SYSSMU13$UUUUDOFFLINE_SYSSMU14$UUUUDOFFLINESYSSMU15$UUU

21、UDSYSSMU16$UUUUDSYSSMU17$UUUUDSYSSMU18$UUUUDSYSSMU19$UUUUDSYSSMU20$UUUUDUD1 UUUUDSEGMENT_NAMESTATUSOFFLINEOFFLINEOFFLINEOFFLINEOFFLINEOFFLINEOFFLINETABLESPACE_NAME_SYSSMU22$UUUUUD_SYSSMU23$UUUUUD_SYSSMU24$UUUUUD_SYSSMU25$UUUUUD_SYSSMU26$UUUUUD_SYSSMU27$UUUUUD_SYSSMU28$UUUUUD_SYSSMU29$UUUUUD_SYSSMU30

22、$UUUUUD_SYSSMU31$UUUUUD1udSYSTEM已選擇 33 行。OFFLINEOFFLINEOFFLINEOFFLINEOFFLINEOFFLINEOFFLINEOFFLINEOFFLINEOFFLINEOFFLINESQL ALTER ROLLBACK SEGMENT 1ud online; 回退段已變更。SQL select segment_name,tablespace_name,status from dba_rollback_segs;SEGMENT_NAMESTATUSTABLESPACE_NAMESYSTEMSYSTEMONLINE_SYSSMU1$UNDOTB

23、S1OFFLINE_SYSSMU2$UNDOTBS1OFFLINE_SYSSMU3$UNDOTBS1OFFLINE_SYSSMU4$UNDOTBS1OFFLINE_SYSSMU5$UNDOTBS1OFFLINE_SYSSMU6$UNDOTBS1OFFLINE_SYSSMU7$UNDOTBS1OFFLINE_SYSSMU8$UNDOTBS1OFFLINE_SYSSMU9$UNDOTBS1OFFLINE_SYSSMU10$UNDOTBS1OFFLINESEGMENT_NAMETABLESPACE_NAMESTATUS_SYSSMU11$UUUUDOFFLINE_SYSSMU12$UUUUDOFFL

24、INE_SYSSMU13$UUUUDOFFLINE_SYSSMU14$UUUUDOFFLINE_SYSSMU15$UUUUDOFFLINE_SYSSMU16$UUUUDOFFLINE_SYSSMU17$UUUUDOFFLINE_SYSSMU18$UUUUDOFFLINE_SYSSMU19$UUUUDOFFLINE_SYSSMU20$UUUUDOFFLINEUD1UUUUDOFFLINESEGMENT_NAMETABLESPACE_NAMESTATUS_SYSSMU22$UUUUUDOFFLINE_SYSSMU23$UUUUUDOFFLINE_SYSSMU24$UUUUUDOFFLINE_SYS

25、SMU25$UUUUUDOFFLINE_SYSSMU26$UUUUUDOFFLINE_SYSSMU27$UUUUUDOFFLINE_SYSSMU28$UUUUUDOFFLINE_SYSSMU29$UUUUUDOFFLINE_SYSSMU30$UUUUUDOFFLINE_SYSSMU31$UUUUUDOFFLINE1udSYSTEMONLINE已選擇 33 行。切換UNDO表空間.啟動例程并打開數(shù)據(jù)庫后,同一時刻特定例程只能使用一個 UNDO表空間,切換 UNDO空間是指停止例程當(dāng)前使用的 UNDOS空間,并啟動其他UNDO表空間,下 面以啟用undotbs2表空間為例,說明切換UNDOfe空間

26、的方法ALTER SYSTEM SET undo_tablespace=undotbs02;可以使用 ALTER ROLLBACK SEGMENT 命令修改回滾段的存儲參數(shù)(包括 OPTIMAL , MAXEXTENTS )。語法:ALTER ROLLBACK SEGMENT rollback_segme ntSTORAGE (NEXT i ntegerK|MMINEXTENTS in tegerMAXEXTENTS i nteger|UNLIMITEDOPTIMAL in tegerK|M|NULL)例:ALTER ROLLBACK SEGMENT rbs01 STORAGE (MAXEXT

27、ENTS 1000);回收回滾段的空間如果指定了回滾段的 OPTIMAL參數(shù),ORACLE將自動回收回滾段到 OPTIMAL指定 的位置。用戶也可以手動回收回滾段的空間SQL ALTER ROLLBACK SEGMENT 1ud shri nk;回退段已變更。SQL ALTER ROLLBACK SEGMENT 1ud shrink to 1m;回退段已變更。如果不指明TO integer的數(shù)值,ORACLE將試圖回收到 OPTIMAL的位置。使回滾段離線為了達到以下兩個目的將要回滾段離線:1阻止新的事務(wù)使用該回滾段;2該回滾段必須刪除。SQL ALTER ROLLBACK SEGMENT 1

28、ud offli ne;回退段已變更。刪除回滾段當(dāng)回滾段不再需要或要重建以改變 INITIAL , NEXT 或 MINEXTENTS 參數(shù)時,可以將 其刪除。 要刪除回滾段,不許使該回滾段離線。SQL drop ROLLBACK SEGMENT 1ud ;回退段已刪除?;貪L段的統(tǒng)計信息 可以顯示所 有聯(lián)機 UNDO 段的名稱 SQL select * from v$rollname;USN NAME0 SYSTEM顯示 UNDO 段的統(tǒng)計信息SQL select usn,rssize,xacts,writes,shrinks,extends,gets,waits from v$rollsta

29、t;USN RSSIZE XACTS WRITES SHRINKS EXTENDS GETS WAITS 0 1040384 0 15441336 0 10 18541 0USN :回 滾段標(biāo)識RSSIZE : 回滾段默認(rèn)大小XACTS : 活動事務(wù)數(shù) 在一段時間內(nèi)增量用到的列WRITES : 回滾段寫入數(shù) (單位 :bytes)SHRINKS :回滾段收縮次數(shù)EXTENDS :回滾段擴展次數(shù)WRAPS :回滾段翻轉(zhuǎn)(wrap)次數(shù)GETS: 獲取回滾段頭次數(shù)WAITS : 回滾段頭等待次數(shù)查看回滾段的統(tǒng)計信息:SQL SELECT , s.extents, s.rssize, s

30、.optsize, s.hwmsize, s.xacts, s.status2 FROM v$rollname n, v$rollstat s3 WHERE n.usn = s.usn;NAME EXTENTSRSSIZE OPTSIZE HWMSIZE XACTS STATUSSYSTEM1610403841040384 0 ONLINE查看回滾段的使用情況,哪個用戶正在使用回滾段的資源:SQL select s.user name, u.n ame2 from v$tra nsact ion t, v$rollstat r, v$roll name u, v$sessi on s3 whe

31、re s.taddr = t.addr4 and t.xidus n = r.us n5 and r.us n = u.us n6 order by s.user name;回滾段的數(shù)量規(guī)劃對于OLTP系統(tǒng),存在大量的小事務(wù)處理,一般建議:數(shù)量多的小回滾段;每 四個事務(wù)一個回滾段;每個回滾段不要超過十個事務(wù)。對于批處理,一般建議:少的大回滾段;每個事務(wù)一個回滾段。回滾段的問題及解決方法問題一:事務(wù)要求的回滾段空間不夠,表現(xiàn)為表空間用滿( ORA- 01560錯誤),回滾段 擴展到達參數(shù) MAXEXTENTS 的值(ORA-01628 )。解決方法:向回滾段表空間添加文件或使已有的文件變大;增加

32、MAXEXTENTS的值。問題二:讀一致性錯誤( ORA-01555 SNAPSHOT TOO OLD )解決方法:增加 MINEXTENTS 的值,增加區(qū)的大小,設(shè)置一個高的OPTIMAL值。1增加回滾段的大小,因為 ORACLE總是覆蓋最舊的回滾段,所以大的回滾段能有效的降低 數(shù)據(jù)被覆蓋的可能性。2、檢查你的程序,避免在一個大查詢的過程中對所查詢的表執(zhí)行太多更新操作。要解決這個問題,必須理解 oracle回滾段的工作原理:回退段中存放的信息被稱為前照”(premage),也就是說當(dāng)一個進程對某個表進行了DML操作以后,更改前的紀(jì)錄信息被存放于回滾段,其作用有兩個:1、當(dāng)進程要求回滾(ROLLBACK )的時候,使用回滾段中信息是紀(jì)錄復(fù)原;2、 保持?jǐn)?shù)據(jù)讀的一致性,當(dāng)一個進程從某個表中讀紀(jì)錄的時候,ORACLE返回的是當(dāng)讀開始或者進程開始時的紀(jì)錄, 如果在讀取過程中有其他進程更改了表紀(jì)錄,ORACLE就會從回滾段中讀取當(dāng)讀操作開始時的數(shù)據(jù)?;貪L段中信息并不是持久有效的,當(dāng)進程提交(COMMIT )或者回滾(ROLLBACK )的時候,回滾段就被釋放了。當(dāng)一個進程在執(zhí)行一個大查詢的時候,如果在查詢的過程中所讀取得的表被更改而且更改COMMIT太久,那回滾段中的 前照”就有可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論