ORACLE start with connect by 報錯 ORA00600
ORACLE 10.2.0.3.0
平臺windows 2003
執行某應用時候出現如下錯誤:
插入資料表[ ]時出現 ORA-00600:內部錯誤程式碼,引數:[kkqcbydrv 1],[],[],[],[],[],[] 錯誤的
首先分析了下該應用,此為一介面程式,從另外一個應用系統裡面取得資料,執行到這一步,應該已經到了本地的統計使用者,在存檔之前出現的錯誤。因是遠端應用,聯絡也不那麼通暢,未詳細分析SQL中是否含有connect by子句。查詢了下網上的帖子,湖湘文化的帖子寫的比較詳細,認定為
Bug 6838105 - ORA-600 [kkqcbydrv:1] from CONNECT BY query [ID 6838105.8] |
,被確認影響的版本是10.2.0.3和10.2.0.4,
建議:
alter session set optimizer_features_enable='10.2.0.1';
這個引數調整優化器的版本
或者
Disable cost based transformation for connect-by:
alter session set "_optimizer_connect_by_cost_based"=false;
不過既然是隱含引數,自然是不推薦來更改的。
我們來看看官方文件對這個引數的解釋:
OPTIMIZER_FEATURES_ENABLE acts as an umbrella parameter for enabling a series of optimizer features based on an Oracle release number.
For example, if you upgrade your database from release 8.0.6 to release 9.2, but you want to keep the release 8.0.6 optimizer behavior, you can do so by setting this parameter to 8.0.6. At a later time, you can try the enhancements introduced in releases up to and including release 9.2 by setting the parameter to 9.2.0.
OPTIMIZER_FEATURES_ENABLE扮演一個保護引數,以便基於一個ORACLE版本號設定一系列優化器特性。
例如,如果你從8.0.6 升級到9.2,但又必須保持版本8.0.6的優化器行為,你可以把此引數設定為8.0.6即可。以後,你可以將此引數設定為9.2.0,在9.2版本或者高於此版本的系統中來嘗試新的增強特性。
利用這個引數的設定,可以檢視一條SQL在不同版本的優化器的執行情況。
它的值可以查詢相應版本的官方文件。
故決定採用第一種方法:
用超級使用者連線到本地的統計資料庫,執行命令:
SQL〉Alter system set optimizer_features_enable='10.2.0.1' scope=both;
再次執行應用,反饋回來的訊息是問題解決,特此記錄一下。
不過應該說明的是,這個引數不應該輕易修改,因為這個引數會影響整個資料庫,很可能會導致其它效能受到影響,應該經過認證再做更改更為妥當。
從10g開始,引數optimizer_features_enable是動態的了,這個引數在oracle9i中還是靜態的。