1

Java EE アプリケーションのバグを Oracle データベースに追跡しました。マテリアライズド ビューが正しく更新されていません。MV に対してクエリを実行すると、不適切で古いように見える外部キーが返されます。

では、このマテリアライズド ビューを修正または置換するにはどうすればよいでしょうか。どんな考えでも大歓迎です。

次のように、手動で更新してみました。

DBMS_MVIEW.REFRESH('PRODUCTDESCRIPTIONS', 'C');

「ORA-00942: テーブルまたはビューが存在しません」というエラーが発生しました。MV のサブクエリを手動で実行すると問題ないように見えるので、これがわかりません。

Apex Web インターフェイスは、MV が 1 年以上更新されていないことを示しているため、これは新しい問題ではありません。

更新プロセスのログを探しましたが、refresh.log ファイルが見つかりませんでした。

マテリアライズド ビューを単純なクエリに置き換えようとしましたが、遅すぎます。どういうわけかMVを書き直し/再構成/再インストールできれば幸いです。

データベースと OS のバージョン:

Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production

uname -a:
Linux <server name> 2.6.9-78.0.22.ELsmp #1 SMP Thu Apr 30 19:14:39 EDT 2009 i686 i686 i386 GNU/Linux

マテリアライズド ビューのソース コード:

CREATE MATERIALIZED VIEW  "PRODUCTDESCRIPTIONS"
  ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS" 
  BUILD IMMEDIATE
  USING INDEX 
  REFRESH COMPLETE ON DEMAND
  USING DEFAULT LOCAL ROLLBACK SEGMENT
  DISABLE QUERY REWRITE
  AS SELECT prdcts.primarykey AS product, 
prdcts.upcid AS productupcid, 
prdcts.description AS productdescription, 
prdctctgrs.primarykey AS productcategory, 
prdctctgrs.id AS productcategoryid, 
prdctctgrs.name AS productcategoryname, 
prdctpkgs.primarykey AS productpackage, 
prdctpkgs.name AS productpackagename FROM prdctctgrs, 
prdcts, 
prdctpkgs, 
prdctctgrstoprdcts, 
prdctstoprdctpkgs 
WHERE 
prdctctgrstoprdcts.productcategory = prdctctgrs.primarykey 
AND prdctctgrstoprdcts.product = prdcts.primarykey 
AND prdctstoprdctpkgs.product = prdcts.primarykey 
AND prdctstoprdctpkgs.productpackage = prdctpkgs.primarykey 
AND bitand(prdctctgrs.metaflags, 1)+0 = 0 
AND bitand(prdcts.metaflags, 1)+0 = 0 
AND bitand(prdctpkgs.metaflags, 1)+0 = 0 
AND bitand(prdctctgrstoprdcts.metaflags, 1)+0 = 0 
AND bitand(prdctstoprdctpkgs.metaflags, 1)+0 = 0
/
4

2 に答える 2

1

更新手順を実行するとき、選択元のテーブルの所有者として実行していますか? アクセスしているすべてのテーブルは、あなたに直接付与されていますか? ロールを介してテーブルが付与されている場合、更新手順ではそれらを表示できません。

于 2012-07-03T17:49:43.170 に答える