ORACLEにおけるパーティション化しているテーブルの一覧の確認方法について、本記事では解説していきます。
パーティションテーブル一覧の確認方法
パーティションテーブル一覧を確認するためには、静的データディクショナリビューであるUSER_TABLES、ALL_TABLES、DBA_TABLESを検索します。
USER_TABLESは、接続しているユーザーに属するテーブルの情報を確認できます。
ALL_TABLESは、接続しているユーザーがアクセスできるテーブルの情報を確認できます。
DBA_TABLESは、全ユーザーのテーブルの情報を確認できますが、DBAロールが付与されているユーザーでないと検索できません。
ただし、上記の静的データディクショナリビューは通常のパーティション化していないテーブル情報も含んでいるので、条件を指定します。
具体的には、PARTITIONEDの項目がYESのデータだけを抽出します。
以下、具体的な検索SQLとサンプルの出力結果です。
-- パーティションテーブルの一覧 SELECT TABLE_NAME -- テーブル名 FROM USER_TABLES WHERE PARTITIONED = 'YES' ; TABLE_NAME --------------- TEST_TABLE1 TEST_TABLE2
パーティション名を含めた一覧の確認方法
パーティション名を含めた一覧を確認するためには、静的データディクショナリビューであるUSER_TAB_PARTITIONS、ALL_TAB_PARTITIONS、DBA_TAB_PARTITIONSを検索します。
USER_TAB_PARTITIONSは、接続しているユーザーに属するパーティションテーブルの情報を確認できます。
ALL_TAB_PARTITIONSは、接続しているユーザーがアクセスできるパーティションテーブルの情報を確認できます。
DBA_TAB_PARTITIONSは、全ユーザーのパーティションテーブルの情報を確認できますが、DBAロールが付与されているユーザーでないと検索できません。
以下、具体的な検索SQLとサンプルの出力結果です。
-- パーティションテーブル(パーティション名含む)の一覧
SELECT TABLE_NAME -- テーブル名
,PARTITION_NAME -- パーティション名
FROM USER_TAB_PARTITIONS
;
TABLE_NAME PARTITION_NAME
--------------- ---------------
TEST_TABLE1 TEST_TABLE1_01
TEST_TABLE1 TEST_TABLE1_02
TEST_TABLE2 TEST_TABLE2_01
TEST_TABLE2 TEST_TABLE2_02
注意点
USER_TABLESやUSER_TAB_PARTITIONSを使用する場合は、テーブル名は一意になります。
しかし、ALL_TABLESやALL_TAB_PARTITIONS、DBA_TABLESやDBA_TAB_PARTITIONSを使用する場合は、スキーマ間で同名のテーブルが存在する場合もあります。
そのため、スキーマ名が入るOWNERも出力するとよいです。
-- パーティションテーブルの一覧
SELECT OWNER -- スキーマ名
,TABLE_NAME -- テーブル名
FROM ALL_TABLES
WHERE PARTITIONED = 'YES'
;
OWNER TABLE_NAME
--------------- ---------------
TEST_USER1 TEST_TABLE1
TEST_USER1 TEST_TABLE2
TEST_USER2 TEST_TABLE1
TEST_USER2 TEST_TABLE2
なお、USER_TABLESやUSER_TAB_PARTITIONSには、OWNERという項目は存在しないのでご注意ください。

