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;