質問

Oracle データベースを更新して、そのスキーマが 2 番目のデータベースと正確に一致するようにしようとしています。そうすることで、私は何かをホースでかけました。オブジェクトを作成または削除できません。

create or replace procedure eag.test
as
begin
    null;
end;

エラー:

ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist

作成または削除を実行しようとすると、同じエラーが発生します。何か案は?

編集:Oracle 10.2.0.4を実行中

役に立ちましたか?

解決

あなたは、破損したデータ辞書を持っています。

新しいデータベースを構築し、あなたは以上の処理の同期を開始することができます。この時間は、SYSDBAを使用していません。唯一のSYSDBAは、データ・ディクショナリを破壊する権限を持っています。

あなたがデータを必要とするが、あなたはまだEXPまたはEXPDPを使用してデータをエクスポートすることができるかもしれ上で起動することができます。

新しいデータベースをやり直すことができない場合。 SAR Oracleとサポートを開きます。他の誰かがこのを通してあなたを歩くことができるかもしれない場合でも、彼らは、Oracleサポートされている状態にデータベースの背中をもたらすことができるだけです。

他のヒント

は、データベース上の任意のDDLトリガーを持っている場合は価値をチェック。そこはおそらくMDSYSからのものに建てられたいくつかのですが、あなたが持つかもしれあなた自身(例えば、監査DDL用)

select owner, trigger_type, triggering_event, trigger_name, base_object_type, when_clause, description 
from dba_triggers d
where table_name is null
and status = 'ENABLED'
order by d.triggering_event, d.owner

これはデータベースが破損している可能性がありますが、急いではいけません。セッションおよびプロセスの制限を超えると、再帰的エラーが発生する可能性があります。

プロセス制限を超えている可能性はわずかです。現在インスタンスにはプロセスがいくつありますか?「プロセス」パラメータによって課せられる制限に近づいていますか?その場合、再帰 SQL が失敗し、エラーが発生している可能性があります。

パラメータをチェックする プロセス sqlplus セッション (または IDE) から次のように実行します。

show parameter processes

次に、 v$process からプロセス数を確認します。

select count(*) from v$process

閾値に近づいていますか?そうであれば、値を増やしてください プロセスパラメータ :たとえば、プロセス制限が 150 だった場合、175 に増加します。

alter system set processes=175 scope=spfile

プロセスパラメータを動的に変更できないため、変更を有効にするにはサーバーを再起動する必要があります。

それ以外の場合は、セッションをトレースして、問題が実際にどこにあるのかを確認します。

現在のセッションから次のコマンドを発行します。

alter session set sql_trace=TRUE

次に、あなたのを実行します create or replace again, 爆発したら、USER_DUMP_DEST ディレクトリに作成されたトレース ファイルを確認してください。そこで ORA エラーを探します。別の問題が発生する可能性がありますが、時間を節約できる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top