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

    特定のセッションがどのイベントでどれだけ待機したのかを確認するSQL

    Oracle 11gで、特定のセッションがどのイベント(db file…

  2. Oracle

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

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

  3. Oracle

    【Oracle】Data Pumpでシーケンスのみを移行する方法

    Data Pumpでは inculde を利用することでシーケンスのみ…

  4. Oracle

    【Oracle】DataPumpの対話式コマンドモードを抜ける方法

    Oracle DataPump(impdp, expdp)では、 at…

  5. Oracle

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

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

  6. Oracle

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

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

コメント

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

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

最近の記事

  1. ColdFusion 2018にUpdate 8を適用したら…
  2. 【vsftpdを守る】CentOS 7にfail2banをイ…
  3. nologinを指定したユーザーでFTP接続するとパスワード…
  4. CentOS 7にTomcatをインストールして起動したらエ…
  5. NetApp / cDot : AutoSupport Ma…
PAGE TOP