ExaDB-Dのdbaascliでobject storageにバックアップを取得する方法

# サマリ

ExaDB-D (旧ExaCS) のクラウド・ツール dbaascli ユーティリティを使用して、DBバックアップをユーザー管理のObject Storageにバックアップする手順を記載します。
下記MOSドキュメントに記載されている手順になりますが、本記事では自分が設定していて気づいた点なども補足説明します。
OCI EXACS CONFIGURE UNMANAGED BACKUPS USING DBAASCLI (Doc ID 2878490.1)

手順概要は以下の通りとなります。
1. バックアップ先のObject Storageのバケットを作成
2. ユーザー認証トークンの作成
3. dbaascliでのbackup configファイルの設定とバックアップコマンド実行

## 1. バックアップ先のObject Storageのバケットを作成
バックアップ先のObject Storageのバケットを作成し、そのパスを記録しておきます
この情報はあとで、dbaascliの設定ファイルにてインプット情報として使います

### 1-1 Object Storageのバケットを作成

ここではfor_backupという名前のバケットを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/41e0feb3-06aa-c226-0910-dd09cd56b65c.png)

作成されたバケットです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/849923bd-88b1-53bf-578d-cba3ab42256d.png)

### 1-2 Object StorageのバケットのURLパスを確認
後で、バックアップ先としてbackup configファイルに指定するバケットのURLパスを確認します。
ここでは、dummy.txtというファイルをアップロードして、そのファイルの詳細確認画面からURLパスを得ます。
（命名規則からバケットのURLパスを特定する場合は、この手順は省略してください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/7ec730a3-33b0-0207-eeed-057c90c601b1.png)
アップロードしたファイルのオブジェクト詳細を確認することでURLパスがわかります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/bc8b16cd-c764-3319-2bd1-f05618643f09.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/dfd39a95-b278-2174-a288-02db83fcec93.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/d3ff991e-99a1-6601-aab3-54f17a1ed92b.png)

これでURLパスがわかりました。実際はswift形式を利用するので、以下の置き換えをします。
URLパス
`https://objectstorage.ap-osaka-1.oraclecloud.com/n/orasejapan/b/for-backup`
↓
Swift形式
`https://swiftobjectstorage.ap-osaka-1.oraclecloud.com/v1/orasejapan/for-backup`


## 2. ユーザー認証トークンの作成
先ほど作成したObject Storageにアクセス可能なユーザーの認証トークンを作成します。
この情報はあとで、dbaascliの設定ファイルにてインプット情報として使います

### ユーザーの認証トークンを作成

・人型マークからUser Settingsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/55126d33-90ee-06c5-8d38-229d1b559afb.png)


・Auth Tokensを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/8ced34e5-c061-d483-08c8-4ae02b7b9a28.png)
・Generate Tokenのボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/26dfc54c-7910-edcb-4eed-e83f1f3abbf1.png)

・名前を付けてGenerate Tokenのボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/f2b5d0fb-c384-ccdb-4cd7-2ad65acea9a9.png)

・認証Tokenのパスワードが表示されるのでメモしておきます。あとで、backup configファイルへの入力で使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85051/3bbeaf03-9a60-47c9-7aa0-a5d74e7176ef.png)

## 3. dbaascliでのbackup configファイルの設定とバックアップコマンド実行
dbaascliで現在設定内容をbackup configファイルに出力後、編集し、再登録した後、バックアップコマンドを実行という手順になります

### 3-1 backup configファイルの設定

・backup configファイルの取得
ここでは、もとのbackup configファイルはとっておき、bkconf1.txtを編集する用のファイルとして使うためコピーしておきます。

```
# dbaascli database backup --dbname db0322 --getConfig --configfile /tmp/bkconf_org.txt
# cp -p /tmp/bkconf_org.txt /tmp/bkconf1.txt
```

・backup configファイルを編集

(★はまったポイント)
bkup_oss_userには先ほどauth tokenを設定したユーザー名を指定しますが、今回の例のようにIDCSユーザーの場合は、以下のように指定します。メールアドレスのみではないところに注意。
`oracleidentitycloudservice/kxxxxxxxxx@oracle.com`

```
# vi /tmp/bkconf1.txt
以下項目を編集
bkup_oss=yes
bkup_cron_entry=yes
bkup_oss_url=https://swiftobjectstorage.<region>.oraclecloud.com/v1/<tenancy>/<backup_bucket_name>
bkup_oss_user=<oci_user_name>
bkup_oss_passwd=<password>
bkup_oss_recovery_window=<n>
```
・backup configファイルの編集内容を確認
```
# diff /tmp/bkconf_org.txt /tmp/bkconf1.txt
8c8
< bkup_cron_entry=
---
> bkup_cron_entry=yes
44c44
< bkup_oss=no
---
> bkup_oss=yes
48c48
< bkup_oss_recovery_window=
---
> bkup_oss_recovery_window=30
52c52
< bkup_oss_url=
---
> bkup_oss_url=https://swiftobjectstorage.ap-osaka-1.oraclecloud.com/n/orasejapan/b/for-backup
56c56
< bkup_oss_user=
---
> bkup_oss_user=oracleidentitycloudservice/kXXXXXXXXXX@oracle.com
60c60
< #bkup_oss_passwd=
---
> bkup_oss_passwd=BXXXXXXXXXXXXXXX
```

・backup configファイルの反映
(★はまったポイント)
このコマンドを打つと、プロンプトには即時かえって来ますが、実際はバックグラウンドで設定反映ジョブが動いており、反映まで時間がかかります。成功の場合3分30分ほど、失敗の場合13分ほどかかります。また、失敗した場合でも設定ファイルからoss passwordの設定が消えるので、再設定時には設定しなおす必要があります。

```
dbaascli database backup --dbname db0322 --configure --configfile /tmp/bkconf1.txt

DBAAS CLI version 23.1.1.0.1
Executing command database backup --configure --configfile /tmp/bkconf1.txt
Session log: /var/opt/oracle/log/db0322/database/backup/dbaastools_2023-03-24_05-45-48-AM_159499.log
DBaaS Backup API V1.5 @2023 Multi-Oracle home
-> Action : set_config
-> logfile: /var/opt/oracle/log/db0322/bkup_api_log/bkup_api_33c8f75f_20230324054551.479199.log
cfgfile : /tmp/bkconf1.txt
Using configuration file: /tmp/bkconf1.txt
API::Parameters validated.
UUID 2384fc68ca0711ed986702001701c671 for this set_config(configure-backup)
** process started with PID: 160793
** see log file for monitor progress
```

・設定反映ジョブの確認。ここではwatchコマンドで5秒ごとにジョブのステータスを経過観察します。
```
# watch -n 5 dbaascli database backup --dbname db0322 --status --uuid 2384fc68ca0711ed986702001701c671

Every 5.0s: dbaascli database backup --dbname db0322 --status --uuid 2384fc68ca0711ed986702001701c671                             Fri Mar 24 05:46:56 2023

DBAAS CLI version 23.1.1.0.1
Executing command database backup --status --uuid 2384fc68ca0711ed986702001701c671
Session log: /var/opt/oracle/log/db0322/database/backup/dbaastools_2023-03-24_05-47-01-AM_168500.log
DBaaS Backup API V1.5 @2023 Multi-Oracle home
@ STARTING CHECK STATUS 2384fc68ca0711ed986702001701c671
[ REQUEST TICKET ]
[UUID    ->  2384fc68ca0711ed986702001701c671
[DBNAME  ->  db0322
[STATE   ->  running(←★ここがsuccessになるまで監視)
[ACTION  ->  configure-backup
[STARTED ->  2023-03-24 05:45:54 UTC
[ENDED   ->   UTC
[PID     ->  160793
[TAG     ->
[PCT     ->
[ END TICKET ]
dbaascli execution completed
```

・成功すると使用したbackup configファイルはなくなります

```
# ls /tmp/bkconf1.txt
ls: cannot access /tmp/bkconf1.txt: No such file or directory
```
### 3-2 バックアップコマンドの実行

・バックアップコマンドの実行
レベル0バックアップの取得の場合、以下のように実行します
```
# dbaascli database backup --start --dbname db0322 --level0
```

バックアップコマンドは以下のようなコマンドが実行できます。
`# dbaascli database backup --start --dbName <db name> --level0 | --level1 | (--archival --tag <value> )`
level0はフルバックアップ、level1は増分バックアップ、archivalは保持期間の設定によらず保持する目的のフルバックアップになります

バックアップリストは以下コマンドで取得できます。
`dbaascli database backup --list --dbName`

バックアップジョブの実行履歴は以下コマンドで取得できます。
`dbaascli database backup --dbName <dbname> --showHistory --all`

以上です。