Autonomous Databaseの手動バックアップ方法

# はじめに
Autonomous Database（ADB）では自動バックアップが設定さていますが、手動バックアップの設定も可能です。
手動バックアップを行うには事前設定が必要になります。
また、バックアップの格納先は ```Object Storage```になります。

* 自動バックアップについて
    * 内部的にRMANを利用
    * フルバックアップ：60日ごと
    * 累積バックアップ：週次
    * 増分バックアップ：日次
    * アーカイブ・ログ：増分バックアップ間の更新
    * 保存先：Object Storage（バケットの指定不可）
    * 保存期間：60日間 
    *リストア・リカバリ：保存期間内の任意のポイントインタイム
* 手動バックアップ
    * 保存先：Object Storage（作成したバケットに保存）
    * 保存期間：60日間 
    * リストア・リカバリ：保存期間内の任意のポイントインタイム

* 補足：Flashback機能について
    * Flashback Database
        * リストア時に内部的に利用されている
        * ユーザーが明示的に利用はできない
    * その他は、通常のOracle Databaseと同様にユーザーが明示的に利用可能
        * Flashback Query
        * Flashback Table
        * Flashback Drop
    * 参考：[Autonomous Database でFlashback機能は利用できますか？Permalink](https://oracle-japan.github.io/ocidocs/faq/services/autonomous/autonomous-database-faq/)


# 手動バックアップの設定手順
## 1. ユーザの認証トークン作成
各ユーザーは同時に**最大2つ**の認証トークンを持つことができます（認証トークンについては[こちら](https://docs.oracle.com/ja-jp/iaas/Content/Identity/Tasks/managingcredentials.htm)

* OCIコンソール右上の```プロファイル``` → ```ユーザー設定``` をクリック
![o5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/dd0205bc-46fa-d08e-df91-8f594ec0cdbf.png)

* ```認証トークン``` → ```トークンの生成``` をクリック
![o6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/faba2c3d-1894-27f8-ff23-af0ea8e8f7a0.png)

* 今回は、「```bucket-token```」という名前のトークンを生成しました。
![o7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/7711dd0a-ff72-856a-f8ff-d7d8e4528a5d.png)

* 生成されたトークンを忘れずに**コピー**し、メモしておいてください（後ほど使います）
![o8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/8da974a0-564f-a42f-5f1e-1b4f8331f43f.png)
ユーザー名もコピーしておきます
「oracleidentitycloudservice/<ユーザ名>」の**oracleidentitycloudservice**のところからコピーしメモしておきます（後ほど使います）

## 2. 手動バックアップ格納先のObject Storage バケットの作成
* 設定前は、手動バックアップ・ストアが ```未構成``` です（OCIコンソールの```Autonomous Databaseの詳細```から確認できます）
* バケットを作成します
```ストレージ``` →　```オブジェクト・ストレージとアーカイブ・ストレージ``` →　```バケットの作成```
![o1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/c9011398-6c09-bf0a-b077-20cc4ee74372.png)
今回は、「```kadw-backup```」というバケットを作成
![o2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/77f2ca84-2fea-08c3-5678-c477de2e98a8.png)
バケットが作成されました
![o3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/d5a70854-c269-b52f-ed18-4ab8c308029a.png)
作成されたバケットをクリック → バケットの ```ネームスペース```を確認します（後ほど使います）
![o4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/297c7ef1-eef6-a986-593d-9c0f631a8346.png)

バケットを指定するURLの形式はこちらです（後ほど使います）
```
https://swiftobjectstorage.region.oraclecloud.com/v1/namespace-string/bucket_name
```

## 3. ADBの設定
### 3-1. DBプロパティ「DEFAULT_BACKUP_BUCKET」を設定し作成したバケットをADBに識別させます
ADMINユーザでADBにログインし、```DEFAULT_BACKUP_BUCKET```を確認
```sql
select PROPERTY_NAME,PROPERTY_VALUE from DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_BACKUP_BUCKET';
```
まだ設定していないです
```sql
no rows selected
```
```DEFAULT_BACKUP_BUCKET```を設定
```sql
ALTER DATABASE PROPERTY SET default_backup_bucket='https://swiftobjectstorage.<バケットを作成したリージョン>.oraclecloud.com/v1/<先程確認したネームスペース>/<作成したバケット名>';
```
（例）
```sql
ALTER DATABASE PROPERTY SET default_backup_bucket='https://swiftobjectstorage.ap-osaka-1.oraclecloud.com/v1/<xxxx>/kadw-backup';
```
設定できたか確認
```sql
select PROPERTY_NAME,PROPERTY_VALUE from DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_BACKUP_BUCKET';
```
次のように表示されます
```sql
           PROPERTY_NAME                                                                    PROPERTY_VALUE 
________________________ __________________________________________________________________________________ 
DEFAULT_BACKUP_BUCKET    https://swiftobjectstorage.ap-osaka-1.oraclecloud.com/v1/<xxxx>/kadw-backup
```

### 3-2. 資格証明をADBに保存
[DBMS_CLOUD](https://docs.oracle.com/cd/F19136_01/arpls/DBMS_CLOUD.html).CREATE_CREDENTIAプロシージャを使用し、先ほど作成した```資格証明（認証トークン）```をADBに保存します。

```sql
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => '<任意の名前>',
    username => '<認証トークンを発行したIAMユーザ名>',
    password => '<作成した認証トークン>'
);
END;
/
```
![o9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/8c362e50-3ae2-58f5-2c8a-f1e59d40180a.png)

例

```sql
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'bucket_token',
    username => 'oracleidentitycloudservice/IAMユーザ名',
    password => '作成した認証トークン'
);
END;
/
```

### 3-3. DBプロパティ「```DEFAULT_CREDENTIAL```」に資格証明に設定
ALTER DATABASE文で、```DEFAULT_CREDENTIAL```に資格証明を設定します。
```sql
ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'admin.bucket_token';
```
設定の確認
```sql
select PROPERTY_NAME,PROPERTY_VALUE from DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_CREDENTIAL';
```
次のように出力されます
```sql
        PROPERTY_NAME        PROPERTY_VALUE 
_____________________ _____________________ 
DEFAULT_CREDENTIAL    admin.bucket_token    
```

# 4. OCIコンソールから手動バックアップを作成
OCIコンソールから```Autonomous Databaseの詳細```を確認すると、```手動バックアップ・ストア```に作成したバケット名が表示されています
![o9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/65b7e602-b2fe-6aa7-228e-14fa272cce57.png)

```Autonomous Databaseの詳細```の```バックアップ``` → ```手動バックアップの作成```
![o10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/20e82935-3524-f6fe-ebc4-50da7782a7a0.png)
バックアップ名を入力し手動バックアップを作成します
![o11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/bc78e905-d7b1-c6ba-be2f-4686f80f416b.png)
作成が完了すると次のように表示されます。
![o12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449014/a3200193-22f1-f88c-bc69-0a76211911d4.png)

# 参考情報
* OCIドキュメント
    * Autonomous Databaseの手動バックアップ - [手動バックアップを格納するバケットの設定](https://docs.oracle.com/ja-jp/iaas/Content/Database/Tasks/adbbackingup.htm)