反思一個問題(在應用系統上修改表)

itpremier發表於2007-08-13

應用系統中,由於業務需要,修改了原來的表TABWARE,並改名為TABWARE2,
同時建立一個檢視TABWARE,所以應用程式沒有改。用了一天以後,
ORACLE 核心報錯:
--- pieces excerpt from alert_SID.LOG .
Mon Aug 13 14:04:18 2007
Errors in file d:oracleadminhqerpudumphqerp_ora_3620.trc:
ORA-00600: 內部錯誤程式碼, 引數: [kksfbc-reparse-infinite-loop],

[0x38AEC0E0], [], [], [], [], [], []

[@more@]

反思一個問題(在應用系統上修改表)
應用系統中,由於業務需要,修改了原來的表TABWARE,並改名為TABWARE2,
同時建立一個檢視TABWARE,所以應用程式沒有改。用了一天以後,
ORACLE 核心報錯:
--- pieces excerpt from alert_SID.LOG .
Mon Aug 13 14:04:18 2007
Errors in file d:oracleadminhqerpudumphqerp_ora_3620.trc:
ORA-00600: 內部錯誤程式碼, 引數: [kksfbc-reparse-infinite-loop],

[0x38AEC0E0], [], [], [], [], [], []

Mon Aug 13 14:34:01 2007
Errors in file d:oracleadminhqerpudumphqerp_ora_2384.trc:
ORA-00600: internal error code, arguments: [kksfbc-reparse-infinite-loop],

[0x38D3817C], [], [], [], [], [], []

---PARAGRAPH EXCERPT FROM UDUMP/SID_ORA_3032.TRC
Reparse from kzp.c-1106
Compilation environment difference Failed sharing : 0
Change in cursor environment
SQL pgadep:0 pgapls:0 user
Compilation environment difference Failed sharing : 0
Change in cursor environment
SQL pgadep:0 pgapls:0 user
Compilation environment difference Failed sharing : 0
Change in cursor environment
SQL pgadep:0 pgapls:0 user
Compilation environment difference Failed sharing : 0
Change in cursor environment
SQL pgadep:0 pgapls:0 user

系統前臺的情況是剛連上的SESSION,只要選擇表TABWARE,就會出錯,且過了一會兒

就自動斷開連線。
我剛開始時也沒有看後臺的ALTER_log 和 user trace file,誤認為LISTEN出錯,就重

啟了TNS LISTEN。
結果,並沒有解決問題。所以才想起來要看一下後臺轉儲檔案。
這一看,心中就大概明白怎麼回事了,於是開始重新整理SHARED_POOL.
ALTER SYSTEM FLUSH SHARED_POOL ;
然後再回到前後執行相同的操作,系統終於恢復正常了。MY GOD,竊喜一下。
最後做個總結吧,對今後相類似的修改應用系統表,並建立檢視取代的方法作個參考


1,修改原表,增加欄位 PROPS, 作為條件判斷用。
2,重新命名錶名。
3,建立檢視,名字與原表名相同(應用將檢視當作表操作不會有太大影響的)
4,如果有其它SCHEMA 建立了對原表的同義詞,由於SYNONYM不會自動更新,所以需要

考慮是否重建。

重點提示:
1,ORACLE很智慧的,會自動更新引用,如TRIGGER,TABLE PRIVILEGE
但是同義詞SYNONYM不會更新。
如:更新表TABWARE為TABWARE2,那麼TRIGGER 自動重編譯並REFERENCE TABWARE2
GRANT ALL ON TABWARE 自動更新為 GRANT ALL ON TABWARE2
2,建立的檢視假如有條件PROPS=1 那麼,最好將PROPS欄位的預設值改為1,這是因為
應用中當一個表新增記錄時,可能會級聯在其它表中新增記錄,如果未設定符合檢視
條件的值,在往其它表中級聯新增時就出錯了(因為在檢視找不到新加的記錄)。
3,我修改了一個系統引數:cursor_sharing=FORCE (DEFAULT IS EXACTLY).
也可能是由於這個原因吧,在將表改名,重建同名檢視時,系統卻不能重新整理LIBRARY

CACHE。
所以才會出錯,害得大家都心慌腳亂。

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

相關文章