查看: 14708|回复: 27

[精华] DBA工作备忘录之一:用events 跟踪解决不能创建物化试图一例

[复制链接]
论坛徽章:
60
2007年度最佳版主
日期:2008-04-03 16:46:15现任管理团队成员
日期:2011-05-07 01:45:08双黄蛋
日期:2011-06-15 17:03:34ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
跳转到指定楼层
1#
发表于 2004-5-15 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在工作中,需要从DBlink同步数据.

由于是一个小型的统计系统.决定创建物化试图(materialized view)便于两边系统的数据同步.

远程系统是另一家公司维护的产品.接口也是由他们提供.

按照接口标准创建DBlink后.
准备创建物化试图:

[php]
CREATE MATERIALIZED VIEW SUBSCRIPTION_TAB
BUILD IMMEDIATE
REFRESH complete START WITH SYSDATE NEXT trunc(SYSDATE) + 1
AS SELECT * FROM SUBSCRIPTION_TAB@SMGR;

[/php]

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

[php]
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       .


[/php]
论坛徽章:
60
2007年度最佳版主
日期:2008-04-03 16:46:15现任管理团队成员
日期:2011-05-07 01:45:08双黄蛋
日期:2011-06-15 17:03:34ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
2#
 楼主| 发表于 2004-5-15 23:05 | 只看该作者
SQL>desc SUBSCRIPTION_TAB@SMGR

发现输出正常.

检查远程接口对象(SUBSCRIPTION_TAB)属性:为正常的数据表.

发现该表无主键,但是和ORA-00942错误无关.

暂且不表.

使用道具 举报

回复
论坛徽章:
60
2007年度最佳版主
日期:2008-04-03 16:46:15现任管理团队成员
日期:2011-05-07 01:45:08双黄蛋
日期:2011-06-15 17:03:34ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
3#
 楼主| 发表于 2004-5-15 23:19 | 只看该作者
查找Metalink .这种问题找这个最快了

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

1 远程对象为同义词,而对应的表无mv log
2 global_name 的问题
3 Bug.
4 MLOG$_ 的问题.要重新创建MV log
...
n others

快刀斩乱麻加上猜测,发现以上皆非



此过程花费时间若干,眼睛花了好几回.

还有我们有最后一招:

set events '942 trace name errorstack level 10'

使用道具 举报

回复
论坛徽章:
60
2007年度最佳版主
日期:2008-04-03 16:46:15现任管理团队成员
日期:2011-05-07 01:45:08双黄蛋
日期:2011-06-15 17:03:34ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
4#
 楼主| 发表于 2004-5-15 23:25 | 只看该作者
设定跟踪,

[php]
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

...................[/php]

此过程如果执行中如果提示用户无权限,需要作适当的授权

然后找到我们的Trace 文件:

[php]

[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-rw----    1 oracle   oracle       1677 May 14 14:49 stat_ora_1046.trc
-rw-rw----    1 oracle   oracle        631 May 15 19:35 stat_ora_14864.trc
-rw-rw----    1 oracle   oracle        631 May 15 19:42 stat_ora_15187.trc
-rw-rw----    1 oracle   oracle        631 May 15 20:57 stat_ora_18540.trc
-rw-------    1 oracle   oracle     943813 May 15 21:41 stat_ora_20358.trc  //This one!

....
[/php]

打开该文件,看了半天,没看太明白.乱糟糟的一大堆内容,头疼.还是格式化一下再看:

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

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

[php]

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".CURRVAL@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
--------------------------


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

————————————————————
帮你编辑一下,去掉两个自动加上的email标记
-Kamus

使用道具 举报

回复
论坛徽章:
63
版主7段
日期:2012-05-15 15:24:11itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-10 14:34:59马上加薪
日期:2015-01-08 15:39:192015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
5#
发表于 2004-5-15 23:29 | 只看该作者
不错

使用道具 举报

回复
论坛徽章:
60
2007年度最佳版主
日期:2008-04-03 16:46:15现任管理团队成员
日期:2011-05-07 01:45:08双黄蛋
日期:2011-06-15 17:03:34ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
6#
 楼主| 发表于 2004-5-15 23:30 | 只看该作者
[php]SELECT * FROM "witsdba"."SUBSCRIPTION_TAB"@SMGR.US.ORACLE.COM

...
[/php]
先从这句下手,从sqlplus 命令中输入,查询看看:
[php]
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
...
[/php]
Faint ,不太可能阿.

刚才desc SUBSCRIPTION_TAB@SMGR 不是还好好的么?

莫非是,莫非是witsdba导的鬼?

SQL> c/witsdba/WITSDBA

查询,居然OK.

抽取dblink SMGR 的ddl :
[php]
CREATE DATABASE LINK SMGR  CONNECT TO "witsdba"  IDENTIFIED BY "mypasswd"  USING 'smgr';
...
[/php]

"witsdba" ??!!

删掉,重新创建.
[php]
CREATE DATABASE LINK SMGR  CONNECT TO WITSDBA IDENTIFIED BY "mypasswd"    USING 'smgr'
/
...
[/php]
执行SQL,创建物化试图.一切正常。

使用道具 举报

回复
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
7#
发表于 2004-5-15 23:34 | 只看该作者
原来如此,真是开了眼。

使用道具 举报

回复
论坛徽章:
60
2007年度最佳版主
日期:2008-04-03 16:46:15现任管理团队成员
日期:2011-05-07 01:45:08双黄蛋
日期:2011-06-15 17:03:34ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
8#
 楼主| 发表于 2004-5-15 23:39 | 只看该作者

打扫战场,做个总结

以上涉及到具体的表名字因为设计到安全问题均已经作了适当的处理。

整个过程比较关键的还是alter session set events '942 trace name errorstack level 10' 这一步

很多时候,如果DBA在Metalink上提交一个Tar的话。Oracle技术支持人员会要求用户按照一定操作提交Trace文件。

出于其他的原因(开始还以为是个Bug),只好自己动手了。而且,瞎猫碰上了死耗子,碰巧解决了问题。

希望对大家有所帮助。欢迎加入讨论

使用道具 举报

回复
论坛徽章:
63
版主7段
日期:2012-05-15 15:24:11itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-10 14:34:59马上加薪
日期:2015-01-08 15:39:192015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
9#
发表于 2004-5-15 23:40 | 只看该作者
前段时间,遇到一个很 奇怪的 问题 :
某个VIEW里用到了db_link,  select count(*) 没有问题,
但我recompile 该view 时,却发现该view是失效的.

使用道具 举报

回复
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
10#
发表于 2004-5-15 23:41 | 只看该作者
对event不很了解,'942 trace name errorstack level 10' 每个单词什么意思啊?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表