ORACLE回滾段管理(下)
2024-08-29 13:31:34
供稿:網友
創(chuàng)建回滾段 語法: create [public] rollback segment rollback_segment [tablespace tablespace] [storage ([initial integer[k|m]] [next integer[k|m]] [minextents integer] [maxtents {integer|unlimited}] [optimal {integer[k|m]|null}]) ] 注: 回滾段可以在創(chuàng)建時指明private或public,一旦創(chuàng)建將不能修改。 minextents 必須大于等于2 pctincrease必須是0 optimal如果要指定,必須大于等于回滾段的初始大小(由minextents指定) 建議: 一般情況下,initial=next 設置optimal參數來節(jié)約空間的使用 不要設置maxextents為unlimited 回滾段應創(chuàng)建在一個特定的回滾段表空間內 例: create rollback segment rbs01 tablespace rbs storage ( initial 100k next 100k minextents 10 maxextents 500 optimal 1000k); 使回滾段在線 當回滾段創(chuàng)建后,回滾段是離線的,不能被數據庫使用,為了使回滾段被事務利用,必須將回滾 段在線。可以用以下命令使回滾段在線: 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 {integer|unlimited}] [optimal {integer[k|m]|null}]) ] 例: 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; 說明: 如果有事務正在使用該回滾段,運行該命令后,回滾段的狀態(tài)將是pending offline。事務結束后,狀態(tài) 將改為offline,可以通過v$rollstat查詢回滾段的狀態(tài)。 刪除回滾段 當回滾段不再需要或要重建以改變initial,next或minextents參數時,可以將其刪除。要刪除回滾段, 不許使該回滾段離線。 語法: drop rollback segment rollback_segment; 例: drop rollback segment rbs01; 查詢回滾段的信息 所用數據字典:dba_rollback_segs 可以查詢的信息:回滾段的標識(segment_id)、名稱(segment_name)、所在表空間(tablespace_name)、 類型(owner)、狀態(tài)(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. 回滾段的數量規(guī)劃 對于oltp系統,存在大量的小事務處理,一般建議: 數量多的小回滾段;每四個事務一個回滾段;每個回滾段不要超過十個事務。 對于批處理,一般建議: 少的大回滾段;每個事務一個回滾段。 回滾段的問題及解決方法 問題一:事務要求的回滾段空間不夠,表現為表空間用滿(ora-01560錯誤),回滾段擴展到達參數 maxextents的值(ora-01628)。 解決方法:向回滾段表空間添加文件或使已有的文件變大;增加maxextents的值。 問題二:讀一致性錯誤(ora-01555 snapshot too old) 解決方法:增加minextents的值,增加區(qū)的大小,設置一個高的optimal值。