DBA手記 - optimizer_mode影響一個SQL語句是否可以執行

zecaro發表於2011-04-03
今天現場人員報告說:同樣的資料,同樣的SQL,在一個產品資料庫中可以執行,但是在測試資料庫中總是報錯。 檢查步驟如下: 1。在兩個資料庫中分別執行SQL,驗證是否如現場人員報告的情況,結果屬實。 2。檢視SQL語句,瞭解SQL的含義,此時發現該SQL編寫不太理想,改寫以後在兩個資料庫中都執行正常,不過這是其它的問題,此處不表 3。檢查在兩個庫中,該SQL的執行計劃是否相同,結果不同。 4。檢查兩個庫的版本是否相同,結果相同。 5。檢查兩個庫中的最佳化模式是否相同,結果不同,此時用alter session修改執行報錯的那個資料庫的最佳化模式,再次檢視執行計劃,發現已經相同了,再次執行SQL,發現可以正常執行。 6。對於此案例,到上面第5步已經可以結束了,如果第5步中發現最佳化模式相同,那麼這步就繼續可以檢視兩個庫中兩張表的統計資訊是否不同 7。如果第6步中還是相同,那麼繼續檢查其它最佳化相關的引數,比如optimizer_index_cost_adj等 8。如果還相同,那麼去查metalink,google,通常可以發現這是一個oracle的bug,確認自己的情況是否屬於這個bug。。。 上面是發現一個問題時候我個人的大致處理方法,也許可以給newbies一些幫助。
連結:http://blog.csdn.net/kamus/archive/2005/02/01/276535.aspx

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23650854/viewspace-691627/,如需轉載,請註明出處,否則將追究法律責任。

相關文章