文章詳情頁
ORACLE回滾段管理(下)
瀏覽:9日期:2023-11-17 15:37:33
創建回滾段 語法: CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment [TABLESPACE tablespace] [STORAGE ([INITIAL integer[KM]] [NEXT integer[KM]] [MINEXTENTS integer] [MAXTENTS {integerUNLIMITED}] [OPTIMAL {integer[KM]NULL}]) ] 注: 回滾段可以在創建時指明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[KM]] [MINEXTENTS integer] [MAXEXTENTS {integerUNLIMITED}] [OPTIMAL {integer[KM]NULL}]) ] 例: ALTER ROLLBACK SEGMENT rbs01 STORAGE (MAXEXTENTS 1000); 回收回滾段的空間 假如指定了回滾段的OPTIMAL參數,Oracle將自動回收回滾段到OPTIMAL指定的位置。用戶也可以手動 回收回滾段的空間。 語法: ALTER ROLLBACK SEGMENT rollback_segment SHRINK [TO integer [KM]]; 說明: 假如不指明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; USERNAMEXIDUSN UBAFIL UBABLKUSED_UBLK --------------- ----------- ----------- ----------- SYSTEM22 71 SCOTT 121631 2 rows selected. 回滾段的數量規劃 對于OLTP系統,存在大量的小事務處理,一般建議: 數量多的小回滾段;每四個事務一個回滾段;每個回滾段不要超過十個事務。 對于批處理,一般建議: 少的大回滾段;每個事務一個回滾段。 回滾段的問題及解決方法 問題一:事務要求的回滾段空間不夠,表現為表空間用滿(ORA-01560錯誤),回滾段擴展到達參數 MAXEXTENTS的值(ORA-01628)。 解決方法:向回滾段表空間添加文件或使已有的文件變大;增加MAXEXTENTS的值。 問題二:讀一致性錯誤(ORA-01555 SNAPSHOT TOO OLD) 解決方法:增加MINEXTENTS的值,增加區的大小,設置一個高的OPTIMAL值。
排行榜