Oracle

  (最終更新日:2018.01.12)

Oracleで統計情報を別のユーザー(スキーマ)に移行する方法

Oracleでは統計情報のバックアップやインポートが可能ですが、別のユーザー(スキーマ)のDBに入れるとなると正攻法では不可となっていました。例えば本番ではユーザー hoge に対して、開発用DBでは hoge_deve になってる場合に統計情報を移行したいというシチュエーションです。

そこで今回、いろいろ試行錯誤してみたら上手く移行できたのでその方法をメモ的に残しておきたいと思います。

ただあくまで「開発環境などへの移行目的」として紹介していますので、本番での利用はおすすめしません。。。

統計情報をエクスポートする

まずは元DBから統計情報をエクスポートします。

# su - oracle
$ sqlplus sys as sysdba
SQL> exec DBMS_STATS.CREATE_STAT_TABLE('USER1', 'SAVE_STATS_USER1');
SQL> exec DBMS_STATS.EXPORT_SCHEMA_STATS('USER1', stattab =>'SAVE_STATS_USER1');
SQL> quit

統計情報を格納したテーブルからエクスポートします。

$ exp user1/user1_pass@orcl file=>(gzip > /tmp/stat_table.exp.gz ) tables=SAVE_STATS_USER1 statistics=none

統計情報をインポートする

続いて移行先のDBサーバにログインして統計情報をインポートします。
先ほど取得したバックアップは事前にアップロードしといてください。

$ imp user2/user2_pass@orcl file=<(gunzip -c /tmp/stat_table.exp.gz) IGNORE=Y FULL=Y

続いてSQLコマンドで統計情報を仮インポートしているテーブルのデータをアップデートしておきます。これが異なるユーザーに移行する際に必要な作業です。

update SAVE_STATS_USER1 set C5 = 'USER2'

あとは仮テーブルから統計情報をインポートします。

$ sqlplus sys as sysdba
SQL> EXECUTE DBMS_STATS.DELETE_SCHEMA_STATS('USER2');
SQL> exec DBMS_STATS.IMPORT_SCHEMA_STATS(ownname => 'USER2' ,stattab => 'SAVE_STATS_USER1');
SQL> exec DBMS_STATS.DROP_STAT_TABLE (ownname => 'USER2',stattab => 'SAVE_STATS_USER1');
SQL> quit

これで完了です。
無事に移行できたかどうか・・・・ 統計情報の状況を確認するSQLで確認してみてください。

-- テーブル用
SELECT TABLE_NAME NAME,LAST_ANALYZED FROM USER_TABLES order by NAME;

-- インデックス用
SELECT TABLE_NAME,INDEX_NAME,LAST_ANALYZED FROM USER_INDEXES order by TABLE_NAME,INDEX_NAME;

では。

スポンサーリンク
スポンサーリンク

関連記事

  1. Oracle

    Oracleで全てのテーブルやインデックスのCreate文を作成する方法

    Oracle で指定したユーザーが所有している全てのテーブルやインデッ…

  2. Oracle

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

    Oracle Databaseで、テーブルを指定して統計情報をバックア…

  3. Oracle

    長時間動いているセッション(SQL)の情報を取得するSQL

    Oracleで長時間稼働している処理(SQL)の情報を取得するSQLが…

  4. Oracle

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

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

コメント

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

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

最近の記事

  1. さくらのVPSにCentOS 5をインストールする方法
  2. PHP PhantomJSでFatal error: Unc…
  3. 【Oracle】DataPumpの対話式コマンドモードを抜け…
  4. CentOS7のPHP5.6にPhpSpreadsheetを…
  5. Azure仮想マシン(CentOS 7)のStandardデ…
PAGE TOP