国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

用events跟蹤解決不能創(chuàng)建物化試圖一例

2024-07-21 02:33:49
字體:
供稿:網(wǎng)友

  最近在工作中,需要經(jīng)過DBlink同步數(shù)據(jù)。由于是一個(gè)小型的統(tǒng)計(jì)系統(tǒng)。決定創(chuàng)建物化試圖(materialized view) 便于兩邊系統(tǒng)的數(shù)據(jù)同步。遠(yuǎn)程系統(tǒng)是另一家公司維護(hù)的產(chǎn)品,接口也是由他們提供。按照接口標(biāo)準(zhǔn)創(chuàng)建DBlink后.預(yù)備創(chuàng)建物化試圖.
  
  創(chuàng)建MV的代碼:
  
  CREATE MATERIALIZED VIEW subscription_tab
  BUILD IMMEDIATE REFRESH COMPLETE
  START WITH SYSDATE
  NEXT TRUNC ( SYSDATE ) + 1
  AS SELECT * FROM subscription_tab@SMGR;
  
  不料想,執(zhí)行之后語句報(bào)告錯(cuò)誤:
  
  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;
  
  發(fā)現(xiàn)輸出正常. 檢查遠(yuǎn)程接口對象(SUBSCRIPTION_TAB)屬性:為正常的數(shù)據(jù)表. 檢查后得知該表無主鍵, 但是和ORA-00942錯(cuò)誤無關(guān). 暫且不表.
  
  查找Metalink,搜索出來一堆的帖子,歸納一下可能的原因:
  
  1 遠(yuǎn)程對象為同義詞,而對應(yīng)的表無mv log
  2 global_name 的問題
  3 Bug.
  4 MLOG$_ 的問題.要重新創(chuàng)建MV log
  ...
  N... others...
  
  快刀斬亂麻加上胡亂猜測,判定以上皆非.( 此過程花費(fèi)時(shí)間若干,眼睛花了好幾回. )
  
  還有我們有最后一招:
  
  set events '942 trace name errorstack level 10' ....
  
  設(shè)定跟蹤:
  
  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
  ......
  此過程假如執(zhí)行中假如提示用戶無權(quán)限,需要作適當(dāng)?shù)氖跈?quán). 退出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 943813 May 15 21 : 41 stat_ora_20358 . trc
  
  [oracle@stat udump]$ tkPRof stat_ora_20358.trc SNAPSHOT.sql
  
  查看 SNAPSHOT.sql,這回內(nèi)容還算清楚,發(fā)現(xiàn)主要相關(guān)內(nèi)容如下:
  
  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應(yīng)該是:
  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的一個(gè)Bug.
  
  抽取dblink SMGR 的ddl :
  CREATE DATABASE LINK SMGR
  CONNECT TO "witsdba" IDENTIFIED BY "mypasswd" USING 'smgr';
  "witsdba" ??!!刪掉,重新創(chuàng)建:
  CREATE DATABASE LINK SMGR
  CONNECT TO WITSDBA IDENTIFIED BY "mypasswd" USING 'smgr';
  執(zhí)行SQL,創(chuàng)建物化試圖.一切正常。

  
  打掃戰(zhàn)場,做個(gè)總結(jié)
  
  以上涉及到具體的表名字因?yàn)樵O(shè)計(jì)到安全問題均已經(jīng)作了適當(dāng)?shù)奶幚怼?整個(gè)過程比較要害的還是 alter session set events '942 trace name errorstack level 10' 這一步. 很多時(shí)候, 假如DBA在 Metalink上提交一個(gè)Tar的話。Oracle技術(shù)支持人員會(huì)要求用戶按照一定操作提交Trace文件。出于其他的原因(開始還以為是個(gè)Bug),只好自己動(dòng)手了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 台江县| 保山市| 宝应县| 石台县| 曲松县| 湟源县| 长顺县| 海阳市| 滦南县| 荆门市| 静海县| 祥云县| 南和县| 峨边| 南部县| 肃北| 宿迁市| 汾西县| 股票| 徐水县| 平南县| 日照市| 鹤岗市| 吴旗县| 永安市| 乌拉特后旗| SHOW| 浙江省| 宁乡县| 永寿县| 洪洞县| 抚松县| 浏阳市| 清流县| 游戏| 禹州市| 秦皇岛市| 茌平县| 茌平县| 济阳县| 岑溪市|