ORA-01555故障解決案例
一個客戶在批量ORACLE 9.2.0.7平臺上一直無法批量載入處理資料,資料加
載執行了3個小時多,報ORA-01555錯誤。
通常出現該錯誤,第一個反應是UNDO表空間太小,我將表空間增加了1/3,增
加了undo _rention數值,依然報錯。我意識到不是undo空間不夠,通過監控,證實
了我的想法。應該是批量載入儲存過程語句有問題。
通過v$sql_plan監控儲存過程的執行計劃,發現以下執行計劃有問題,具體如下:
1、語句大體如下:
delect xxx from tabA
where 條件關係
and exist (select 1 from tabB where 條件關係)
and exist (select 1 from tabC where 條件關係)
tabA的索引: indx_tabA
tabB的索引: indx_tabB
tabC的索引: indx_tabC
2、通過v$sql_plan語句檢視執行計劃
select p.hash_value||'-'||p.child_number "statement_id",
p.cost "cost",
p.io_cost "io cost",
p.cardinality "card",
lpad(' ', 2*(level-1))||p.operation||' '||p.options||' '||p.object_name
"Operation"
from v$sql_plan p
where p.address in (select address from v$sql_plan
where id=0 and cost is not null)
and p.address in (select address from v$sql_plan
where object_owner = sys_context('USERENV', 'CURRENT_SCHEMA'))
start with p.id=0
connect by prior p.id=p.parent_id
and prior p.address=p.address
從執行計劃中我們發現,通過B-TREE索引進行bitmap的轉化,bitmap conversion
from rowid和bitmap conversion to rowid,這意味著優化器將indx_tabA和子查詢
indx_tabB和indx_tabC進行index_combine操作,造成了執行計劃錯誤。為此制定
了三個方案進行測試:
1、在引數檔案設定_b_tree_bitmap_plans=false
2、修改和重建索引
3、在語句中新增hint避免bitmap轉化
第一個方案,在測試機上測試,執行計劃正常,也能正常載入資料,但生產機不能停機,所以暫不採用;
第二方案,因為程式是從總局下發,分局原則上不允許對索引進行修改。
我自能採用第三方案,修改語句如下:
delete /* push_subq */ from tabA
where 條件關係
and exist (select /* no_unnest*/ 1 from tabB where 條件關係)
and exist (select /* no_unnest*/ 1 from tabC where 條件關係)
執行計劃按照我希望進行執行,整個批量載入發費10分鐘左右。
載執行了3個小時多,報ORA-01555錯誤。
通常出現該錯誤,第一個反應是UNDO表空間太小,我將表空間增加了1/3,增
加了undo _rention數值,依然報錯。我意識到不是undo空間不夠,通過監控,證實
了我的想法。應該是批量載入儲存過程語句有問題。
通過v$sql_plan監控儲存過程的執行計劃,發現以下執行計劃有問題,具體如下:
1、語句大體如下:
delect xxx from tabA
where 條件關係
and exist (select 1 from tabB where 條件關係)
and exist (select 1 from tabC where 條件關係)
tabA的索引: indx_tabA
tabB的索引: indx_tabB
tabC的索引: indx_tabC
2、通過v$sql_plan語句檢視執行計劃
select p.hash_value||'-'||p.child_number "statement_id",
p.cost "cost",
p.io_cost "io cost",
p.cardinality "card",
lpad(' ', 2*(level-1))||p.operation||' '||p.options||' '||p.object_name
"Operation"
from v$sql_plan p
where p.address in (select address from v$sql_plan
where id=0 and cost is not null)
and p.address in (select address from v$sql_plan
where object_owner = sys_context('USERENV', 'CURRENT_SCHEMA'))
start with p.id=0
connect by prior p.id=p.parent_id
and prior p.address=p.address
從執行計劃中我們發現,通過B-TREE索引進行bitmap的轉化,bitmap conversion
from rowid和bitmap conversion to rowid,這意味著優化器將indx_tabA和子查詢
indx_tabB和indx_tabC進行index_combine操作,造成了執行計劃錯誤。為此制定
了三個方案進行測試:
1、在引數檔案設定_b_tree_bitmap_plans=false
2、修改和重建索引
3、在語句中新增hint避免bitmap轉化
第一個方案,在測試機上測試,執行計劃正常,也能正常載入資料,但生產機不能停機,所以暫不採用;
第二方案,因為程式是從總局下發,分局原則上不允許對索引進行修改。
我自能採用第三方案,修改語句如下:
delete /* push_subq */ from tabA
where 條件關係
and exist (select /* no_unnest*/ 1 from tabB where 條件關係)
and exist (select /* no_unnest*/ 1 from tabC where 條件關係)
執行計劃按照我希望進行執行,整個批量載入發費10分鐘左右。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/354732/viewspace-721265/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【故障處理】ORA-01555
- 恢復案例:熱備期間例項故障解決
- ORA-01555 解決處理方案
- ORA-04031 故障解決案例詳細分析一則
- NFS故障解決NFS
- 【蓋國強】成功恢復案例:解決字典表誤Truncate故障
- 故障解決法(摘抄)
- ORA-01555: snapshot too old的分析與解決
- 【故障解決】OGG-00446 錯誤解決
- 【故障解決】enq: PS - contentionENQ
- metalink登陸故障解決!
- 【故障解決】IPCS和IPCRM使用
- 【故障解決】ORA-06502錯誤解決
- 常見硬碟故障大全 硬碟故障解決辦法大全硬碟
- oracle 9i下ORA-01555錯誤的解決方法Oracle
- zt_eygle成功恢復案例:解決字典表誤Truncate故障_diana_ada
- 解決docker: Error response from daemon故障DockerError
- Sentinel哨兵模式解決故障轉移模式
- 【Spark篇】---Spark故障解決(troubleshooting)Spark
- ORA-10873 故障解決
- Dataguard日常維護及故障解決
- TSM故障問題解決一則
- 解決儲存硬碟故障一則硬碟
- 兩個系統故障解決薦
- 【故障-ORACLE】OSWBB不能執行解決Oracle
- linux 故障解決方法彙總Linux
- cpu故障現象分析 CPU常見故障案例
- ORA-01555錯誤詳解
- 解決DNS解析故障的幾種方法DNS
- ORA-12516故障解決
- DVR常見故障原因及解決方法VR
- Rownum分頁故障解決一例
- TSM無法備份故障解決(續)
- 從一次故障解決想到的
- goldengate 故障及解決方法彙總Go
- 一次ASM環境故障解決ASM
- ORA-01152 故障解決
- 故障分析 | MySQL死鎖案例分析MySql