`
mikixiyou
  • 浏览: 1098956 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353144
社区版块
存档分类
最新评论

创建物化视图报ORA-6512不一定是bug

阅读更多

您知道在 oracle 上创建物化视图时,需要注意到什么吗?在出错的时候,该如何调试吗?

我最近遇到这样一个问题。在创建一个每天一次、全量更新物化视图时出错了。

报的错误是 ORA-6512 ,是 关于SYS.DBMS_SNAPSHOT_UTL 包的。

这是系统包的错误,这会是Oracle bug吗?

物化视图脚本很简单,同步异地的一个数据库中的一张表到本地数据库中来,属于常见的数据同步操作。

异地和本地的数据库版本都是 Oracle 10.2.0.3 。

CREATE MATERIALIZED VIEW V_JW_COURSETIMETABLE
REFRESH COMPLETE ON DEMAND
START WITH TO_DATE('28-05-2012 21:47:56', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + 1
AS
SELECT WID AS WID, KCM as KCM, JXBH AS JXBH, KKNF AS KKNF, KKXQM AS KKXQM, XQ AS XQ, JS AS JS, ZS AS ZS, JSGH AS JSGH
FROM USR_GXSJ.V_JW_COURSETIMETABLE@lk_rs_dpstar
where
(KKNF = '2011' AND KKXQM = '1') OR (KKNF = '2011' AND KKXQM = '2')

还有一点很郁闷。该物化视图之前是创建成功的,现在是删除掉重建就不行了。

(miki 西游的文档:原文链接链接 :  http://mikixiyou.iteye.com/blog/1543973   转载请著明出处和作者)

 

1.分析

我们首先检查物化视图创建语法,完全没有看出来错误。

我们再核实其中的 SELECT  操作,也能正常执行出结果。

之前这个物化视图视图是存在的,只是删除掉略作字段调整而重建一下而已。 

现在,我们该如何去分析和解决这个问题呢?

 

查官方文档:

在 oracle      metalink  查阅到这些信息,有一个 bug5015547  ,他的描述信息同我们的错误完全一致。文档为 Bug 5015547 : CANNOT CREATE A MATERIALIZED VIEW OVER A DATABASE LINK OR  A-942

文档中的信息如下:

Bug 5015547 : CANNOT CREATE A MATERIALIZED VIEW OVER A DATABASE LINK ORA-942
------------------

Security setup is :

Local side :

user_d - materialized view owner;

Remote side :

user_a - table owner;

user_b - has view on table in user_a's schema

user_c - has select privs on view in user_b's schema.

 

connect User_D/User_D

drop materialized view User_D.Table1;

CREATE MATERIALIZED VIEW User_D.Table1      REFRESH WITH ROWID      AS SELECT * FROM

 

the statement which is failing is :

ORA-942: table or view does not exist

ORA-6512: at "SYS.DBMS_SNAPSHOT_UTL", line 1543

ORA-2063: preceding 2 lines from TARMM

因为有如此类似的 bug 信息,所以决定先安装一下补丁包,试试看能否解决掉这个问题。 

(注,这里开始走了弯路,不相信自己判断,盲从官方文档)

2.解决过程

2.1安装补丁包

这是一个 RAC 架构的数据库,因此需要在每个节点上依次安装补丁包 5015547

安装过程如下:大家可以参考一下如何在 RAC 下依次安装小补丁包。

         一个节点一个节点地关闭数据库实例,ASM  实例,监听器应用

 

/data/oracle/home/5015547@edbrac3=>+ASM3$opatch apply -local            
Invoking OPatch 10.2.0.3.0

Oracle interim Patch Installer version 10.2.0.3.0
Copyright (c) 2005, Oracle Corporation.  All rights reserved..


Oracle Home       : /opt/app/oracle/product/10.2.0/db_1
Central Inventory : /opt/app/oracle/oraInventory
   from           : /var/opt/oracle/oraInst.loc
OPatch version    : 10.2.0.3.0
OUI version       : 10.2.0.3.0
OUI location      : /opt/app/oracle/product/10.2.0/db_1/oui
Log file location : /opt/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2012-05-28_13-11-46PM.log

ApplySession applying interim patch '5015547' to OH '/opt/app/oracle/product/10.2.0/db_1'
Invoking fuser to check for active processes.
Invoking fuser on "/opt/app/oracle/product/10.2.0/db_1/bin/oracle"

You selected -local option, hence OPatch will patch the local system only.


Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/opt/app/oracle/product/10.2.0/db_1')

Is the local system ready for patching?

Do you want to proceed? [y|n]
y
User Responded with: Y
Backing up files and inventory (not for auto-rollback) for the Oracle Home
Backing up files affected by the patch '5015547' for restore. This might take a while...
^[Backing up files affected by the patch '5015547' for rollback. This might take a while...

Patching component oracle.rdbms, 10.2.0.3.0...
Updating archive file "/opt/app/oracle/product/10.2.0/db_1/lib/libserver10.a"  with "lib/libserver10.a/kkzd.o"
ApplySession adding interim patch '5015547' to inventory

Verifying the update...
Inventory check OK: Patch ID 5015547 is registered in Oracle Home inventory with proper meta-data.
Files check OK: Files from Patch ID 5015547 are present in Oracle Home.
Running make for target ioracle

The local system has been patched and can be restarted.

 

终于执行安装完毕。

但是创建还是报同样的错误。

 

下面怎么办?

2.2使用  10046 event  分析

我们还有 10046 event 工具,可以进一步分析问题内部更详细的报错信息。
 

alter session set events '10046 trace name context forever, level 10';

在 udump  下,找到最新的 trc  文件,就是 10046 event  生成的日志文件。在文件中,我们发现了下面有用的信息。

=====================
PARSING IN CURSOR #3 len=152 dep=2 uid=137 oct=47 lid=137 tim=15360746465623 hv=3730321282 ad='d4484170'
begin   sys.dbms_snapshot_utl.get_pk_constraint_info@LK_RS_DPSTAR_FOR_USR_RS_APP (:mowner, :master, :pknm, :pktyp, :pkcols, :idxnm, :idxcols);  end;
END OF STMT
PARSE #3:c=0,e=24,p=0,cr=0,cu=0,mis=0,r=0,dep=2,og=1,tim=15360746465621
WAIT #3: nam='SQL*Net message to dblink' ela= 0 driver id=1413697536 #bytes=1 p3=0 obj#=320 tim=15360746465766
WAIT #3: nam='SQL*Net message from dblink' ela= 519 driver id=1413697536 #bytes=4 p3=0 obj#=320 tim=15360746466303
WAIT #3: nam='SQL*Net break/reset to dblink' ela= 22 driver id=1413697536 break?=0 p3=0 obj#=320 tim=15360746466342
EXEC #3:c=0,e=712,p=0,cr=0,cu=0,mis=0,r=0,dep=2,og=1,tim=15360746466429
ERROR #3:err=942 tim=1572940438
=====================
PARSE ERROR #1:len=248 dep=1 uid=137 oct=3 lid=137 tim=15360746466502 err=942
SELECT WID AS WID, KCM as KCM, JXBH AS JXBH, KKNF AS KKNF, KKXQM AS KKXQM, XQ AS XQ, JS AS JS, ZS AS ZS, JSGH AS JSGH
FROM V_JW_COURSETIMETABLE@LK_RS_DPSTAR_for_usr_rs_app
 where
 (KKNF = '2011' AND KKXQM = '1') OR (KKNF = '2011' AND KKXQM = '2')
EXEC #2:c=0,e=22751,p=0,cr=4,cu=11,mis=0,r=0,dep=0,og=1,tim=15360746466604
ERROR #2:err=942 tim=1572940438

 

报错的系统包是

begin   sys.dbms_snapshot_utl.get_pk_constraint_info@LK_RS_DPSTAR_FOR_USR_RS_APP (:mowner, :master, :pknm, :pktyp, :pkcols, :idxnm, :idxcols);  end;

我们在 sqlplus  界面中,只看到 sys.dbms_snapshot_utl  报错,其实真正报错的是存储过程   get_pk_constraint_info   。

从这个过程名称可以看出,这是再校验基础表的主键字段出错。

我们物化视图脚步中,没有指明是使用 rowid  还是 primary key  方式遍历数据。默认使用 primary key  。

这里很可能基表上没有了主键约束。

2.3处理方法

我暂时将物化视图脚步做了修改,增加 with rowid  子句,创建成功。具体脚步如下:

CREATE MATERIALIZED VIEW V_JW_COURSETIMETABLE
REFRESH COMPLETE ON DEMAND
START WITH TO_DATE('28-05-2012 21:47:56', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + 1

with rowid
AS
SELECT WID AS WID, KCM as KCM, JXBH AS JXBH, KKNF AS KKNF, KKXQM AS KKXQM, XQ AS XQ, JS AS JS, ZS AS ZS, JSGH AS JSGH
FROM USR_GXSJ.V_JW_COURSETIMETABLE@lk_rs_dpstar
 where
 (KKNF = '2011' AND KKXQM = '1') OR (KKNF = '2011' AND KKXQM = '2')

更值得推荐的方法是使用采用主键字段做刷新。在基础表上创建主键约束。

3.总结

在涉及到跨图的物化视图同步数据的开发操作时,一个最基本的要求时,基础表上有主键约束。

再深入一下,所有的表如无明确要求,都应该具有主键约束。

 

分享到:
评论

相关推荐

    初中语文文摘励志知恩不图报是做人智慧

    标题中的“初中语文文摘励志知恩不图报是做人智慧”主要探讨的是感恩与回报在人际关系中的处理方式,特别是如何正确地表达和接受善意。描述中的内容则通过电视剧中的情节,展示了施恩与受恩可能导致的复杂情感纠葛。...

    media-ctl 工具

    《media-ctl工具详解及其在DM3730平台的应用》 在数字媒体处理领域,TI(Texas Instruments)的DaVinci平台以其强大的多媒体处理能力备受赞誉。在该平台中,一个重要的工具就是"media-ctl",它专门用于视频采集通道...

    卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法

    标题描述的问题是用户在卸载了Visual Studio 2011 Developer Preview之后,发现SQL Server 2008 R2的Management Studio无法创建新的数据库关系图,提示“找不到指定的模块(MS Visual Database Tools)”的错误。...

    感恩老师国旗下讲话演讲稿.docx

    - **传统与现代的结合**:感恩教育融合了中国传统教育中的“施恩不图报”观念与西方感恩文化的精髓。 ### 5. 学生应具备的态度 - **感恩教师**:学生应当感激教师的辛勤付出,这不仅体现在言语上,更重要的是通过...

    AD初期学习总结aaa

    2. **新器件创建**:通过快捷键`TC`创建新器件,并使用`TW`为器件添加新的部件。 3. **格点设置**: - 管脚格点设置:使用`VGS`,设置管脚格点为100mil。 - 图形元素格点设置:同样使用`VGS`,但设置图形元素格...

    感恩老师的国旗下讲话文件.pdf

    在中国,虽然没有“感恩节”,但传统教育强调“施恩不图报”,感恩教育旨在传承这一优秀品质。 总结:这篇国旗下讲话强调了“关爱生命”的办学理念,提倡感恩教育,尤其是对老师的感恩,以培养全面发展的学生。感恩...

    Cesium 3Dtiles加载建筑

    Cesium 3Dtiles加载建筑 建筑渐变色 动态光线,自定义Shader纹理,适合cesium1.87版本以上,因为1.87版本增加了CustomShader,此文档为html,引用了在线cesium cdn,可直接运行,网上版本都是一段一段的,没有基础的...

    东北财经大学图书馆考试题目.doc

    7. 图报报刊一般不允许外借,仅限于馆内阅览,这是为了避免资源的丢失。 8. 借书数量达到上限时,借用他人借书证是解决方法之一,但需注意这可能受图书馆具体政策约束。 9. 手机图书馆应用提供了多种功能,如查询...

    春三年级语文下册 第二单元 7 九色鹿课时同步练习 湘教版-湘教版小学三年级下册语文试题.doc

    总的来说,这份练习旨在通过各种形式帮助学生巩固和提升语文基础知识,提高他们的阅读理解能力和语言运用能力,同时引导他们深入思考和分析课文中的道德观念和人生哲理,如施恩不图报和见利忘义的道德冲突。

    55班感恩社会,扶贫帮困班队活动总结.doc

    通过感恩教育,学生能学会图报,懂得回报父母的养育之恩,老师的教诲之恩,以及社会的关怀与帮助。 二、实践活动——扶贫帮困捐款 学生们积极参与到扶贫帮困的活动中,自发捐款,表达对社会弱势群体的关爱。此次...

    5月月考试题必修二七八单元必修三一二单元.doc

    试题中的“施恩图报非君子,恩将仇报是小人”以及“浪费一粒粮食就会遭到五雷轰顶”等思想,体现了道家的道德观和对自然的尊重。 3. **法家思想**:法家重视法律和制度,韩非子是其代表。"只要有一线希望,我们就尽...

    弟子规学习心得.pdf

    她深感“知恩当图报”和“百善孝为先”的重要性,感恩父母、师长以及所有给予帮助的人。她以实际行动践行孝道,更加频繁地回家探望父母,同时也培养了儿子的孝顺之心。这些细微的变化体现了《弟子规》在日常生活中的...

    食品行业报告:乳业

    中国人尊崇礼尚往来,但很多场合礼节已经不仅仅是传统文化的代表,而是为人处事之道,于是就出现“见面要礼,临别要礼,办事要礼,行商要礼,感恩要礼,图报也要礼”。在“面子”消费心理驱动下,中国人的消费经常...

    嵌入式学习经典资料与实例分析 完整版

    前段时间做了一个关于ARM9 2440资料的汇总帖,很高兴看到21ic和CSDN等论坛朋友们的支持和鼓励。当年学单片机的时候datasheet和...感激、图报,很简单的想法。希望这次整理的资料帖能对更多的嵌入式爱好者朋友带来帮助!

    纪检监察机关查办案件工作流程图

    纪检监察机关查办案件工作流程图报分管领导批准反映失实的说明情况必要时在一定范围内予以澄清有违纪事实但情节轻微不需追究党纪政纪责任的建议有关党组织做出恰当处理不立案处理组织实施报分管领导批准调查组负责实

    python爬取网页时response.status_code返回418,文件读取写入

    问题: response.status_code为418 问题描述: 当我使用Python的requests爬取网页时response和soup都是None,检查后发现response.status_code为418 错误描述: 经过网上查询得知,418的意思是被网站的反爬程序...

    Orange Channel鮮頻道介紹PPT模板.pptx

    2. 高清图报:视觉冲击力强,72秒的节目长度,提供新闻信息。 3. 当日天气:每三小时更新,预报未来三天的天气,支持个性化定制,内容来自中国天气网。 4. 世界天气:涵盖全球城市,内容长度48秒,同样来自中国天气...

Global site tag (gtag.js) - Google Analytics