create rollback segment "rs01" tablespace "ts_name"
storage ( initial 8m next 8m maxextents unlimited);
回滾段管理一直是oracle資料庫管理的乙個難題,本文通過例項介紹oracle回滾段的概念,用法和規劃及問題的解決。
回滾段概述
回滾段用於存放資料修改之前的值(包括資料修改之前的位置和值)。回滾段的頭部包含正在使用的該回滾段事務的資訊。乙個事務只能使用乙個回滾段來存放它的回滾資訊,而乙個回滾段可以存放多個事務的回滾資訊。
回滾段的作用
事務回滾:當事務修改表中資料的時候,該資料修改前的值(即前影像)會存放在回滾段中,當使用者回滾事務(rollback)時,oracle將會利用回滾段中的資料前影像來將修改的資料恢復到原來的值。
事務恢復:當事務正在處理的時候,例程失敗,回滾段的資訊儲存在重做日誌檔案中,oracle將在下次開啟資料庫時利用回滾來恢復未提交的資料。
讀一致性:當乙個會話正在修改資料時,其他的會話將看不到該會話未提交的修改。而且,當乙個語句正在執行時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性)。當oracle執行select語句時,oracle依照當前的系統改變號(system change number-scn)來保證任何前於當前scn的未提交的改變不被該語句處理。可以想象:當乙個長時間的查詢正在執行時,若其他會話改變了該查詢要查詢的某個資料塊,oracle將利用回滾段的資料前影像來構造乙個讀一致性檢視。
事務級的讀一致性
oracle一般提供sql語句級(sql statement level)的讀一致性,可以用以下語句來實現事務級的讀一致性。
set transaction read only;
或: set tannsaction serializable;
以上兩個語句都將在事務開始後提供讀一致性。需要注意的是,使用第二個語句對資料庫的併發性和效能將帶來影響。
回滾段的種類
系統回滾段:當資料庫建立後,將自動建立乙個系統回滾段,該回滾段只用於存放系統表空間中物件的前影像。
回滾段的使用
分配回滾段:當事務開始時,oracle將為該事務分配回滾段,並將擁有最少事務的回滾段分配給該事務。事務可以用以下語句申請指定的回滾段:
set transtraction use rollback segment rollback_segment
事務將以順序,迴圈的方式使用回滾段的區(extents),當當前區用滿後移到下乙個區。幾個事務可以寫在回滾段的同乙個區,但每個回滾段的塊只能包含乙個事務的資訊。
例如(兩個事務使用同乙個回滾段,該回滾段有四個區):
1、事務在進行中,它們正在使用回滾段的第三個區;
2、當兩個事務產生更多的回滾資訊,它們將繼續使用第三個區;
3、當第三個區滿後,事務將寫到第四個區,當事務開始寫到乙個新的區時,稱為翻轉(wrap);
4、當第四個區用滿時,如果第乙個區是空閒或非活動(使用該區的所有事務完成而沒有活動的事務)的,事務將接著使用第乙個區。
回滾段的擴張(extend)
當當前回滾段區的所有塊用完而事務還需要更多的回滾空間時,回滾段的指標將移到下乙個區。當最後乙個區用完,指標將移到第乙個區的前面。回滾段指標移到下乙個區的前提是下乙個區沒有活動的事務,同時指標不能跨區。當下乙個區正在使用時,事務將為回滾段分配乙個新的區,這種分配稱為回滾段的擴充套件。回滾段將一直擴充套件到該回滾段區的個數到達回滾段的引數maxextents的值時為止。
回滾段的**和optimal引數
optimal引數指明回滾段空閒時收縮到的位置,指明回滾段的optimal引數可以減少回滾段空間的浪費。
建立回滾段
語法:
create [public] rollback segment rollback_segment
[tablespace tablespace]
[storage ([initial integer[k|m]] [next integer[k|m]]
[minextents integer]
[maxtents ]
[optimal ]) ]
注: 回滾段可以在建立時指明private或public,一旦建立將不能修改。
minextents 必須大於等於2
pctincrease必須是0
optimal如果要指定,必須大於等於回滾段的初始大小(由minextents指定)
建議:
一般情況下,initial=next
設定optimal引數來節約空間的使用
不要設定maxextents為unlimited
回滾段應建立在乙個特定的回滾段表空間內
例: create rollback segment rbs01
tablespace rbs
storage ( initial 100k next 100k minextents 10
maxextents 500 optimal 1000k);
alter rollback segment rollback_segment online;
例: alter rollback segment rbs01 online;
rollback_segment=(rbs01,rbs02)
修改回滾段的儲存引數
可以使用alter rollback segment命令修改回滾段的儲存引數(包括optimal,maxextents)。
語法:
alter rollback segment rollback_segment
[storage ([next integer[k|m]]
[minextents integer]
[maxextents ]
[optimal ]) ]
例: alter rollback segment rbs01 storage (maxextents 1000);
**回滾段的空間
如果指定了回滾段的optimal引數,oracle將自動**回滾段到optimal指定的位置。使用者也可以手動**回滾段的空間。
語法:
alter rollback segment rollback_segment shrink [to integer [k|m]];
說明:
如果不指明to integer的數值,oracle將試圖**到optimal的位置。
例: alter rollback segment rbs01 shrink to 2m;
使回滾段離線
為了達到以下兩個目的將要回滾段離線:
1.阻止新的事務使用該回滾段;
2.該回滾段必須刪除。
語法:
alter rollback segment rollback_segment offline;
例: alter rollback segment rbs01 offline;
說明:
如果有事務正在使用該回滾段,執行該命令後,回滾段的狀態將是pending offline。事務結束後,狀態將改為offline,可以通過v$rollstat查詢回滾段的狀態。
刪除回滾段
當回滾段不再需要或要重建以改變initial,next或minextents引數時,可以將其刪除。要刪除回滾段,不許使該回滾段離線。
語法:
drop rollback segment rollback_segment;
例: drop rollback segment rbs01;
查詢回滾段的資訊
所用資料字典:dba_rollback_segs
可以查詢的資訊:回滾段的標識(segment_id)、名稱(segment_name)、所在表空間(tablespace_name)、型別(owner)、狀態(status)。
例: sql>select segment_name,tablespace_name,owner,status from dba_rollback_segs;
回滾段的統計資訊
資料字典:v$rollname,v$rollstat
例: sql>select n.name,s.extents,s.rssize,s.optsize,s.hwmsize,s.xacts,s.status
from v$rollname n,v$rollstat s
where n.usn=s.usn;
回滾段的當前活動事務
資料字典:v$session,v$transaction
例: sql>select s.username,t.xidusn,t.ubafil,t.ubablk,t.used_ublk
from v$session s,v$transaction t
where s.saddr=t.ses_addr;
username xidusn ubafil ubablk used_ublk
system 2 2 7 1
scott 1 2 163 1
2 rows selected.
回滾段的數量規劃
對於oltp系統,存在大量的小事務處理,一般建議:
數量多的小回滾段;每四個事務乙個回滾段;每個回滾段不要超過十個事務。
對於批處理,一般建議:
少的大回滾段;每個事務乙個回滾段。
回滾段的問題及解決方法
問題一:事務要求的回滾段空間不夠,表現為表空間用滿(ora-01560錯誤),回滾段擴充套件到達引數maxextents的值(ora-01628)。
解決方法:向回滾段表空間新增檔案或使已有的檔案變大;增加maxextents的值。
問題二:讀一致性錯誤(ora-01555 snapshot too old)
解決方法:增加minextents的值,增加區的大小,設定乙個高的optimal值。
ORACLE回滾段管理(上)
回滾段管理一直是oracle資料庫管理的乙個難題,本文通過例項介紹oracle回滾段的概念,用法和規劃及問題的解決。回滾段概述 回滾段用於存放資料修改之前的值 包括資料修改之前的位置和值 回滾段的頭部包含正在使用的該回滾段事務的資訊。乙個事務只能使用乙個回滾段來存放它的回滾資訊,而乙個回滾段可以存放...
oracle檢視回滾段資訊
select rownum,sys.dba rollback segs.segment name name,v rollstat.extents extents,v rollstat.rssize size in bytes,v rollstat.xacts xacts,v rollstat.get...
oracle資料回滾
當我們修改了表的資料並且提交了事務後,想回滾資料怎麼辦?先根據sql執行歷史確定資料回滾時間點 select sql text,last load time from v sql where sql text like update order by last load time desc 再將資料...