Oracleの統計情報をユーザー単位でバックアップする方法と、バックアップファイルからリカバリする方法です。バックアップには旧来のexpコマンドを利用します。(expdpではないです)
今回は対象のDBユーザーを dbhoge とし、保存用のテーブルを SAVE_STATS_HOGE としています。
またテーブル単位でのバックアップとインポートは下記で紹介中です。
[clink url=”http://www.steponboard.net/oracle/576/”]全ての統計情報をバックアップする
全ての統計情報をバックアップし、ファイルとして出力します。
# su - oracle $ sqlplus sys as sysdba SQL> exec DBMS_STATS.DROP_STAT_TABLE (ownname => 'DBHOGE',stattab => 'SAVE_STATS_HOGE'); SQL> exec DBMS_STATS.CREATE_STAT_TABLE('DBHOGE', 'SAVE_STATS_HOGE'); SQL> exec DBMS_STATS.EXPORT_SCHEMA_STATS('DBHOGE', stattab =>'SAVE_STATS_HOGE'); SQL> quit $ exp dbhoge/dbhoge_pass@orcl file=>(gzip > /tmp/stat_table.exp.gz ) tables=SAVE_STATS_HOGE statistics=none
これで stat_table.exp.gz というバックアップファイルが出力されます。
バックアップファイルからインポートする
出力されたバックアップファイルから統計情報をインポートします。
# su - oracle $ sqlplus sys as sysdba // 既にバックアップ用に作成された統計情報テーブルが存在していれば事前に削除 SQL> exec DBMS_STATS.DROP_STAT_TABLE (ownname => 'DBHOGE',stattab => 'SAVE_STATS_DBHOGE'); SQL> quit // impコマンドから統計情報テーブルをインポート $ imp dbhoge/dbhoge_pass@orcl file=<(gunzip -c /tmp/stat_table.exp.gz) IGNORE=Y FULL=Y $ sqlplus sys as sysdba // バックアップ用の統計情報テーブルから統計情報をインポート(事前に削除してから) SQL> EXECUTE DBMS_STATS.DELETE_SCHEMA_STATS('DBHOGE'); SQL> exec DBMS_STATS.IMPORT_SCHEMA_STATS(ownname => 'DBHOGE' ,stattab => 'SAVE_STATS_DBHOGE'); SQL> quit
これで完了です。