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

    【Oracle】一般ユーザーにシステムビューへのアクセス権を付与する方法

    Oracle Databaseで、作成した一般ユーザーからシステムビュ…

  2. Oracle

    Linux版Oracle Database 11gの起動手順と停止手順

    すごく基礎的なことなんですが、Linux版のOracle Da…

  3. Oracle

    【SQL*Plus】SYSDBA権限でリモートサーバに簡易接続ネーミングで接続する方法

    リモートのOracleサーバにSQL*Plusで接続する際に、SYSD…

  4. Oracle

    DBD-Oracleのインストール時にdemo_rdbms.mkが無い場合。Clientは必要なのか…

    PerlモジュールのDBD-Oracleをソースからインストールする際…

  5. Oracle

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

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

  6. Oracle

    impdpでインデックスのみを作成する方法

    impdpを利用してインデックスのみを作成したかったのでメモ的に。…

コメント

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

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

最近の記事

  1. HP 1950スイッチ:WEB管理画面からデフォルトゲートウ…
  2. HP 1950スイッチ:コマンドでIPの設定をする方法
  3. NFSマウントでの『間違ったファイルシステムタイプ』エラーの…
  4. 【CentOS 7】iptablesの使い方と設定内容を確認…
  5. 【HULFTメモ】一般ユーザーでのコマンド実行時にhulft…
PAGE TOP