Object Storage にアップロードしたファイルを Autonomous Database の DATA_PUMP_DIR にコピーする。(Oracle Cloud Infrastructure)

本エントリは Oracle Cloud Infrastructure #2 Advent Calendar 2020 の Day 1 です。
Day 1 と言っても、もう 12月5日 ですけどね……#2 は余り埋まってないので、気ままに書いていこうかと。
彡(ﾟ)(ﾟ)

> Oracle Cloud Infrastructure #2 Advent Calendar 2020
> https://qiita.com/advent-calendar/2020/oci2

Object Storage にアップロードしたファイルを Autonomous Database の DATA_PUMP_DIR に コピーしてみます。

# 1. Object Storage の作成とファイルアップロード

特に難しいことも無いので、粛々とやる。
![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/b5a4f947-69a4-dd1f-a317-6fa1f6ff11ac.jpeg)

# 2. IAMユーザーの作成と権限(Policy)の付与

Object Storage に対する権限を持った IAMユーザー を作成します。付与した権限(Policy Statement)は下記となります。

```
ALLOW GROUP AYU_IAM_Group1 TO manage object-family IN compartment ayu-compartment01
```
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/dd1061fb-7417-9a37-5e3f-101bd736eb6f.jpeg)
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/43559537-1162-7cf6-fdd3-131dfbd7920a.jpeg)
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/4d4abfa8-6a3e-42cc-5acf-11c393557fed.jpeg)

# 3. IAMユーザーの Auth Token発行

IAMユーザーの Auth Token を発行します。後から確認は出来ないので注意
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/61d70b71-fc93-e75d-4806-b9dc30ae71ed.jpeg)

# 4. DBMS_CLOUD.CREATE_CREDENTIAL で Autonomous Database に Auth Token を登録

DBMS_CLOUDパッケージ の CREATE_CREDENTIALプロシージャ で 3. の Auth Token を Autonomous Database に登録します。

```sql
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'CRED_AYU_TOKEN', -- 任意の文字列
    username => 'AYU_IAM_USER1',         -- Auto Token を発行したIAMユーザー名
    password => 'xxxxxxxxxxxxxxxxxxxx'   -- 3. で生成した Auth Token
  );
END;
/

PL/SQLプロシージャが正常に完了しました。
```

# 5. DBMS_CLOUD.GET_OBJECT で Object Storage から Autonomous Database の DATA_PUMP_DIR にファイルをコピー

DBMS_CLOUDパッケージ の CREATE_CREDENTIALプロシージャ で Auth Token を Autonomous Database に登録します。

```sql
BEGIN 
   DBMS_CLOUD.GET_OBJECT(
     credential_name => 'CRED_AYU_TOKEN',
     object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/xxxxxxxxxxxx/b/ayu-bucket1/o/test.txt',
     directory_name => 'DATA_PUMP_DIR'
   ); 
END;
/

BEGIN 
   DBMS_CLOUD.GET_OBJECT(
     credential_name => 'CRED_AYU_TOKEN',
     object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/xxxxxxxxxxxx/b/ayu-bucket1/o/test2.txt',
     directory_name => 'DATA_PUMP_DIR'
   ); 
END;
/

PL/SQLプロシージャが正常に完了しました。

PL/SQLプロシージャが正常に完了しました。
```

# 6. DBMS_CLOUD.LIST_FILES でコピー結果を確認

DBMS_CLOUD.LIST_FILESファンクション で DATA_PUMP_DIR の中身を確認します。TABLEファンクションなので SELECT文 で確認

```sql
COLUMN OBJECT_NAME FORMAT A30;
COLUMN CHECKSUM FORMAT A30;
SELECT * FROM TABLE(DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR'));

OBJECT_NAME                         BYTES CHECKSUM                       CREATED                            LAST_MODIFIED                     
------------------------------ ---------- ------------------------------ ---------------------------------- ----------------------------------
test.txt                                6                                2020/12/05 05:20:09.000000000 GMT: 2020/12/05 05:20:09.000000000 GMT:
test2.txt                               7                                2020/12/05 05:20:57.000000000 GMT: 2020/12/05 05:20:57.000000000 GMT:
```

# 7. まとめ

本当は別記事を書くつもりやったんやけど、思いのほか長くなったんで切り出してみた。
次の Advent Calendar はいつ書こうかしら……皆さんも Oracle Cloud と Advent Calendar をよろしくね彡(^)(^)

> Oracle Cloud Infrastructure Advent Calendar 2020
> https://qiita.com/advent-calendar/2020/oci
> 
> Oracle Cloud Infrastructure #2 Advent Calendar 2020
> https://qiita.com/advent-calendar/2020/oci2

# 8. 参考ドキュメント

> A Autonomous Database提供パッケージ・リファレンス
> DBMS_CLOUDパッケージ
> https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/dbms-cloud-package.html#GUID-CE359BEA-51EA-4DE2-88DB-F21A9FC10721