ITスキル

【Oracle】Redhat + Oralceの環境移行はDatapumpが便利

oracleを別のLinux環境に乗せかえることになったのですが、

設定、テーブル、データをそれぞれ確認しながら一個一個再構築していくのは手間がかかります。

そこで使えそうだったのがOracleのData Pump(データ・ポンプ)

概要

  • Oracle Database 10g から搭載された、コマンドで起動するエクスポート/インポート・ユーティリティ
  • 論理バックアップ ※Oracle は物理バックアップの補足としての使い方を推奨
  • 従来の exp/imp よりも高速(サーバー側で実行され、dmp もサーバー側に格納される)

環境構築

※参考

https://torazuka.hatenablog.com/entry/20140328/expimp

旧サーバコマンド

expdp system/xxx@onppdb SCHEMAS=test DIRECTORY=DATA_PUMP_DIR COMPRESSION=ALL ENCRYPTION=ALL

※圧縮オプション付きでエクスポートを実行する

※ディレクトリオブジェクトはデフォルトのものを使う

新サーバコマンド

impdp system/xxx@pdb1 SCHEMAS=test DIRECTORY=DATA_PUMP_DIR

※圧縮したDUMPファイルをそのままインポートできるかは要確認。

確認

・DB全体のテーブルごとの件数一覧

※旧サーバと新サーバでそれぞれ取得して一致している事を確認する

SET HEADING OFF
SET COLSEP ‘,’
select table_name, to_number( extractvalue( xmltype( dbms_xmlgen.getxml(‘select count(*) c from ‘||table_name)) ,’/ROWSET/ROW/C’)) count from user_tables WHERE TABLE_NAME NOT LIKE ‘BIN$%’ and (iot_type != ‘IOT_OVERFLOW’ or iot_type is null) order by table_name;

 

今後検証すること

検証1 差分更新ができる事を確認してみる

➀一度インポートした環境のテーブルを削除する

SELECT * FROM USER_TABLES ORDER BY TABLE_NAME;

DROP TABLE {テーブル} CASCADE CONSTRAINTS;

SELECT * FROM USER_TABLES ORDER BY TABLE_NAME;

②インポートをもう一回実行してみる

impdp system/xxx@pdb1 SCHEMAS=test DIRECTORY=DATA_PUMP_DIR

③テーブル一覧を取得する

SELECT * FROM USER_TABLES ORDER BY TABLE_NAME;

検証2 compression=ALLで圧縮してエクスポートできることを確認

➀検証1の➀の手順でテーブルを削除してみる

②compression=allでエクスポートしてみる

expdp system/xxx@onppdb SCHEMAS=test DIRECTORY=DATA_PUMP_DIR COMPRESSION=ALL ENCRYPTION=ALL

③エクスポートしたデータをインポートしてみる

impdp system/xxx@pdb1 SCHEMAS=test DIRECTORY=DATA_PUMP_DIR

④テーブル一覧を取得する

SELECT * FROM USER_TABLES ORDER BY TABLE_NAME;