ORA-06553: PLS-801: internal error [56319],以及64位oracle降級為32位的處理

zhang41082發表於2019-05-30

很早之前給開發建了兩套環境,今天有同事提出說兩套環境經過長時間的折騰,兩邊很多不一致,於是決定從一個庫來同步另一個庫。首先想到的最簡單的辦法就是把源庫宕下來,然後冷備過去,然後得到兩個完全一致的庫。

等做完了,目標資料庫起來,登陸進去,一切正常。結果在執行最簡單的sql查詢的時候報錯,ORA-06553: PLS-801: internal error [56319],執行多個不同的sql反覆報這個錯誤。

[@more@]

網上搜了下,看到有人碰到過類似的情況,結果被我也撞上了。源庫是64位的OS,目標庫是32位的,暈!公司32位的機器都是老爺機,只有那麼兩三臺還被我碰上了。於是琢磨著怎麼能把這個庫起來。之前做過32位升級到64位的,不過那也是兩年前的事情了。於是繼續google,搜了半天也沒碰見過誰幹過類似的事情,於是把32位升級到64位的步驟看了一遍,發現好像當中也沒有做很多的操作,那應該把這個操作再做一遍,應該就可以把64位的資料檔案在32位的OS上起來了。最後果然成功了,簡單記錄一下操作過程。

1、修改初始化檔案,增加 _SYSTEM_TRIG_ENABLED = false引數
2、Stratup nomount
3、從源庫備份一個控制檔案,在目標庫上重新建立控制檔案。
4、Shutdown immediate
5、 Startup upgrade
6、@$ORACLE_HOME/rdbms/admin/utlirp.sql;
7、Shutdown immediate
8、Startup
9、@$ORACLE_HOME/rdbms/admin/utlrp.sql;
10、Shutdown immediate
11、再次修改初始化引數檔案,刪除引數 _SYSTEM_TRIG_ENABLED = false
12、Startup

轉換完成(當時是照網上一個文件做的,現在仔細看來1、2、3、4、11這些步驟貌似都不需要的,最最主要的就是使用utlirp來把相關內容全部在32位平臺下編譯一遍),順便補充下utlirp的作用:

Rem NAME
Rem utlirp.sql - UTiLity script to Invalidate Pl/sql modules
Rem
Rem DESCRIPTION
Rem This script can be used to invalidate and all pl/sql modules
Rem (procedures, functions, packages, types, triggers, views)
Rem in a database.
Rem
Rem This script must be run when it is necessary to regenerate the
Rem compiled code because the PL/SQL code format is inconsistent with
Rem the Oracle executable (e.g., when migrating a 32 bit database to
Rem a 64 bit database or vice-versa).
Rem
Rem Please note that this script does not recompile invalid objects
Rem automatically. You must restart the database and explicitly invoke
Rem utlrp.sql to recompile invalid objects.
Rem
Rem USAGE
Rem To use this script, execute the following sequence of actions:
Rem 1. Shut down the database and restart in UPGRADE mode
Rem (using STARTUP UPGRADE or ALTER DATABASE OPEN UPGRADE)
Rem 2. Run this script
Rem 3. Shut down the database and restart in normal mode
Rem 4. Run utlrp.sql to recompile invalid objects. This script does
Rem not automatically recompile invalid objects.
Rem
Rem NOTES
Rem * This script must be run using SQL*PLUS.
Rem * You must be connected AS SYSDBA to run this script.
Rem * This script expects the following files to be available in the
Rem current directory:
Rem standard.sql
Rem dbmsstdx.sql
Rem * There should be no other DDL on the database while running the
Rem script. Not following this recommendation may lead to deadlocks.
Rem

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

相關文章