分享
 
 
 

用events跟踪解决不能创建物化试图一例

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

最近在工作中,需要经过DBlink同步数据。由于是一个小型的统计系统。决定创建物化试图(materialized view) 便于两边系统的数据同步。远程系统是另一家公司维护的产品,接口也是由他们提供。按照接口标准创建DBlink后.预备创建物化试图.

创建MV的代码:

CREATE MATERIALIZED VIEW subscription_tab

BUILD IMMEDIATE REFRESH COMPLETE

START WITH SYSDATE

NEXT TRUNC ( SYSDATE ) + 1

AS SELECT * FROM subscription_tab@SMGR;

不料想,执行之后语句报告错误:

SQL > CREATE MATERIALIZED VIEW SUBSCRIPTION_TAB

2 BUILD IMMEDIATE

3 REFRESH complete START WITH SYSDATE NEXT trunc( SYSDATE ) + 1

4 AS SELECT * FROM SUBSCRIPTION_TAB@SMGR ;

AS SELECT * FROM SUBSCRIPTION_TAB@SMGR

*

ERROR at line 4 :

ORA - 00942 : table or view does not exist .

描述对象:

SQL>desc SUBSCRIPTION_TAB@SMGR;

SQL>select count(*) from SUBSCRIPTION_TAB@SMGR;

发现输出正常. 检查远程接口对象(SUBSCRIPTION_TAB)属性:为正常的数据表. 检查后得知该表无主键, 但是和ORA-00942错误无关. 暂且不表.

查找Metalink,搜索出来一堆的帖子,归纳一下可能的原因:

1 远程对象为同义词,而对应的表无mv log

2 global_name 的问题

3 Bug.

4 MLOG$_ 的问题.要重新创建MV log

...

N... others...

快刀斩乱麻加上胡乱猜测,判定以上皆非.( 此过程花费时间若干,眼睛花了好几回. )

还有我们有最后一招:

set events '942 trace name errorstack level 10' ....

设定跟踪:

SQL>ALTER SESSION SET max_dump_file_size = UNLIMITED;

Session altered .

SQL>ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';

Session altered .

SQL>ALTER SESSION SET EVENTS '942 trace name errorstack level 10';

Session altered .

SQL> CREATE MATERIALIZED VIEW SUBSCRIPTION_TAB

2 BUILD IMMEDIATE

3 REFRESH complete START WITH SYSDATE NEXT trunc( SYSDATE ) + 1

4 AS SELECT * FROM SUBSCRIPTION_TAB@SMGR ;

AS SELECT * FROM SUBSCRIPTION_TAB@SMGR

*

ERROR at line 4 :

ORA - 00942 : table or view does not exist

......

此过程假如执行中假如提示用户无权限,需要作适当的授权. 退出SQL*Plus,在具体的目录中找到我们的 Trace 文件:

[Oracle@stat udump]$ ls - ltr

......

- rw ------- 1 oracle oracle 1425501 May 13 18 : 23 stat_ora_1512. trc

- rw ------- 1 oracle oracle 1518962 May 13 18 : 26 stat_ora_1595. trc

- rw ------- 1 oracle oracle 1519241 May 13 18 : 27 stat_ora_1689. trc

- rw ------- 1 oracle oracle 1486910 May 13 18 : 31 stat_ora_1700. trc

- rw ------- 1 oracle oracle 943813May 15 21 : 41 stat_ora_20358 . trc

[oracle@stat udump]$ tkprof stat_ora_20358.trc SNAPSHOT.sql

查看 SNAPSHOT.sql,这回内容还算清楚,发现主要相关内容如下:

The following statements encountered a error during parse :

SELECT * FROM "witsdba"."SUBSCRIPTION_TAB"@SMGR.US.ORACLE.COM

Error encountered : ORA - 00942

----------------------------------------------------------------------------

SELECT "witsdba"."SUBSCRIPTION_TAB".CURRVAL@SMGR.US.ORACLE.COM

FROM DUAL@SMGR.US.ORACLE.COM

Error encountered : ORA - 02289

----------------------------------------------------------------------------

SELECT * FROM "PUBLIC"."SUBSCRIPTION_TAB"@SMGR.US.ORACLE.COM

Error encountered : ORA - 00942

----------------------------------------------------------------------------

SELECT "PUBLIC"."SUBSCRIPTION_TAB".CURRVA@SMGR.US.ORACLE.COM

FROM DUAL@SMGR.US.ORACLE.COM

Error encountered : ORA - 02289

----------------------------------------------------------------------------

CREATE MATERIALIZED VIEW SUBSCRIPTION_TAB

BUILD IMMEDIATE

REFRESH complete START WITH SYSDATE NEXT trunc( SYSDATE ) + 1

AS SELECT * FROM SUBSCRIPTION_TAB@SMGR

----------------------------------------------------------------------------

第一句有问题的SQL应该是:

SELECT * FROM "witsdba"."SUBSCRIPTION_TAB"@SMGR.US.ORACLE.COM

先从这句下手,从sqlplus 命令中输入,查询看看:

SQL>SELECT * FROM "witsdba"."SUBSCRIPTION_TAB"@SMGR.US.ORACLE.COM

2 /

SELECT * FROM "witsdba"."SUBSCRIPTION_TAB"@SMGR.US.ORACLE.COM

*

ERROR at line 1 :

ORA - 00942 : table or view does not exist

ORA - 02063 : preceding line from SMGR

...

Faint ,不太可能阿,希奇,刚才desc SUBSCRIPTION_TAB@SMGR 不是还好好的么? 莫非是,莫非是witsdba 搞的鬼?大小写的问题??

SQL> c/witsdba/WITSDBA

查询,居然OK.看来是碰到了Oracle的一个Bug.

抽取dblink SMGR 的ddl :

CREATE DATABASE LINK SMGR

CONNECT TO "witsdba" IDENTIFIED BY "mypasswd" USING 'smgr';

"witsdba" ??!!删掉,重新创建:

CREATE DATABASE LINK SMGR

CONNECT TO WITSDBA IDENTIFIED BY "mypasswd" USING 'smgr';

执行SQL,创建物化试图.一切正常。

打扫战场,做个总结

以上涉及到具体的表名字因为设计到安全问题均已经作了适当的处理。 整个过程比较要害的还是 alter session set events '942 trace name errorstack level 10' 这一步. 很多时候, 假如DBA在 Metalink上提交一个Tar的话。Oracle技术支持人员会要求用户按照一定操作提交Trace文件。出于其他的原因(开始还以为是个Bug),只好自己动手了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有