私は、Oracleデータベース用の汎用ドロップオールオブジェクトスクリプトを作成しています。 drop table TABLE_NAME cascade constraints purge
をループすることにより、他のオブジェクトタイプの中で、すべてのテーブルのuser_objects
行を生成します。
問題は、参照パーティションテーブルが依存しているテーブルは、ORA-14656: cannot drop the parent of a reference-partitioned table
のように削除できないことです。
データディクショナリから参照パーティションテーブルの親であるテーブルを検出するにはどうすればよいですか?最初のループでそれらをスキップし、2番目のループでそれらを削除できますか?
参照するパーティション化された子テーブルを少なくとも1つ持つパーティション化されたテーブルのリストを取得するには、[dba][all][user]_part_tables
および[dba][all][user]_constrains
データディクショナリビューは、付与された権限に応じて、照会できます。
create table tb_part_parent(
col number primary key,
col2 number
)
partition by range (col2) (
partition part_1 values less than (100),
partition part_2 values less than (300),
partition part_3 values less than (500)
)
create table tb_part_child(
col number not null,
col2 number,
constraint fk_parent_1 foreign key(col) references tb_part_parent(col)
)partition by reference (fk_parent_1)
クエリ:
select t.table_name
from user_constraints t
where t.constraint_name in ( select w.r_constraint_name
from user_constraints w
join user_part_tables q
on (q.table_name = w.table_name and
q.ref_ptn_constraint_name = w.constraint_name)
)
結果:
TABLE_NAME
-----------------
TB_PART_PARENT