Oracle

  (最終更新日:2015.09.24)

【Oracle】テーブル指定で統計情報をバックアップ、インポートする方法とポイント

Oracle Databaseで、テーブルを指定して統計情報をバックアップし、またバックアップからインポートする際のメモです。

通常は統計情報の更新を停止させており、必要に応じてテーブル単位で統計情報を再取得するような運用のときに使えます。

現在の統計情報を確認する

まずは現在の統計情報を確認します。
対象のテーブルと関連するインデックスの統計情報があります。

SELECT
    tb.TABLE_NAME,
    tb.LAST_ANALYZED as LAST_ANALYZED_TABLE,
    idx.INDEX_NAME,
    idx.LAST_ANALYZED as LAST_ANALYZED_INDEX
FROM
    USER_TABLES tb
    left join USER_INDEXES idx on(tb.TABLE_NAME=idx.TABLE_NAME)
WHERE
    tb.TABLE_NAME = 'TABLE_A'
ORDER BY
    tb.TABLE_NAME

今回の結果は下記のような感じ。

TABLE_NAME LAST_ANALYZED_TABLE INDEX_NAME LAST_ANALYZED_INDEX
TABLE_A 2015/01/08 22:48:54 SYS_C0015113 2015/01/08 22:48:54
TABLE_A 2015/01/08 22:48:54 TABLE_A_INDEX99 2015/01/08 22:48:55

テーブルの統計情報をバックアップする

バックアップ用に統計情報を格納するテーブルを作成。

SQL> exec DBMS_STATS.CREATE_STAT_TABLE('USER_HOGE', 'STAT_BACKUP');

続いて EXPORT_TABLE_STATS で統計情報をバックアップしますが、この時、cascade オプションを TRUE に指定することで、関連するインデックスの統計情報も合わせてバックアップすることができます。

SQL> exec DBMS_STATS.EXPORT_TABLE_STATS(ownname => 'USER_HOGE' ,tabname => 'TABLE_A' ,stattab => 'STAT_BACKUP', cascade => TRUE);

 ➡ EXPORT_TABLE_STATSプロシージャ

テーブルを指定して統計情報を更新する

テーブルを指定して、テーブルと関連するインデックスそれぞれの統計情報を一気に更新してみます。

SQL> exec DBMS_STATS.GATHER_TABLE_STATS (OWNNAME => 'USER_HOGE', TABNAME => 'TABLE_A', CASCADE => TRUE);

統計情報を確認してみると確かに更新されています。

TABLE_NAME LAST_ANALYZED_TABLE INDEX_NAME LAST_ANALYZED_INDEX
TABLE_A 2015/09/24 14:09:25 SYS_C0015113 2015/09/24 14:09:25
TABLE_A 2015/09/24 14:09:25 TABLE_A_INDEX99 2015/09/24 14:09:25

統計情報をバックアップからインポートする

ではいよいよ統計情報をバックアップから復元してみます。

まずは既存の統計情報を削除。インデックスの統計情報も削除されます。

SQL> exec dbms_stats.delete_table_stats('USER_HOGE','TABLE_A');

続いてバックアップからインポートします。
cascade オプションを指定している(デフォルトでTRUE)ので、インデックスも復元されます。

SQL> exec DBMS_STATS.IMPORT_TABLE_STATS(ownname => 'USER_HOGE' ,tabname => 'TABLE_A' ,stattab => 'STAT_BACKUP' ,cascade => TRUE);

確認してみると無事に復元されました。
めでたしめでたし。

TABLE_NAME LAST_ANALYZED_TABLE INDEX_NAME LAST_ANALYZED_INDEX
TABLE_A 2015/01/08 22:48:54 SYS_C0015113 2015/01/08 22:48:54
TABLE_A 2015/01/08 22:48:54 TABLE_A_INDEX99 2015/01/08 22:48:55
スポンサーリンク
スポンサーリンク

関連記事

  1. Oracle

    Statspackレポートを定期的(1日1回)に自動で作成する方法

    OracleのStatspackレポートを、自動で1日1回、1時間間隔…

  2. Oracle

    アーカイブログを削除する方法

    アーカイブログ・モードの時にガンガン作成されるアーカイブログ・…

  3. Oracle

    (解決策)テーブルを作成しようとしたらORA-01950エラーで権限が無いと怒られたとき

    dba権限が無いユーザーでOracleデータベースにテーブルを作成しよ…

  4. MaxGauge

    MaxGaugeインストール:ORADEBUGを利用してIPCを確認する方法

    MaxGaugeをインストールする際に、監視対象のインスタンスのIPC…

  5. Oracle

    OracleでDBの文字コードを確認する方法

    Oracleデータベースで、データベースの文字コードを確認する方法のメ…

  6. Oracle

    expdpで一貫性(整合性)を維持してバックアップする方法

    Oracleのexpdpコマンドでデータの整合性を維持した一貫性バック…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

  1. 【fdisk】パーティションが「範囲外の値です。」と作成でき…
  2. ServerView RAID Manager Linuxの…
  3. 【NetApp】rootユーザーのパスワードをコンソールから…
  4. 【syslog-ng】他サーバなどからのログが受信できない。…
  5. 【Mattermost】ユーザー管理をする方法
PAGE TOP