個人用 oracledb impdp

# Oracleの`impdp`コマンド解説（事前準備含む）

Oracle Databaseの`impdp`（**Data Pump Import**）コマンドは、エクスポートされたダンプファイル（`.dmp`）を使ってデータベースにデータを復元するためのユーティリティです。この機能はデータ移行、バックアップの復元、環境間のデータコピーなどに利用されます。

---

## ■ impdpの概要

`impdp`は、事前に`expdp`（Data Pump Export）で出力されたデータをOracleデータベースに読み戻すためのコマンドです。

---

## ■ impdp実行前に必ず行う準備

Oracleでは、OS上のファイルパスを直接指定するのではなく、**ディレクトリオブジェクト（Oracle DIRECTORYオブジェクト）**を通じてファイルにアクセスします。  
そのため、以下の準備が必須となります。

---

## ■ impdpの処理の流れ（全体像）

```
① OS上に .dmp ファイルを配置  
② Oracleで DIRECTORY オブジェクトを作成  
③ 対象ユーザーに READ/WRITE 権限を付与  
④ impdp コマンドでインポートを実行
```

---

## ■ sqlplusによるディレクトリオブジェクトの作成

### ● sqlplusとは？

Oracleが提供する**対話型のコマンドラインSQLツール**で、SQLやPL/SQLを実行したり、管理操作を行ったりできます。

### ● `sqlplus / as sysdba`とは？

これはOracleに**OS認証で管理者（SYSDBA）としてログインする構文**です。通常、Oracleサーバー上で`oracle`ユーザーとしてこのコマンドを実行します。

- `sqlplus`：ツールの起動
- `/`：OSユーザー認証（ユーザー名・パスワード不要）
- `as sysdba`：SYSDBA権限（管理者）で接続する

### ● 実行例

```
sqlplus / as sysdba

CREATE OR REPLACE DIRECTORY dump_dir AS '/u01/dumpfiles';
GRANT READ, WRITE ON DIRECTORY dump_dir TO your_user;
```

- `dump_dir`：Oracle内でのディレクトリ識別名  
- `/u01/dumpfiles`：OS上に実在するディレクトリパス  
- `your_user`：ダンプファイルを読み込むユーザー名

---

## ■ impdpコマンド構文と使用例

基本構文：

```
impdp ユーザー名/パスワード@サービス名 DIRECTORY=ディレクトリ名 DUMPFILE=ファイル名 LOGFILE=ログファイル名 [その他オプション]
```

| パラメータ               | 説明                                                                 |
|--------------------------|----------------------------------------------------------------------|
| `ユーザー名/パスワード`   | 接続するユーザーの認証情報                                           |
| `@サービス名`             | 接続先のデータベース識別子（TNS名やEZ接続形式など）                 |
| `DIRECTORY=ディレクトリ名`| Oracleディレクトリオブジェクト（OSのパスではない）                 |
| `DUMPFILE=ファイル名`     | インポート元のダンプファイル名（複数指定可）                         |
| `LOGFILE=ファイル名`      | 処理ログの出力ファイル名（任意）                                   |

---

## ■ 主なオプション

| オプション               | 説明                                                                 |
|--------------------------|----------------------------------------------------------------------|
| `FULL=Y`                 | データベース全体をインポート                                         |
| `SCHEMAS=スキーマ名`     | 特定のスキーマ（ユーザー）のみをインポート                           |
| `TABLES=テーブル名`      | 指定したテーブルのみをインポート                                     |
| `REMAP_SCHEMA=旧:新`     | スキーマ名を変換してインポート                                       |
| `REMAP_TABLESPACE=旧:新` | 表領域を変換してインポート                                           |
| `EXCLUDE=オブジェクト`   | 指定したオブジェクトを除外                                           |
| `INCLUDE=オブジェクト`   | 指定したオブジェクトだけを含める                                     |

---


### ● スキーマ全体をインポート

```
impdp scott/tiger@orcl DIRECTORY=dump_dir DUMPFILE=scott.dmp LOGFILE=scott.log
```

### ● 特定テーブルのみをインポート

```
impdp scott/tiger@orcl DIRECTORY=dump_dir DUMPFILE=scott.dmp TABLES=emp,dept LOGFILE=emp_import.log
```

### ● スキーマを別名に変換してインポート

```
impdp system/password@orcl DIRECTORY=dump_dir DUMPFILE=scott.dmp REMAP_SCHEMA=scott:hr LOGFILE=remap.log
```

---

## ■ よくあるエラーとその対処法

| エラー内容                                 | 原因と対策                                                      |
|--------------------------------------------|-----------------------------------------------------------------|
| ORA-39087: directory name is invalid       | DIRECTORYが存在しないか、名前の指定ミス                         |
| ORA-39002: invalid operation               | 構文ミスまたはユーザーに権限が不足                              |
| ORA-39070: Unable to open the log file     | 指定したディレクトリに書き込み権限がない、またはパスが不正     |

---

## ■ 注意点まとめ

| 項目                  | 内容                                                                 |
|-----------------------|----------------------------------------------------------------------|
| ディレクトリオブジェクト | OracleがOSファイルへアクセスするために必要                           |
| DIRECTORY=            | `impdp`で使用するOracleディレクトリオブジェクト名                     |
| DUMPFILE=             | ディレクトリ内に存在するファイル名（パスは不要）                      |
| 権限付与              | ユーザーにREAD, WRITE権限が必要                                       |

---

## ■ expdpとの連携例（ダンプと復元）

```
expdp your_user/your_password@orcl DIRECTORY=dump_dir DUMPFILE=export.dmp LOGFILE=export.log  
impdp your_user/your_password@orcl DIRECTORY=dump_dir DUMPFILE=export.dmp LOGFILE=import.log
```

---

## ■ 「.dmpファイルを渡されたけどどう使えばいいの？」という場合は？

以下の情報を確認しましょう：

- `.dmp`ファイルの保存場所（OSパス）
- Oracleの接続情報（ユーザー、パスワード、サービス名）
- 復元対象（テーブル単位、スキーマ単位、全体など）

状況に応じた`impdp`コマンド例を提供できます。

---

## 参考リンク

- [Oracle Data Pump Import Utility（公式ドキュメント）](https://docs.oracle.com/en/database/oracle/oracle-database/19/dmpug/oracle-data-pump-import-utility.html)