搜索了一下,原来是把32位的数据库恢复到64位的数据库了。找到解决方案如下:
Cause:-
The database on the new location was built using datafiles from a different word-size database. For example, you used the datafiles from a 64-bit database for your new 32-bit database OR you used the datafiles from a 32-bit database for your new 64-bit database. Either of these scenarios results in PL/SQL objects that are inconsistent with the Oracle executable.
Solution:-
SQL> shutdown immediate; SQL> startup upgrade; SQL> @O R A C L E H O M E / r d b m s / a d m i n / u t l i r p ; S Q L > s h u t d o w n i m m e d i a t e ; S Q L > s t a r t u p ; S Q L > @ @ ORACLE_HOME/rdbms/admin/utlirp; SQL> shutdown immediate; SQL> startup; SQL> @@ORACLE H OME/rdbms/admin/utlirp;SQL>shutdownimmediate;SQL>startup;SQL>@@ORACLE_HOME/rdbms/admin/utlrp;
其中utlirp.sql 的作用是把相关内容全部在新平台下编译一遍,utlrp.sql的作用是编译所有失效对象。