首页 > Linux操作系统 > Linux操作系统 > ORA-12028错误
在建立物化视图中碰到了这个错误,经过分析发现,导致错误的原因并非这个错误描述的原因。
首先看一下错误的发生:
SQL> CONN YANGTK/YANGTK@192.25.1.101/TEST101
已连接。
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod
PL/SQL Release 10.1.0.2.0 - Production
CORE 10.1.0.2.0 Production
TNS for 32-bit Windows: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 - Production
SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY);
表已创建。
SQL> CREATE MATERIALIZED VIEW LOG ON T;
实体化视图日志已创建。
SQL> CONN YANGTK/yangtk@192.25.1.103/ORA11G_P.YTK_THINKPAD
已连接。
SQL> SELECT * FROM V$VERSION;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Linux: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
SQL> CREATE DATABASE LINK TEST101.YTK
2 CONNECT TO YANGTK
3 IDENTIFIED BY YANGTK
4 USING '192.25.1.101/TEST101';
数据库链接已创建。
SQL> CREATE MATERIALIZED VIEW MV_T
2 REFRESH FAST
3 AS SELECT * FROM T@TEST101.YTK;
CREATE MATERIALIZED VIEW MV_T
*
第 1 行出现错误:
ORA-12028: 主体站点 @TEST101.YTK 不支持实体化视图类型
下面看看错误的详细描述:
ORA-12028: materialized view type is not supported by master site string
Cause: Pre-Oracle8 master sites are not able to support primary key or subquery materialized views that are able to perform. a fast refresh.
Action: Create a ROWID materialized view or use a master table from an Oracle8 site.
这是一个再简单不过的物化视图,没有任何特殊的语法,而出现这个错误显得十分的奇怪。根据错误信息描述,似乎造成问题的原因是源数据库版本太低。但是源数据库的版本是10.1,对于如此高的版本是不可能不支持简单的主键物化视图的。
那么肯定是其他原因导致了这个错误的产生。
下面尝试建立基于ROWID的物化视图:
SQL> CONN YANGTK/YANGTK@192.25.1.101/TEST101
已连接。
SQL> ALTER MATERIALIZED VIEW LOG ON T ADD ROWID;
实体化视图日志已更改。
SQL> CONN YANGTK/yangtk@192.25.1.103/ORA11G_P.YTK_THINKPAD
已连接。
SQL> CREATE MATERIALIZED VIEW MV_T
2 REFRESH FAST
3 WITH ROWID
4 AS SELECT * FROM T@TEST101.YTK;
CREATE MATERIALIZED VIEW MV_T
*
第 1 行出现错误:
ORA-04052: 在查找远程对象 SYS.DBMS_SNAPSHOT@TEST101.YTK 时出错
ORA-00604: 递归 SQL 级别 2 出现错误
ORA-06544: PL/SQL: 内部错误, 参数: [55916], [], [], [], [], [], [], []
ORA-06553: PLS-801: 内部错误 [55916]
ORA-02063: 紧接着 2 lines (起自 TEST101.YTK)
这个错误在前面的文章中已经介绍过了,是由于11g访问10g的远端过程造成的,关于这个错误更详细的描述可以参考:http://yangtingkun.itpub.net/post/468/468506
根据这种情况,其实可以推断出第一个错误ORA-12028的产生原因。第一次建立物化视图的时候,Oracle出现的错误应该也是找不到远端的对象,而Oracle内部可能做了相应的异常处理,认为这种找不到对应的包或过程的情况,是由于远端数据库的版本太低所致,因此出现了上面的ORA-12028错误。
因此实际上这个错误和上面链接中描述的错误是由于同一个bug造成的,只不过由于语法的区别,导致Oracle内部处理的不同,所产生的最终的现象也不同罢了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-422906/ ,如需转载,请注明出处,否则将追究法律责任。