特定のテーブルに対してAnalyze tableを実行しようとするとエラーメッセージが表示されてうまくいかないことがありました。
それでエラーメッセージにはこんなものが出力されている訳です。
ORA-38029: オブジェクト統計はロックされています
オブジェクトの統計情報とはなんぞや。と思い、調べてみる。
だってそんなもの自分でロックした覚えなんて無いですし。
oracleのリファレンスにはこんなことが書いてありました。
2 データ・ポンプ・エクスポート
METADATA_ONLYを指定すると、データベース・オブジェクト定義のみがアンロードされ、表の行データはアンロードされません。CONTENT=METADATA_ONLYを指定した場合、ダンプ・ファイルが後でインポートされるときに、ダンプ・ファイルからインポートされる索引または表の統計はインポート後にロックされることに注意してください。
要するにデータポンプを使ってexport/importしようとした時に通常一回でまとめてやるのではなく、METADATA_ONLYを指定してメタデータと表データを別々にしてインポートを行った場合は要注意という事ですね。
そうそう。
そう言えばそんなことやってました。
解決方法としては今ロックされているオブジェクトを確認し、ロック状態を解除してあげると良い。
select table_name, stattype_locked from dba_tab_statistics where owner = 'SCOTT' and stattype_locked;
ロックを解除するには以下のようにすると良い。
参考:[Oracle]expdmp METADATA_ONLYの落とし穴
DBMS_STATS.UNLOCK_SCHEMA_STATS (ownname);
DBMS_STATS.UNLOCK_TABLE_STATS (ownname,tabname);
ロックを解除する方法には上記の2パターンがあるようですが、特に問題がなければスキーマごとまとめてロックを解除してしまっても良いのではと思います。
解除後にもう一度Analyze tableを実行すれば問題なく実行されます。