M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

MVリフレッシュでORA-01435エラー発生

オンプレに配備されているOracleDBからOCI(Oracle Cloud Infrastructure)に構築されたOracleDBに移行する作業中に見つかった問題。
現時点でも根本原因は不明だが回避策はわかったもの。

前提

事象

移行先のOracleDBのPDB B(移行元のインスタンスBに相当)側でMVリフレッシュを行ったところ、以下のようなエラーが発生。

行1でエラーが発生しました。:
ORA-01435: ユーザーが存在しません。
ORA-06512: "SYS.DBMS_SNAPSHOT_UTL", 行364
ORA-06512: "SYS.DBMS_SNAPSHOT_UTL", 行446
ORA-06512: "SYS.DBMS_SNAPSHOT", 行2821
ORA-06512: "SYS.DBMS_SNAPSHOT", 行3058
ORA-06512: "SYS.DBMS_SNAPSHOT", 行3017
ORA-06512: 行1

MVの定義情報を引き出して確認すると、このMVの定義で用いされているDBLINKには問題なし。DBLINK定義時に指定される認証情報は正しく、DBLINKにより参照されるユーザースキーマとそのオブジェクトも健在。手でクエリを実行すれば参照は可能。

原因

不明。
ただおそらく「前提」で述べた移行元DBにおける洗い替えの運用により、データディクショナリのデータ不整合が生じている模様。

回避策

PDB B側で、dba_snapshotsテーブルを参照。
dba_snapshots.master_ownerカラムの内容がMVの定義情報(のクエリに含まれるDBLINK経由の参照先)と不一致になっているものを抽出。
「前提」でも述べた「不要なユーザースキーマ」としてdropしていたものに該当していたので、このスキーマPDB A(インスタンスAに相当)に新規作成、さらにそのスキーマ内にMVから参照されるのと同名のテーブルを新規作成。
この状態でMVリフレッシュをトライしたところ成功。
この新規作成するテーブルのカラムや制約、索引などはでたらめで問題ない。