🚀 Oracle Data Pump とは?
-
Oracle Data Pump は、データおよびメタデータを非常に高速に他のデータベースへ移動するためのプロトコルです。
-
データ移行に使う主なツールは:
-
expdp
(データエクスポート) -
impdp
(データインポート)
-
-
これらは Oracle のコマンドラインツールまたは Enterprise Manager から利用可能です。
🧪 実践:エクスポートの準備
1️⃣ OS上にエクスポートファイル用のディレクトリ作成
2️⃣ Oracleデータベースにディレクトリオブジェクトを作成
-
データポンプはこのディレクトリを通じてファイル入出力を行う。
📤 エクスポートの実行(例)
特定スキーマのエクスポート
-
schemas
パラメータで対象スキーマを指定。 -
directory
は先ほど作成したディレクトリオブジェクト。 -
dumpfile
出力ファイル名、logfile
は処理ログ。
🔍 ジョブの確認・監視
-
実行中のData Pumpジョブは、次のビューで確認:
-
エクスポート完了後、ジョブ情報は削除される。
📋 エクスポートログの内容
-
最初に マスターテーブル が作成される(内部的なジョブ制御に使用)
-
マスターテーブルは最終的にダンプファイルに保存され、正常終了後に削除される
-
ログには:
-
エクスポート対象テーブルと行数
-
インデックス、ユーザー、権限などの情報も記載
-
🎯 条件付きエクスポート
1️⃣ テーブル単位のエクスポート
2️⃣ 除外(exclude)オプション(パラメータファイル使用推奨)
3️⃣ クエリで条件抽出
📦 その他のモード
モード | 説明 |
---|---|
Full | データベース全体をエクスポート |
Schemas | 特定スキーマ |
Tables | 特定テーブル |
Tablespaces | 表領域単位 |
Transportable | 表領域を他DBへ移送 |
✅ 推奨事項
-
コマンドラインでの直接指定よりも、パラメータファイルで管理する方が柔軟で再利用性が高い。
-
本番環境での運用前に、テスト環境で各オプションを試すことを推奨。
🧾 ダンプファイルの中身を確認する方法
✅ 中身を確認するには?
-
impdp
コマンドにSQLFILE
オプションを使って実行
→ 実際にはインポートせず、SQL文をファイル出力する
-
出力された
.sql
ファイルを開くと、以下のような内容が確認できる:-
CREATE USER
-
GRANT
文 -
CREATE TABLE
文など
-
🧪 スキーマのインポートと変換操作
1️⃣ Tablespace のリマップ(REMAP_TABLESPACE
)
例:PDB1
にある HR スキーマを PDB2
にインポートし、表領域を変更する
-
元々の
six_oks
表領域 → 新たに作成したusers
表領域へ移行 -
結果:全テーブルが
users
表領域に作成されていることを確認
2️⃣ スキーマ名のリマップ(REMAP_SCHEMA
)
例:HR スキーマを HR_TEST
という別のスキーマにインポート
-
結果:
HR_TEST
ユーザーが作成され、HR スキーマの全データがその中にインポートされる
🔁 エクスポート → インポートを1ステップで(NETWORK_LINK
)
2段階(expdp
→ impdp
)ではなく、データベースリンクを使って直接コピーすることも可能。
手順:
-
PDB2
側でPDB1
へのデータベースリンクを作成
-
impdp
でネットワークリンクを使って直接インポート
-
結果:
.dmp
ファイルを使わずに、PDB1
からPDB2
へ直接データを移行可能
🔒 権限に関する注意点
-
このレッスンでは、実演のためにユーザーに強い権限(FULL EXPORT/IMPORT)を付与
-
本番環境では管理者ユーザーにのみ付与すべき
📥 CSVファイルからデータをロードする方法(第1回)
🛠 方法1:LinuxコマンドでINSERT文を自動生成
-
空のテーブル
locations
を作成
→ データを格納する準備をする。 -
Linuxのコマンドを使用してCSVからSQLを生成
-
cat
コマンドでCSVファイルを表示 -
sed
コマンドで"(ダブルクォート)
を'(シングルクォート)
に置換 -
awk
コマンドで各行をINSERT INTO locations VALUES (...)
形式に変換 -
結果を
locations.sql
というファイルに保存
-
-
SQLスクリプトを実行
-
Oracle Cloud Console やローカル接続からPDBに接続
-
@locations.sql
を実行してデータ挿入
-
-
データ確認
-
SELECT * FROM locations;
でテーブルの中身を確認 -
CSVファイルからのデータが正しく格納されていることを確認
-
💡補足
-
この手法はクラウド環境でもローカル環境でも利用可能
-
CSVファイルはこのレッスンのリソースセクションからダウンロード可能
📄 Oracle 外部表(External Table)を使ってCSVファイルを読み込む
非クラウド(ローカル)環境での外部表の設定方法
🛠 実施手順
1. 📁 CSVファイルの準備
-
ローカルサーバに
locations.csv
ファイルを配置 -
値からダブルクォーテーション(")を削除しておく
-
CSVファイルはOracleサーバーの物理ディレクトリに保存
2. 📂 Oracleのディレクトリオブジェクト作成
-
Oracleにログインして、
CREATE DIRECTORY
文で論理名を作成(例:LOC_DIR
) -
ALL_DIRECTORIES
ビューで確認可能
3. 🧾 外部表(External Table)の作成
-
通常の表定義に加えて、ファイルの読み取り方法を記述する必要あり
-
Oracle Loader Driverを使用し、CSVのフィールド区切り(例:
,
)を指定
4. 🔎 データの確認
-
通常のSQLで外部表にアクセス可能:
-
データはCSVから直接読み込まれ、データベースにロードされることはない
-
外部表は読み取り専用(更新・挿入・削除は不可)
✅ メリット・注意点
項目 | 内容 |
---|---|
✅ メリット | CSVの内容をSQLでそのまま参照可能 |
⚠️ 注意点 | 書き込み不可(READ ONLY)、CSVファイルの構造に制限あり |
☁️ クラウド環境での外部表作成
🔒 背景と課題
-
クラウド環境ではHTTPデータベースへの直接アクセスが制限されているため、
前回のローカル環境での外部表作成手順は使用不可 -
しかし、オブジェクト・ストレージは使用可能
📦 オブジェクト・ストレージとは?
-
データを「ファイル」ではなく「オブジェクト」として管理
-
クラウドで一般的なストレージ方式
🛠 外部表作成の手順(クラウド編)
1. 🔑 アクセストークンの発行
-
Oracle Cloud コンソールにログイン
-
「Identity & Security → Users」に進む
-
自分のユーザーを選択し、「Auth Token(認証トークン)」を生成
→ 理由の記述(例:外部表作成用)
2. 📘 クレデンシャルの作成(DBMS_CLOUDパッケージ使用)
3. 🗂 バケットとCSVファイルの準備
-
Oracle Cloudの「Object Storage」でバケットを作成
-
作成したバケットに CSVファイル(例:locations.csv)をアップロード
-
ファイルの「オブジェクトURL(URI)」をコピー
4. 📄 外部表の作成(CREATE_EXTERNAL_TABLE プロシージャ)
5. ✅ 動作確認
-
正常にデータが取得できれば、クラウド環境での外部表の作成に成功です
🎉 まとめ
-
ローカル環境ではサーバー上のCSVファイルを使用
-
クラウド環境ではオブジェクトストレージを使用し、トークン認証と
DBMS_CLOUD
パッケージで管理 -
これにより、どちらの環境でも柔軟にCSVデータを外部表として活用可能
📦 SQL*Loader データロード
🧰 SQL*Loaderとは?
-
Oracleデータベースのテーブルにデータを取り込むユーティリティ
-
柔軟なデータ解析エンジンを備えており、データ形式の制限が少ない
-
使用する主なファイル:
-
📄 データファイル:CSVなどの実データ
-
⚙️ コントロールファイル:データの構造、配置先のテーブルなどを定義
-
📝 パラメータファイル(任意):共通のオプション設定
-
🪜 手順まとめ
1. 🔧 データ取り込み先テーブルの作成
2. ▶️ SQL*Loader の実行
-
control_file.ctl
に必要なロード設定が記述されている
3. 📈 結果の確認
-
ログ出力により、23件が正常にロードされ、1件が失敗
-
失敗したレコードは「badファイル」に出力される
→ 形式エラーなどでSQL*LoaderやDBが拒否した行 -
logファイルも作成され、実行結果・エラーの詳細が記録されている
4. 🧪 テーブルの中身を確認
🎉 まとめ
-
SQL*Loaderは大量データのバルクロードに最適
-
コントロールファイルで柔軟な定義が可能
-
失敗行はbadファイル、詳細はlogファイルで確認可能