バージョン管理で管理するためにデータベースメタデータをファイルにダンプするカスタムプログラムを作成しています。データポンプまたはエクスポートが動作するデフォルトの方法は、いくつかの理由で理想的ではありません(たとえば、テーブルごとに別々のディレクトリが必要です)。dbms_metadata.GET_DEPENDENT_DDLでエラーを回避する方法
Sql Developerには、任意のオブジェクトのエクスポートスクリプトを作成するためのさまざまな方法が用意されています。 1つの方法は、オブジェクトを右クリックしてQuick DDL
を選択することです。作成したログを表示することで、DDLスクリプトを作成するために実際に発生したSQLを確認できます。私はこれらのスクリプトを使って私のカスタムプログラムを書いてきましたが、大部分は完璧でした。
私は、マテリアライズド・ビューのDDLを生成するとき、それは生成SQLは:SQL DeveloperのQuick DDL
を介して実行すると、このスクリプトの
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW',:name,:owner) FROM DUAL
UNION ALL
SELECT DBMS_METADATA.GET_DEPENDENT_DDL('INDEX',TABLE_NAME, TABLE_OWNER) FROM (
SELECT table_name, table_owner FROM all_indexes
WHERE table_owner = :owner AND table_name = :name
AND index_name NOT IN (
SELECT constraint_name FROM sys.all_constraints
WHERE table_name = table_name AND constraint_type = 'P'
) AND ROWNUM = 1
)
UNION ALL
SELECT dbms_metadata.GET_DEPENDENT_DDL ('COMMENT', :name,:owner) FROM DUAL
、それが適切にマテリアライズド・ビューのメタデータを生成します。私は(SQL開発者自身で手動でも、または)プログラムでこのスクリプトを実行すると、次のエラーを生成します。
ORA-31608: specified object of type COMMENT not found
ORA-06512: at "SYS.DBMS_METADATA", line 5805
ORA-06512: at "SYS.DBMS_METADATA", line 8436
ORA-06512: at line 1
31608. 00000 - "specified object of type %s not found"
*Cause: The specified object was not found in the database.
*Action: Correct the object specification and try the call again.
は、この特定のビューは任意のコメント(明らかに)持っていませんが、私が期待しているだろうマテリアライズドこの節の部分は、エラーを生成する代わりに0行を返すだけです(特に、SQL Developerは一見エラーなしでこれを使用します)。
メタデータにコメントが含まれていても、このエラーを回避する方法はありますか?
この問題は、Oracle 10g & 11gデータベースに存在します。
問題が許可されている可能性があります。あなたに与えた助成金を確認してください。 – SSD
@ Saeidsamadidana:問題は助成金ではありません。 Sql Developerの同じユーザーです。これはコメントがあると成功します。 – Gerrat
あなたはコメントがないときにそれが起こることを意味しますか? – SSD