[OCI]Autonomous DatabaseからObject StorageへのExportしてみた。

OCI Autonomous Database(ADW/ATP)からData Pump Exportユーティリティを使って
Object StorageにExportをしてみた。


### 参考情報
- [Move Data with Data Pump Export to Object Store](https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/export-data-other-database-dp.html#GUID-AB5F3773-EAD3-4E49-963D-69E8ECFBF116)
- [ADW(Autonomous Data Warehouse) に OCI の Object Storage にアップロードした dmp を インポート(impdp)してみる。](https://qiita.com/ora_gonsuke777/items/1d26f8950efc90ad654f)

# 事前準備
Object StorageにData Pump Exportするための事前準備として以下の作業を実施

- Autonomous Databaseバージョンの確認
- 作業クライアントの準備
- OCI ユーザの準備（認証トークン）
- Credential の作成
 
## Autonomous Databaseバージョンの確認
Data Pump Exportユーティリティは接続するサーバのバージョンより新しいものは利用できないため
接続するAutonomous Databaseのバージョンを確認
![image01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/1edb1246-f64f-eddf-6d0a-b8b9d2dbb7ed.jpeg)


## 作業クライアントの準備
Export対象のAutonomous DatabaseのバージョンにあったOracle ClientおよびExportユーティリティをインストールしたClientを用意し、Autonomous Databaseに接続できるようにウォレットをダウンロード・展開し、sqlplus で ADMINユーザで接続できることを確認します。
（Oracle Instant Clientを使って準備する場合はToolsパッケージをインストールすることでData Pumpがインストールされます）

## OCI ユーザの準備（認証トークン）
Object StorageにObject作成ができる権限を持つOCIユーザの認証トークンを生成します。
![image02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/bcf14d51-a3c9-b174-8a74-b30abf9eb964.jpeg)

生成されたトークンをコピー
![image03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/616b96b2-4416-3bc6-054b-5d22581b3d03.jpeg)

## Credential の作成
SQL実行ができるツール（SQL*Plusなど）でExport対象のAutonomous DatabaseにADMINユーザで接続し、以下のPL/SQLを実行し、Credentialを生成します。

```
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DEF_CRED_NAME',
    username => 'user1@example.com',
    password => 'password'
  );
END;
/
```
credential_name => Credentialの名前のなる任意の文字列
username => 認証トークンを生成したOCIユーザ名
password => 生成されたトークン

# Data Pump Exportの実行
Exportを実行します。
expdpパラメータについては、次の点に注意してください。

- Oracle Cloud Infrastructure Object Storageエクスポートの最大filesizeパラメーター値は10Gです。
- Oracle Cloud Infrastructure Object Storage Classicエクスポートの最大filesizeパラメーター値は20Gです。
- export.logログファイルのために、directoryパラメータは、data_pump_dirディレクトリを指定します。

Exportのコマンドオプションは、利用するData Pump Exportユーティリティのバージョンによって違います。

## バージョン 19.6 か それ以前のバージョンの場合
事前準備で作成した Credential をDEFAULT_CREDENTIALとしてPropertyにセットします。

```
ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'ADMIN.DEF_CRED_NAME'
```

Exportコマンドの実行します。

```
expdp admin/password@ADWC1_high \
     filesize=5G \
     dumpfile=default_credential:https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/bucketname/o/exp%U.dmp \
     parallel=16 \
     encryption_pwd_prompt=yes \
     logfile=export.log \
     directory=data_pump_dir
```

「namespace-string」はExport先のObject Storageのネームスペースを指定
「bucketname」はExport先のObject Storageバケットを指定
例では、Export接続にHIGHデータベースサービスを使用し、PARALLELのOCPUの数にパラメーターを設定し高速に実行することを考慮しています。
補足：Fullエクスポートを実行するか、他のユーザーが所有するオブジェクトをエクスポートするには、DATAPUMP_CLOUD_EXP ロールが必要です。

## バージョン 19.7 か それ以降のバージョンの場合
Exportコマンドで事前準備で作成した Creditial を指定し、Exportを実行します。

```
expdp admin/password@ADWC1_high \
     filesize=5G \
     credential=def_cred_name \
     dumpfile=https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/bucketname/o/exp%U.dmp \
     parallel=16 \
     encryption_pwd_prompt=yes \
     logfile=export.log \
     directory=data_pump_dir
```
「namespace-string」はExport先のObject Storageのネームスペースを指定
「bucketname」はExport先のObject Storageバケットを指定
例では、Export接続にHIGHデータベースサービスを使用し、PARALLELのOCPUの数にパラメーターを設定し高速に実行することを考慮しています。
補足：Fullエクスポートを実行するか、他のユーザーが所有するオブジェクトをエクスポートするには、DATAPUMP_CLOUD_EXP ロールが必要です。

## Autonomous Database (18c)に対して実行したコマンドログ

```
$ expdp admin/<password>@ADWC1_high \
     filesize=5G \
     dumpfile=default_credential:https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/bucketname/o/exp%U.dmp \
     parallel=16 \
     encryption_pwd_prompt=yes \
     logfile=export.log \
     directory=data_pump_dir \
     tables='SH.SALES_TRANS_CUST,SH.CUSTOMERS,SH.ORDERS'

Export: Release 18.0.0.0.0 - Production on Wed Mar 25 06:03:56 2020
Version 18.5.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production

Encryption Password:
Starting "ADMIN"."SYS_EXPORT_TABLE_01":  admin/********@orcl_high filesize=5G dumpfile=default_credential:https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr9k7zt1ylwk/b/kenwatan/o/exp%U.dmp parallel=16 encryption_pwd_prompt=yes logfile=export.log directory=data_pump_dir tables=SCOTT.SALES_TRANS_CUST,SCOTT.CUSTOMERS,SCOTT.FACTORY_D
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "SH"."CUSTOMERS"                             0 KB       0 rows
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
. . exported "SH"."ORDERS"                         4.195 GB 132120597 rows
. . exported "SH"."SALES_TRANS_CUST"                  153.2 KB    2804 rows
Master table "ADMIN"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ADMIN.SYS_EXPORT_TABLE_01 is:
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp01.dmp
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp02.dmp
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp03.dmp
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp04.dmp
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp05.dmp
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp06.dmp
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp07.dmp
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp08.dmp
  https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1/nr9k7zt1ylwk/kenwatan/exp09.dmp
Job "ADMIN"."SYS_EXPORT_TABLE_01" successfully completed at Wed Mar 25 06:13:19 2020 elapsed 0 00:09:21

$
```

「encryption_pwd_prompt=yes」を指定し暗号化します。
途中プロンプト「Encryption Password:」が表示され暗号化パスワードを入力します。
impdp実行時に同じ暗号化パスワードを入力して復号化するため、覚えておいてください。
（暗号化パスワードの最大長は128バイト）


--
Autonomous Databaseから直接Object StorageにExportができました。