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でカラムのデータをほぼ同じ文字数の文字で置換する方法

    つまりどういうことだってばよ!!!って言われそうですが。 噛み砕いてい…

  2. Oracle

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

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

  3. Oracle

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

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

  4. Oracle

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

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

  5. Oracle

    [TNS-00525: 操作するには権限が不十分です] リスナーが起動できないときの対処方法

    CentOS 6のサーバにOracleを入れたり消したりしていたらリス…

コメント

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

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

最近の記事

  1. Azure仮想マシン(CentOS 7)のStandardデ…
  2. 【CentOS 7】特定ユーザーのクォータ設定を削除(無制限…
  3. Impdp時にtablesを使うとファンクションやストアドは…
  4. Can’t locate HTTP/Reques…
  5. 【PHP】cURLでベーシック認証のページへPOSTして結果…
PAGE TOP