パーティションテーブルがあります:SAMPLE_PARTITIONED_TBL
数値フィールド(データセット:201001 ... 201212 ..など)に基づく60パーティション(サブパーティションなし)のPERIOD_ID
。このテーブルにはいくつかのローカルインデックスがありますが、問題は何らかの理由でPKインデックスにあります。別のスキーマに同じDDLがあり、そこで正常に動作します。これを解決するためにtioが何を探すのかわからない。
Informatica(ETLツール)を使用して、このテーブルにデータをロードしています。ロードする前に、パーティションテーブルを切り捨てます。
SQL> ALTER TABLE owner_name.SAMPLE_PARTITIONED_TBL
2 TRUNCATE PARTITION SMPL_201001 DROP STORAGE;
ロードが開始すると、次のエラーが発生します。
Message: Database errors occurred:
ORA-01502: index 'owner_name.SAMPLE_PARTITIONED_TBL_PK' or
partition of such index is in unusable state
インデックスのステータスを確認しています...
SQL> select STATUS from all_indexes
2 where INDEX_NAME like 'SAMPLE_PARTITIONED_TBL_PK';
STATUS
--------
UNUSABLE
SQL> ALTER INDEX owner_name.SAMPLE_PARTITIONED_TBL_PK REBUILD;
を実行すると、ローカルパーティションインデックスがSTATUS=VALID
状態に戻り、読み込みを問題なく続行できます。
更新:
以下の@Matの観察に従って、PKインデックスがローカルにパーティション分割されているかどうかを確認しています。
SQL> select * from all_indexes where table_name = 'SAMPLE_PARTITIONED_TBL';
リストにSAMPLE_PARTITIONED_TBL_PK
と他のインデックスが表示されます。
SQL> select * from all_part_indexes where table_name = 'SAMPLE_PARTITIONED_TBL';
ここでは、LOCALITY='LOCAL'
のすべてのインデックスが表示されています。 SAMPLE_PARTITIONED_TBL_PK
が結果セットにないことを除いて、Matの観察を確認します。 :)
ありがとう。
予想されたとおり、パーティションに対するほとんどのDDL操作は、DDLの影響を受けるインデックスを無効にします。 ALTER TABLE docsは、関連するすべての操作についてそれを述べています。
特に truncate partition
の場合:
切り捨てられるパーティションまたはサブパーティションごとに、Oracle Databaseは対応するローカル索引パーティションおよびサブパーティションも切り捨てます。それらのインデックスパーティションまたはサブパーティションがUNUSABLEとマークされている場合、データベースはそれらを切り捨て、UNUSABLEマーカーをVALIDにリセットします。
そのため、ローカルインデックスは切り捨てられ、valid
とマークされます。特に維持するように要求しない限り、グローバルインデックスは無効になります。 (下を参照してください。)
あなたの場合、主キーはローカルインデックスに基づいていないようです–実際にはパーティション化されていないようです。パーティション化されたインデックスでalter index ... rebuild
を実行できないため、各パーティションを再構築する必要があります。したがって、無効化が予想されます。
これを行うには、UPDATE INDEXES
/UPDATE GLOBAL INDEXES
句をALTER TABLE
ステートメントに追加して、ALTER
の実行中にOracleが自動的にインデックスを維持するようにします-参照 インデックスの自動更新 。ただし、いくつかの制限があります。インデックスを自動的に更新するときの考慮事項セクションを注意深くお読みください。
しかし、それが常に望ましいとは限りません。読み込み後にインデックスを再構築する方が効率的な場合があります。その場合、ロードプロセスではSKIP_UNUSABLE_INDEXES
パラメータを使用できます(セッションレベルで設定できます)。 (このパラメータのデフォルトは、11gR2ではTRUE
です。)