0

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

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

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

編集:Oracle10.2.0.4の実行

4

3 に答える 3

2

データディクショナリが破損しています。

新しいデータベースを構築して同期プロセスを最初からやり直すことができる場合。今回はsysdbaを使用していません。sysdbaだけが、データディクショナリを破壊する特権を持っています。

データが必要であるが最初からやり直すことができる場合でも、expまたはexpdpを使用してデータをエクスポートできる場合があります。

新しいデータベースでやり直すことができない場合。OracleサポートでSARを開きます。他の誰かがこれを説明できる場合でも、データベースをOracleサポート状態に戻すことができるのはその人だけです。

于 2010-03-02T17:01:09.733 に答える
1

データベースに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
于 2010-03-02T21:37:28.280 に答える
1

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

プロセス制限を超えた可能性はわずかです。現在、インスタンスにはいくつのプロセスがありますか?パラメータ「プロセス」によって課せられる制限に近づいていますか?その場合、再帰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エラーを探してください。別の問題が発生する可能性がありますが、時間の負荷を節約できます。

于 2010-03-03T12:12:47.953 に答える