Oracle エラーの対応方法・解決方法を解説します

ORA-38029

エラーメッセージ  

 ORA-38029: オブジェクト統計はロックされています
 ORA-38029: object statistics are locked.
 
 

基本的なエラーの内容  

analyze tableコマンド等で表の統計情報を取得しようとした際に、表の統計がロックされている時に発生します。

 
 

確認事項および対応  

  1. DBMS_STATS.UNLOCK_TABLE_STATS にロック解除したい表のスキーマ名、テーブル名を指定して実行することでロックを解除できます。
    exec DBMS_STATS.UNLOCK_TABLE_STATS('owner','table name');
 
 

詳細  

表の統計がロックされているかどうかはDBA_TAB_STATISTICS の STATTYPE_LOCKED 列で確認できます。
STATTYPE_LOCKED が null (空欄) の場合はアンロック状態で、その他(通常ALL)の場合はロックされている状態です。

SQL> select table_name, stattype_locked from dba_tab_statistics where owner = 'SCOTT' and stattype_locked;

TABLE_NAME                     STATT
------------------------------ -----
TAB_TEST1                      ALL           <--- LOCKED
TAB_TEST2                                    <--- UNLOCKED

DBMS_STATS.UNLOCK_TABLE_STATS を実行することでロックを解除できます。

SQL> exec DBMS_STATS.UNLOCK_TABLE_STATS('scott','TAB_TEST1');

PL/SQL procedure successfully completed.

アンロック後に再度統計情報の取得を実行すればエラーは回避できるはずです。

複数の表に対してまとめてロックを解除したい場合、以下のSQLでアンロックする為の実行文を作成することができます。
select 'exec DBMS_STATS.UNLOCK_TABLE_STATS (|| owner ||,|| table_name ||);' from dba_tab_statistics where owner = 'owner_name' and stattype_locked is not null;

SQL> select 'exec DBMS_STATS.UNLOCK_TABLE_STATS ('''|| owner ||''','''|| table_name ||''');' from dba_tab_statistics where owner = 'SCOTT' and stattype_locked is not null;

'EXECDBMS_STATS.UNLOCK_TABLE_STATS('''||OWNER||''','''||TABLE_NAME||''');'
------------------------------------------------------------------------
exec DBMS_STATS.UNLOCK_TABLE_STATS ('SCOTT','TAB_TEST1');
exec DBMS_STATS.UNLOCK_TABLE_STATS ('SCOTT','TAB_TEST2');

export/import をした際に、表のデータをimportせずに表の構成だけimportした場合などにロック状態になることがあるようです。
また、DBMS_STATS.LOCK_TABLE_STATS を使用することで意図的にロック状態にすることも可能です。

SQL> exec dbms_stats.lock_table_stats('scott', 'test');
 
 

関連エラー  

 
 

powered by Quick Homepage Maker 3.66
based on PukiWiki 1.4.7 License is GPL. QHM

最新の更新 RSS  Valid XHTML 1.0 Transitional