2017-02-27 93 views
0

私はsqlplusでsysdbaとしてsysとoracleデータベース11.2.0.4 Enterprise Editionを接続しています。私は、クエリを実行した場合:oracle ORA-31603でもsysdba

select DBMS_METADATA.GET_DDL ('TYPE' , 'SYS_PLSQL_9131_DUMMY_1' , 'SYS') from dual ; 

を私はエラーにエラーが発生します

 *ORA-31603: object "SYS_PLSQL_9131_DUMMY_1" of type TYPE not found in schema "SYS" 
     ORA-06512: at "SYS.DBMS_METADATA", line 5805 
     ORA-06512: at "SYS.DBMS_METADATA", line 8344* 

私はDBA_OBJECTSまたはDBA_SOURCEのオブジェクトを照会した場合、私は

 select DBMS_METADATA.GET_DDL ('TYPE_BODY' , 'SYS_PLSQL_9131_DUMMY_1' , 'SYS') from dual ; 
     select DBMS_METADATA.GET_DDL ('TYPE_SPEC' , 'SYS_PLSQL_9131_DUMMY_1' , 'SYS') from dual ; 

を実行する場合、私はあまりにも同様のエラーを取得しますタイプはTYPEです。

SYSスキーマ内の他のTYPE型オブジェクトを照会してもこれらのエラーが発生しますが、すべてのTYPE型オブジェクトでこの問題が発生するわけではありません。

答えて

0

これらのタイプは、パッケージによって暗黙的に作成される必要があります。 object_id 9131(型名の数値)のDBA_OBJECTSを問い合せます。

単純なVARCHAR2/NUMBER/DATEではなく、パッケージ仕様で定義されたデータ型を持つ値を戻す関数を持つパッケージを指していると考えられます。

1

なぜこのエラーが発生しますか?問題はアクセス許可やコードではありません。問題は、Oracleオブジェクトが本当にオブジェクト型ではないことが主張されていることです。すべての「テーブル」が実際のテーブルではなく、すべての「タイプ」が実際のタイプではありません。 Oracleは、ネストした表やコレクション用のシステム生成型など、他のオブジェクトをサポートするオブジェクトを作成することがあります。

どうすればエラーが発生するのですか?私が知る限り、オブジェクトが実際のオブジェクトではないことを知らせる公式のドキュメントやデータ辞書ビューはありません。最良のガイドはおそらくthis answerの条件です。特にこの部分:

... 
    --These objects are included with other object types. 
    and object_type not in ('INDEX PARTITION','INDEX SUBPARTITION', 
     'LOB','LOB PARTITION','TABLE PARTITION','TABLE SUBPARTITION') 
    --Ignore system-generated types that support collection processing. 
    and not (object_type = 'TYPE' and object_name like 'SYS_PLSQL_%') 
    --Exclude nested tables, their DDL is part of their parent table. 
    and (owner, object_name) not in (select owner, table_name from dba_nested_tables) 
    --Exlclude overflow segments, their DDL is part of their parent table. 
    and (owner, object_name) not in (select owner, table_name from dba_tables where iot_type = 'IOT_OVERFLOW') 

一部のオブジェクトはエクスポートすることができず、無視する必要があります。

関連する問題