今天在進行資料泵匯入操作時,發現一個bug。
資料庫版本Oracle 10203 for Solaris RAC,執行匯入在處理表的統計資訊時報錯,錯誤資訊為:ORA-39083和ORA-917。
經過仔細排查,對比來源資料庫分析情況和目標資料庫的表分析情況,發現所有的分區表的統計資訊都沒有匯入。
基本確認問題是IMPDP在處理分區表的統計資訊時出現了問題。
可惜現在問題無法通過構造案例來重現:在目標資料庫中(RAC環境)嘗試建立分區表並執行資料泵的匯出和匯入,無法重現問題。將來源資料庫中出現問題的分區表匯入後,仿照來源資料庫方式收集統計資訊,問題仍然無法重現。
不過只要將來源資料庫中的統計資訊匯出,並在目標資料庫匯入,就可以重現這個問題:
bash-2.03$ impdp test/test directory=d_test dumpfile=zhejiang_order.dp logfile=zhejiang_order.log remap_schema=zhejiang:test include=table/statistics
Import: Release 10.2.0.3.0 - 64bit Production on 星期一, 31 12月, 2007 2:49:30
Copyright (c) 2003, 2005, Oracle. All rights reserved.
串連到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
本文URL地址:http://www.bianceng.cn/database/Oracle/201410/45379.htm
With the Partitioning, Real Application Clusters, OLAP and Data Mining options已成功載入/卸載了主表 "TEST"."SYS_IMPORT_FULL_01" 啟動 "TEST"."SYS_IMPORT_FULL_01": test/******** directory=d_test dumpfile=zhejiang_order.dp logfile=zhejiang_order.log remap_schema=zhejiang:test include=table/statistics 處理物件類型 TABLE_EXPORT/TABLE/TABLE_DATA處理物件類型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
ORA-39083: 物件類型 TABLE_STATISTICS 建立失敗, 出現錯誤:
ORA-06550: 第 12 行, 第 17 列:
PL/SQL: ORA-00917: 缺失逗號
ORA-06550: 第 4 行, 第 115 列:
PL/SQL: SQL Statement ignored
ORA-06550: 第 20 行, 第 17 列:
PL/SQL: ORA-00917: 缺失逗號
ORA-06550: 第 12 行, 第 161 列:
PL/SQL: SQL Statement ignored
ORA-06550: 第 28 行, 第 17 列:
PL/SQL: ORA-00917: 缺失逗號
ORA-06550: 第 20 行, 第 161 列:
PL/SQL: SQL Statement ignored
ORA-06550: 第 36 行, 第 17 列:
PL/SQL: ORA-00917: 缺失逗號
ORA-06550: 第 28 行, 第 1作業 "TEST"."SYS_IMPORT_FULL_01" 已經完成, 但是有 1 個錯誤 (於 02:49:38 完成)
根據關鍵資訊在metalink進行查詢,只發現一篇文章在測試別的bug時碰到這個問題,但是Oracle的開發人員並未對這個問題進行處理。
短時間之內找不到導致問題的真正原因,只好先記錄一下問題可能發生的原因和環境。這個問題說大不大,只要在匯入後重新收集一下分區表的資訊即可,但是說小也不小,如果忽略了這個錯誤,缺少統計資訊的是分區表,一般來說分區表都是系統中的大表,訪問也比較頻繁,更重要的是,由於分區表的存在Oracle肯定會使用CBO作為最佳化模式,這時就會使用預設的統計資訊,或者利用動態收集的資訊,很可能會產生一些效率很差的執行計畫,導致整個系統的癱瘓。
作者:51cto部落格 Oracle小混子