はじめに
Oracle Data Pumpは、オンプレミスからクラウドへの移行時にもよく使用されるツールです。
今回は、Oracle Data Pumpによるクラウドリフト時の移行ケース注意点についてご紹介していきます。
また、本記事の内容は、
第8回 Oracle DBaseCamp
【Oracle Data Pumpによるエクスポートとインポート】
に登壇した際の内容になります。
詳細についてご覧になりたい方は、以下の録画や資料を参考にしてみてください。
- 録画
*資料
Oracle Data Pumpによるデータ移行手順のおさらい
移行の流れについてですが、まずはソース・データベースからダンプ・ファイルをエクスポートして、それをターゲット環境にscpコマンドで転送して、ターゲット環境でインポートを実行するといった流れになっています。
OCIチュートリアルの「Data Pumpを利用してデータを移行しよう」も参考になりますので合わせてご覧ください。
ここでは、他ではあまり紹介されていない各フェーズごとのTipsについて紹介していきます。
【事前設定】
初期化パラメータSTREAMS_POOL_SIZE の設定
Oracle Data PumpではAdvanced Queuingを使うため、メモリ領域であるSTREAMS_POOL_SIZEを使用します。
その領域を確保するため、STREAMS_POOL_SIZEを設定しますが、Oracleの推奨範囲としては64 MBから256 MBの範囲になるように設定していきます。
STREAMS_POOL_SIZEの値を確認
SELECT CURRENT_SIZE/1024/1024 AS CURRENT_SIZA_MB
FROM v$SGA_DTNAMIC_COMPONENTS
WHERE COMPONENT='STREAMS POOL';
実行結果例
CURRENT_SIZE_MB
---------------
128
(不足している場合)STREAMS_POOL_SIZEの値を指定するコマンド
ALTER SYSTEM SET STREAMS_POOL_SIZE=256M SCOPE=BOTH;
【エクスポート】
ダンプ・ファイルのサイズ見積もり
ESTIMATEパラメータを使用してダンプ・ファイルを生成せずとも見積もりが可能なため、出力されるダンプ・ファイルのサイズに対して準備した領域が十分かを確認することができます。
指定できる見積もりモードとしては、BLOCKSとSTATISTICSがあります。
- BLOCKS:ブロックサイズにオブジェクトのブロック数をかけて見積もる
- STATISTICS:統計情報を元に見積もる
Oracle公式に精度が高いと言われているのはSTATISTICSになっています。
ESTIMATEパラメータの実行例
expdp <ユーザー名>/<パスワード> FULL=Y
DIRECTORY=<ディレクトリ名> ESTIMATE = STATISTICS
ESTIMATE_ONLY=Y;
【ダンプ・ファイルの転送】
ダンプ・ファイルの転送では、scpというファイル転送コマンドを使用してターゲット側に転送します。
LinuxやUNIX系のOSの場合、nohupというコマンドをscpの前につけて実行することで、転送中にセッションが切れても転送を継続させることが可能です。
nohupを使用したscpコマンド例
nohup scp -i /home/opc/.ssh/ssh-key-2024-02-20.key /tmp/datapump/dumpfile* opc@10.0.1.41:/tmp/datapump
【インポート】
移行データの確認
インポート完了後にデータがしっかりと移行されているかの確認を行います。
■ ソース・データベースとのデータ量を比較
こちらはあくまでも例ですが、まずは、ソース側とターゲット側でデータ量を比較するために、データ容量を確認するコマンドを実行します。
- 実行コマンド例
SELECT SUM(bytes)/(1024*1024*1024)"SIZE[GB]"
FROM DBA_SEGMENTS WHERE OWNER = 'SCOTT';
- 実行結果例 (ソース側)
SIZE[GB]
----------
1021.92725
- 実行結果例 (ターゲット側)
SIZE[GB]
----------
1017.89063
ソース・データベースとターゲット・データベースで比較すると、この例の場合、ターゲット側が4 GBほど少ない結果となっています。
ターゲット側のサイズが少なくなる理由としては、インポート処理ではOracle Data Pumpプロセスがデータを空きスペースがないようにブロックにデータを入力していくためです。
特に断片化されたデータベースの場合は、さらにデータの減少が大きく表れます。
また、Oracle Data Pumpの処理では、索引が再作成されるため、データが減少するといったこともあります。
■ 移行したスキーマのテーブルの種類やオブジェクトの数が一致するか確認
データとテーブルの一覧を表示して確認したり、そのテーブル内のそれぞれのレコード数を確認したり、オブジェクト一覧の確認などを実施することで、データの抜け漏れなく移行できていることを確認できます。
テーブル一覧の確認 (例)
SELECT TABLE_NAME FROM DBA_TABLES
WHERE OWNER = 'SCOTT';
テーブルそれぞれのレコード数の確認 (例)
SELECT COUNT(*) FROM SCOTT.CUSTOMERS;
スキーマ所有のオブジェクト一覧の確認 (例)
SELECT OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE OWNER = 'SCOTT' ORDER BY OBJECT_NAME;
Oracle Data Pumpを利用したオンプレミスからクラウドへの移行ケース
Oracle Data Pumpを利用したクラウドリフト時の移行ケースについて紹介します。
移行ケースとしては大きく以下の2種類があります。
- ダンプ・ファイルを利用したクラウドへの移行
クラウド・ストレージを利用して、ダンプ・ファイルのエクスポートおよびインポートを行います。
- データベース・リンクを利用したクラウドへの移行
データベース・リンクを利用すると、オンプレミスからクラウドのデータベース上に直接データのインポートを行えるので、クラウド・ストレージの利用が必要ありません。
しかし、ネットワーク帯域やデータサイズなど、ボトルネックになりそうな箇所はあらかじめ考慮が必要となります。
Oracle Data Pumpを利用したオンプレミスからクラウドへ移行する場合の注意点
今回はOracle Data Pumpを利用したクラウドリフト時の注意点について2点紹介します。
■ 圧縮無効化による容量の肥大化
大規模なデータをお使いになっているお客様では、Hybrid Columnar Compression (HCC)を使っている場合も多いと思います。
そういったお客様においては、移行時のダンプ・ファイルはHCCによる圧縮が無効になり、容量が肥大化してしまうため、ネットワーク帯域幅によってはデータ転送に時間がかかる可能性があります。
■ PaaS上でのファイルシステムの領域が小さい
PaaSへの移行の場合、OS上で割り当てられているファイルシステムの領域が小さいため、クラウド上でのストレージサービスの利用を推奨しています。
Oracle Cloud Infrastructure (OCI)のPaaSサービスであるOracle Base Database Serviceの場合、全体の容量に対して、ダンプ・ファイルなどの出力先の領域が小さいため、OCIのストレージサービスであるOCI Object Storageなどを利用することを推奨しています。
おわりに
今回は、Oracle Data Pumpによるクラウドリフトの移行ケースと注意点について解説しました。
Oracle Data Pumpについて、更に詳しく知りたい方は以下の記事もご参考にしてみてください。