[Oracle Cloud] Base Database ) dbcli でユーザ管理Object Storageへバックアップしリカバリしてみた (2024/01/18)

# はじめに

OCIのOracle DatabaseサービスであるBase Databaseには自動バックアップが提供されており、バックアップファイルがOracle管理のObject Storageに格納されます。
バックアップを別リージョンへ転送する場合などユーザ管理のObject Storageへ出力したいことがあります。
ユーザ管理のObject Storageにバックアップする方法として、Oracle Database Backup Cloud Serviceを使用する方法とdbcliユーティリティを使用する方法があります。
今回は dbcli でバックアップし、バックアップからのリカバリを実施してみました。


# 前提作業

- Object Storageを操作できるユーザの作成
- 作成したユーザで認証トークンの作成
- Object Storageバケットの作成
- オブジェクト・ストレージ・ネームスペースの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/44f1819b-3e4e-2fbc-f8ec-36ae2cc02956.png)

- 前提作業の確認（Base Databaseからコマンド発行）

```
$ curl -i -u '<ユーザ名>:<認証トークン>' https://swiftobjectstorage.<リージョン>.oraclecloud.com/v1/<オブジェクト・ネームスペース>/<バケット名>
HTTP/1.1 200 OK
accept-ranges: none
X-Container-Object-Count: 0
X-Container-Bytes-Used: 0
X-Storage-Class: Standard
X-Trans-Id: syd-1:IRuA3ky6h9ebA-USOT4ywLWC7PR513h2WUJcKij1_gQeZ-S1RaDdfh_RRjTjOnbJ
X-Timestamp: 1705579463.93500
Content-Type: application/json; charset=utf-8
Content-Length: 2
date: Thu, 18 Jan 2024 12:00:00 GMT
opc-request-id: syd-1:IRuA3ky6h9ebA-USOT4ywLWC7PR513h2WUJcKij1_gQeZ-S1RaDdfh_RRjTjOnbJ
x-api-id: swift
access-control-allow-origin: *
access-control-allow-methods: POST,PUT,GET,HEAD,DELETE,OPTIONS
access-control-allow-credentials: true
access-control-expose-headers: accept-ranges,access-control-allow-credentials,access-control-allow-methods,access-control-allow-origin,content-length,content-type,date,opc-client-info,opc-request-id,x-api-id,x-container-bytes-used,x-container-object-count,x-storage-class,x-timestamp,x-trans-id
--

* <ユーザ名>；OCIユーザ名
* <認証トークン>：OCIユーザの認証トークン
* <リージョン>；Object Storageバケットを作成したリージョン識別子。例）東京リージョンの場合は、ap-tokyo-1
* <オブジェクト・ネームスペース>は、オブジェクト・ストレージ・ネームスペース
* <バケット名>；Object Storageバケット名
```

「HTTP/1.1 200 OK」が返っていることを確認します。

# 作業ステップ

- Object Store の作成 ( dbcli create-objectstoreswift )
- Backup Configuration の作成 ( dbcli create-backupconfig )
- Backup Configuration IDとDatabase IDの関連付け ( dbcli update-database )
- Databaseのバックアップ ( dbcli create-backup )
- リカバリ ( dbcli recover-database )

# Object Store の作成
dbcli create-objectstoreswiftコマンドを使用して、Object Storageにアクセスするためのエンドポイントと資格証明を含むObject Storeを DB システム上に作成します。
オプション
- -e swiftエンドポイント
- -n オブジェクト・ストア名（任意）
- -t オブジェクト・ストレージ・ネームスペース
- -u OCIユーザ名
- -p 認証トークン

```
# dbcli create-objectstoreswift -e https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1 -n dbbackup -t XXXXX -u <ユーザ名> -p <認証トークン>
{
  "jobId" : "8ba21e4e-8e82-4115-a6da-98a1f8028190",
  "status" : "Created",
  "message" : "Create object store swift",
  "errorCode" : "",
  "reports" : [ ],
  "createTimestamp" : "January 18, 2024 00:09:00 PM UTC",
  "resourceList" : [ {
    "resourceId" : "368ba4cc-17bf-4745-a65d-03a5a45e05a2",
    "resourceType" : "ObjectStoreSwift",
    "jobId" : "8ba21e4e-8e82-4115-a6da-98a1f8028190",
    "updatedTime" : "January 18, 2024 00:09:00 PM UTC"
  } ],
  "description" : "create object store:dbnew",
  "updatedTime" : "January 18, 2024 00:09:02 PM UTC",
  "percentageProgress" : "0%",
  "cause" : null,
  "action" : null
}
```

dbcli list-objectstoreswiftsコマンドで作成したObject Storeを確認(ID をメモ)

```
# dbcli list-objectstoreswifts

ID                                       Name                 UserName                       TenantName                Url
---------------------------------------- -------------------- ------------------------------ ------------------------- ---------------------------------------------------------------------------
368ba4cc-17bf-4745-a65d-03a5a45e05a2     dbbackup                <ユーザ名> 	XXXXX                https://swiftobjectstorage.ap-tokyo-1.oraclecloud.com/v1
```


# Backup Configuration の作成
dbcli create-backupconfigコマンドを使用して、バックアップ先とリカバリ期間を定義するBackup Configuration(バックアップ構成)を作成します。
オプション
- -w バックアップおよびアーカイブREDOログが保持される日数(1から30日を指定) 
- -n バックアップ構成の名前 
- -c バケットの名前
- -d OBJECTSTORE (バックアップの保存先の意味)
- -o Object Store ID

```
# dbcli create-backupconfig -w 7 -n dbbkcfg -c dbbackup -d OBJECTSTORE -o 368ba4cc-17bf-4745-a65d-03a5a45e05a2
{
  "jobId" : "5911c004-c558-4143-8bd6-0ab333439178",
  "status" : "Created",
  "message" : "backup config creation",
  "errorCode" : "",
  "reports" : [ ],
  "createTimestamp" : "January 18, 2024 00:11:00 PM UTC",
  "resourceList" : [ {
    "resourceId" : "702482f8-1629-4751-816f-101d1602ce28",
    "resourceType" : "BackupConfig",
    "jobId" : "5911c004-c558-4143-8bd6-0ab333439178",
    "updatedTime" : "January 18, 2024 00:11:01 PM UTC"
  } ],
  "description" : "create backup config:dbbkcfg",
  "updatedTime" : "January 18, 2024 00:11:01 PM UTC",
  "percentageProgress" : "0%",
  "cause" : null,
  "action" : null
}
```

dbcli list-backupconfigsコマンドで作成したBackup Configurationを確認(ID をメモ)

```
ID                                       Name                 RecoveryWindow   CrosscheckEnabled   BackupDestination
---------------------------------------- -------------------- ---------------- ------------------- --------------------
702482f8-1629-4751-816f-101d1602ce28     dbbkcfg              7                true                ObjectStore
```

# Backup Configuration IDとDatabase IDの関連付け
dbcli list-databasesコマンドでバックアップ対象のデータベースのIDを確認

```
# dbcli list-databases

ID                                       DB Name    DB Type  DB Version           CDB        Class    Shape    Storage    Status        DbHomeID
---------------------------------------- ---------- -------- -------------------- ---------- -------- -------- ---------- ------------ ----------------------------------------
74ecc025-c76f-499d-9bed-9708eb40afd3     ORCL     Si       19.21.0.0.0          true       Oltp              ASM        Configured   b3065822-4b2f-4cdd-a43b-8c37cea5a1d3
```

dbcli update-databaseコマンドを使用して、バックアップ構成をデータベースに関連付けます。
オプション
- -bi Backup Configuration ID
- -i 更新するデータベースID

```
# dbcli update-database -bi 702482f8-1629-4751-816f-101d1602ce28 -i 74ecc025-c76f-499d-9bed-9708eb40afd3
{
  "jobId" : "cd976ac3-3904-4669-ab23-6d5580c09d78",
  "status" : "Created",
  "message" : "update database",
  "errorCode" : "",
  "reports" : [ ],
  "createTimestamp" : "January 18, 2024 00:20:00 PM UTC",
  "resourceList" : [ {
    "resourceId" : "74ecc025-c76f-499d-9bed-9708eb40afd3",
    "resourceType" : "DB",
    "jobId" : "cd976ac3-3904-4669-ab23-6d5580c09d78",
    "updatedTime" : "January 18, 2024 00:20:00 PM UTC"
  } ],
  "description" : "update database : ORCL",
  "updatedTime" : "January 18, 2024 00:20:01 PM UTC",
  "percentageProgress" : "0%",
  "cause" : null,
  "action" : null
}
```

dbcli describe-jobコマンドでジョブの完了を確認 ( -i でジョブID を指定 )

```
# dbcli describe-job -i cd976ac3-3904-4669-ab23-6d5580c09d78

Job details
----------------------------------------------------------------
                     ID:  cd976ac3-3904-4669-ab23-6d5580c09d78
            Description:  update database : DB1228
                 Status:  Success
                Created:  January 18, 2024 at 00:20:00 PM UTC
               Progress:  100%
                Message:  update database
             Error Code:

Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Configure Database for Backup                                            January 18, 2024 at 00:20:01 PM UTC January 18, 2024 at 00:21:55 PM UTC Success
Install object store swift module                                        January 18, 2024 at 00:20:07 PM UTC January 18, 2024 at 00:20:39 PM UTC Success
```

# Databaseのバックアップ
dbcli create-backupコマンドを使用して、データベースのバックアップを作成します。 
オプション
- -i バックアップを取得するデータベースのID 
- -bt バックアップ・タイプ

```
# dbcli create-backup -i 74ecc025-c76f-499d-9bed-9708eb40afd3 -bt Regular-L0

{
  "jobId" : "48b46404-261d-4410-bdec-161b72c5aafd",
  "status" : "Created",
  "message" : null,
  "errorCode" : "",
  "reports" : [ ],
  "createTimestamp" : "January 18, 2024 00:30:00 PM UTC",
  "resourceList" : [ ],
  "description" : "Create Regular-L0 Backup with TAG-auto for Db:DB1228 in OSS:dbbackup",
  "updatedTime" : "January 18, 2024 00:30:02 PM UTC",
  "percentageProgress" : "0%",
  "cause" : null,
  "action" : null
}
```

dbcli describe-jobコマンドでジョブの完了を確認 ( -i でジョブID を指定 )

```
# dbcli describe-job -i 48b46404-261d-4410-bdec-161b72c5aafd

Job details
----------------------------------------------------------------
                     ID:  48b46404-261d-4410-bdec-161b72c5aafd
            Description:  Create Regular-L0 Backup with TAG-auto for Db:DB1228 in OSS:dbbackup
                 Status:  Success
                Created:  January 18, 2024 at 00:30:00 PM UTC
               Progress:  100%
                Message:
             Error Code:

Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Validate Database backup Configuration                                   January 18, 2024 at 00:30:02 PM UTC January 18, 2024 at 00:31:20 PM UTC Success
Install object store swift module                                        January 18, 2024 at 00:30:07 PM UTC January 18, 2024 at 00:30:40 PM UTC Success
Backup Database                                                          January 18, 2024 at 00:31:20 PM UTC January 18, 2024 at 00:32:15 PM UTC Success
Validate the backup                                                      January 18, 2024 at 00:33:35 PM UTC January 18, 2024 at 00:33:43 PM UTC Success
Backup TDE Wallet.                                                       January 18, 2024 at 00:33:43 PM UTC January 18, 2024 at 00:33:47 PM UTC Success
Populate job report                                                      January 18, 2024 at 00:33:47 PM UTC January 18, 2024 at 00:33:47 PM UTC Success
```

# リストア
dbcli recover-databaseコマンドを使用して、データベースをリカバリします。
オプション
- -i データベースのID 
- -t リカバリタイプ

```
# dbcli recover-database -i 74ecc025-c76f-499d-9bed-9708eb40afd3 -t Latest
{
  "jobId" : "0727530b-c317-4b97-a89c-216758b81e31",
  "status" : "Created",
  "message" : null,
  "errorCode" : "",
  "reports" : [ ],
  "createTimestamp" : "January 18, 2024 01:00:00 PM UTC",
  "resourceList" : [ ],
  "description" : "Create recovery-latest for db : DB1228",
  "updatedTime" : "January 18, 2024 01:00:03 PM UTC",
  "percentageProgress" : "0%",
  "cause" : null,
  "action" : null
}
```

dbcli describe-jobコマンドでジョブの完了を確認 ( -i でジョブID を指定 )

```
# dbcli describe-job -i 0727530b-c317-4b97-a89c-216758b81e31

Job details
----------------------------------------------------------------
                     ID:  0727530b-c317-4b97-a89c-216758b81e31
            Description:  Create recovery-latest for db : DB1228
                 Status:  Success
                Created:  January 18, 2024 at 01:00:00 PM UTC
               Progress:  100%
                Message:
             Error Code:

Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Recover Database                                                         January 18, 2024 at 01:00:03 PM UTC  January 18, 2024 at 01:03:59 PM UTC  Success
Post Recovery Actions                                                    January 18, 2024 at 01:03:59PM UTC  January 18, 2024 at 01:06:15 PM UTC  Success
```

※ バックアップを取得したデータベースとは別のデータベースにリストアする場合、ユーザ管理のObject Storageバケットへ取得したRMANバックアップをBase Databaseにリストアの手法に従います。

#  コマンドリファレンスと補足

### dbcli create-backupconfigパラメータ
| パラメータ | 意味 | 説明 |
|:-:|:-|:-|
|-c |--container|Oracle Cloud Infrastructure Object Storageサービスの既存のバケットの名前   |
|-cr |--crosscheck   |(オプション)クロスチェック操作を有効にするかどうか(デフォルト)   |
|-no-cr |--no-crosscheck   | オプション)クロスチェック操作をしない  |
|-d   |--backupdestination   |バックアップの保存先。DISK (ローカルFast Recovery Area)、OBJECTSTORE (OCI Object Storage、--containerパラメータおよび--objectstoreswiftIdパラメータも指定する必要がある)、NONE (バックアップを無効にする)のいずれか。   |
|-h   |--help   |(オプション)コマンドの使用に関するヘルプを表示   |
|-j   |--json   |(オプション) JSON出力を表示   |
|-n   |--name   |バックアップ構成の名前   |
|-o   |--objectstoreswiftId   |OCI Object Storageのエンドポイントおよび資格証明を含むオブジェクト・ストアのID。   |
|-on   |--objectstoreswiftName  |OCI Object Storageのエンドポイントおよび資格証明を含むオブジェクト・ストアの名前。   |
|-w   |--recoverywindow   |バックアップおよびアーカイブREDOログが保持される日数。現在から指定した日数までさかのぼる。DISKバックアップの保存先には、1から14日を指定。OBJECTSTOREバックアップの保存先には、1から30日を指定。   |
### dbcli update-databaseパラメータ
| パラメータ | 意味 | 説明 |
|:-:|:-|:-|
|-bi   |--backupconfigid   |backup configuration IDを指定。IDを取得するには、dbcli list-backupconfigsコマンドを使用   |
|-bin   |--backupconfigname   |backup configuration名を指定。dbcli list-backupconfigsコマンドを使用して、名前を取得   |
|-id   |--databaseid   |(オプション) DBIDを指定。DBIDを取得するには、V$DATABASEビューまたはRC_DATABASEおよびRC_DATABASE_INCARNATIONリカバリ・カタログ・ビューを問い合せ   |
|-in   |--dbName   |更新するデータベース名を指定。dbcli list-databasesコマンドを使用して、データベース名を取得   |
|-h   |--help   |(オプション)コマンドの使用に関するヘルプを表示   |
|-i   |--dbid   |更新するデータベースIDを指定。dbcli list-databasesコマンドを使用して、データベースIDを取得   |
|-j   |--json   |(オプション) JSON出力を表示   |
|-no-ad   |--noautobackup   |(オプション)指定したデータベースの自動バックアップの無効化。無効にすると、CLIを使用して自動バックアップを再度有効にすることはできません。自動バックアップを再度有効にするには、コンソールを使用します。   |
### dbcli create-backupパラメータ
| パラメータ | 意味 | 説明 |
|:-:|:-|:-|
|-bt   |--backupType   |(オプション)バックアップ・タイプ。指定可能な値は、Regular-L0、Regular-L1、Longterm、ArchiveLog (Regular-L0Regular-L1/は、増分L0およびL1バックアップに対応、Longtermは完全バックアップに対応、ArchiveLogは、アーカイブREDOログのバックアップに対応、デフォルト値はRegular-L1)   |
|-c   |--component   |(オプション)コンポーネント。使用可能な値は、DatabaseおよびTdeWallet。デフォルト値は「Database」値TdeWalletは、TDEウォレットをバックアップ   |
|-h   |--help   |(オプション)コマンドの使用に関するヘルプを表示   |
|-i   |--dbid   |バックアップするデータベースのID。dbcli list-databasesコマンドを使用して、データベースのIDを取得   |
|-in   |--dbName   |バックアップするデータベースの名前。dbcli list-databasesコマンドを使用して、データベースの名前を取得   |
|-j   |--json   |(オプション) JSON出力を表示   |
|-k   |--keepDays   |(オプション)Longtermタイプの場合のみバックアップまたはコピーを保持するまでの時間を指定します。この時間が経過すると、バックアップ保存ポリシーの設定に関係なく、バックアップは不要になる。   |
|-t   |--tag   |(Longtermタイプで必須)バックアップ・セットのユーザー指定のタグ名を指定し、このタグをコマンドで生成される出力ファイルに適用。   |
### dbcli recover-databaseパラメータ
| パラメータ | 意味 | 説明 |
|:-:|:-|:-|
|-br  |--backupReport   |(オプション)バックアップ・レポートのJSON入力   |
|-h   |--help   |(オプション)コマンドの使用に関するヘルプを表示   |
|-i   |--dbid   |(オプション)データベース・リソースID   |
|-in   |--dbName   |(オプション)データベース名   |
|-j   |--json   |(オプション) JSON出力を表示   |
|-l   |--tdwWalletLocation   |(オプション) TDEウォレット・バックアップの場所。TDEウォレットは、tar.gz形式でバックアップする必要があります。   |
|-r   |--recoveryTimeStamp   |(リカバリ・タイプがPITRの場合は必須) mm/dd/yyyy hh:mi:ssの形式のリカバリ・タイムスタンプ   |
|-s   |--scn   |(リカバリ・タイプがSCNの場合は必須) SCN   |
|-t   |--recoverytype   |(バックアップ・レポートを指定する場合は必須)リカバリ・タイプ。使用可能な値は、「Latest」、「PITR」および「SCN」   |
|-tp   |--tdeWalletPassword   |(オプション) TDEウォレット・パスワード   |

### RMANレポート
dbcli create-rmanbackupreportコマンドを使用して、RMANバックアップ・レポートを作成します。
オプション
- -w summaryまたはdetailed
- -rn レポート名
- -i データベースID

```
# dbcli create-rmanbackupreport -w summary -rn rmanrep0118 -i 74ecc025-c76f-499d-9bed-9708eb40afd3
{
  "jobId" : "abf1b7aa-016a-490f-9800-acd011fa453d",
  "status" : "Created",
  "message" : "Rman BackupReport creation.",
  "errorCode" : "",
  "reports" : [ ],
  "createTimestamp" : "January 18, 2024 13:31:10 PM UTC",
  "resourceList" : [ {
    "resourceId" : "04c92a7c-d09b-4ab8-aecd-f48ff248a99f",
    "resourceType" : "Report",
    "jobId" : "abf1b7aa-016a-490f-9800-acd011fa453d",
    "updatedTime" : "January 18, 2024 13:31:10 PM UTC"
  } ],
  "description" : "Create summary Backup Report ",
  "updatedTime" : "January 18, 2024 13:31:11 PM UTC",
  "percentageProgress" : "0%",
  "cause" : null,
  "action" : null
}
```

dbcli list-rmanbackupreports コマンドで結果の確認

```
# dbcli list-rmanbackupreports

ID                                       Name                 ReportType DbId                                     createTime                          updatedTime
---------------------------------------- -------------------- ---------- ---------------------------------------- ----------------------------------- -----------------------------------
04c92a7c-d09b-4ab8-aecd-f48ff248a99f     rmanrep0118          summary    74ecc025-c76f-499d-9bed-9708eb40afd3     January 18, 2024 at 1:31:10 PM UTC  January 18, 2024 at 1:31:35 PM UTC
```

dbcli describe-rmanbackupreportコマンドを使用して、ジョブの詳細を確認します。
オプション
- -i レポートID

```
# dbcli describe-rmanbackupreport -i 04c92a7c-d09b-4ab8-aecd-f48ff248a99f
Backup Report details
----------------------------------------------------------------
                     ID: 04c92a7c-d09b-4ab8-aecd-f48ff248a99f
            Report Type: summary
               Location: Node db01: /opt/oracle/dcs/log/db01/rman/bkup/ORCL_nrt/rman_list_backup_summary_2024-01-18_13-31-29-7832005136743565088.log
            Database ID: 74ecc025-c76f-499d-9bed-9708eb40afd3
            CreatedTime: January 18, 2024 at 1:31:10 PM UTC
```

Locationにあるファイルにレポートが出力されています。

### ログの確認
dbcliジョブの詳細情報が必要な場合は、/opt/oracle/dcs/logディレクトリのファイルを確認します。

RMANログは、/opt/oracle/dcs/log/<ホスト名>/rman/bkup/<db_unique_name>ディレクトリのファイルを確認します。



# おわりに

dbcliを使用してバックアップやリカバリができました。
dbcliでバックアップを取得するために、新しいバックアップ構成を作成しデータベースに関連付ると、自動バックアップで取得したバックアップにアクセスできなくなりますので留意が必要です。

# 参考情報

- [ドキュメント](https://docs.oracle.com/en-us/iaas/base-database/doc/oracle-database-cli-reference.html)
- [[Oracle Cloud] DBCS (VM) で、dbcliからDBのバックアップを取得する](https://qiita.com/NSO-KC/items/8fe2dd52d8731e0866e8)
- [OCI: How To Backup Database To Cloud Object Storage Using DBCLI (Doc ID 2576589.1)](https://support.oracle.com/knowledge/Oracle%20Cloud/2576589_1.html)
- [OCI: HOW TO CREATE RMAN BACKUP REPORT (Doc ID 2563116.1)](https://support.oracle.com/knowledge/Oracle%20Cloud/2563116_1.html)
- [[Oracle Cloud] ユーザ管理のObject Storageバケットへ取得したRMANバックアップをBase Databaseにリストアしてみた](https://qiita.com/kenwatan/items/e2aaa4dd2d27b82c766a)