OCI BaseDB の RMANバックアップ を Oracle Database Cloud Backup Module で ユーザー管理の Object Storage に取得する。(Oracle Cloud Infrastructure)

表題通り OCI Base Database Service(BaseDB) のバックアップを Cloud Backup Module で ユーザー管理の Object Storage に取得してみますやで。
彡(ﾟ)(ﾟ)

# 1. 参考マニュアル

下記のマニュアルを参照して Backup Module をセットアップします。

> RMANを使用したオブジェクト・ストレージへのデータベースのバックアップ
> https://docs.public.oneportal.content.oci.oraclecloud.com/ja-jp/iaas/dbcs/doc/back-database-object-storage-using-rman.html

# 2. 実行環境

以下の環境で実行しています。これらは作成済みの前提とします。

> ・Oracle Base Database Service 19.19 ※Private Subnetに作成
> ・Object Storage のバケット
> ・必要な権限を付与された OCI IAMユーザー

VCN/Subnet/各種GWのネットワーク構成は下記記事を参照してください。

https://qiita.com/ora_gonsuke777/items/8651c4075ec6bf436c4f

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

(左上)ハンバーガーメニュー → Identity & Security → Users → 該当のIAMユーザー → Auth Tokens → Generate Token で認証トークンを発行します。一度しか表示されないので忘れないようにコピペして下さい。
![OCI_BKM001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/27e474fc-b144-e8c1-bdb4-239cac572431.png)

# 4. Backup Module のインストール

下記コマンドで Backup Module をインストール＆セットアップします。ネームスペース名は画面右上の人型アイコン→Tenancyから確認可能です。

```shell
cd /opt/oracle/oak/pkgrepos/oss/odbcs
java -jar opc_install.jar -opcId '<IAMユーザーのID>' -opcPass '<上記3.で発行した認証トークン>' -container <Object Storageのバケット名> -walletDir ~/hsbtwallet/ -libDir ~/lib/ -configfile ~/config -host https://swiftobjectstorage.<リージョン名>.oraclecloud.com/v1/<Object Storageのネームスペース名>
```

下記はインストール実行結果のサンプルとなります。一部をマスクしています。

```shell
sudo su - oracle
mkdir lib
cd /opt/oracle/oak/pkgrepos/oss/odbcs
java -jar opc_install.jar -opcId 'oracleidentitycloudservice/xxxxxxxx.xxxxxxxx@xxxxxx.xxxxxx' -opcPass 'xxxxxxxxxxxxxxx' -container ays-osk-objstr02 -walletDir ~/hsbtwallet/ -libDir ~/lib/ -configfile ~/config -host https://swiftobjectstorage.ap-osaka-1.oraclecloud.com/v1/xxxxxxxx

Oracle Database Cloud Backup Module Install Tool, build 12.2.0.1.0DBBKPCSBP_2018-06-12
Oracle Database Cloud Backup Module credentials are valid.
Backups would be sent to container ays-osk-objstr01.
Oracle Database Cloud Backup Module wallet created in directory /home/oracle/hsbtwallet.
Oracle Database Cloud Backup Module initialization file /home/oracle/config created.
Downloading Oracle Database Cloud Backup Module Software Library from file opc_linux64.zip.
Download complete.
```

# 5. RMAN構成(CONFIGURE)

インストールされた Backup Module を使用するようにRMAN構成を変更します。rman起動前のNLS_DATE_FORMATの設定は必須ではないですが推奨します。

```sql
export NLS_DATA_FORMAT='YYYY/MM/DD HH24:MI:SS';
rman nocatalog
CONNECT TARGET
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F';
CONFIGURE ENCRYPTION FOR DATABASE ON;
```

下記は実行サンプルです。

```sql
[oracle@aysoskdb19c ~]$ export NLS_DATA_FORMAT='YYYY/MM/DD HH24:MI:SS';
[oracle@aysoskdb19c ~]$ rman nocatalog

Recovery Manager: Release 19.0.0.0.0 - Production on Mon Jul 31 03:24:04 2023
Version 19.19.0.0.0

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

RMAN> CONNECT TARGET

connected to target database: AYSDB19C (DBID=3066954643)
using target database control file instead of recovery catalog

RMAN> CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';

new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
new RMAN configuration parameters are successfully stored

RMAN> CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE;

new RMAN configuration parameters:
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
new RMAN configuration parameters are successfully stored

RMAN> CONFIGURE BACKUP OPTIMIZATION ON;

new RMAN configuration parameters:
CONFIGURE BACKUP OPTIMIZATION ON;
new RMAN configuration parameters are successfully stored

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F';

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO '%F';
new RMAN configuration parameters are successfully stored

RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;

new RMAN configuration parameters:
CONFIGURE ENCRYPTION FOR DATABASE ON;
new RMAN configuration parameters are successfully stored
```

# 6. RMANバックアップ実行

Object Storage にバックアップを取得してみます。下記はRMANコマンドのサンプルで、チャンネルを明示的に ALLOCATE しています。

```sql
RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
    ALLOCATE CHANNEL c2 DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
    ALLOCATE CHANNEL c3 DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
    ALLOCATE CHANNEL c4 DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
    BACKUP SECTION SIZE 512M INCREMENTAL LEVEL 0 AS COMPRESSED BACKUPSET DATABASE SPFILE PLUS ARCHIVELOG;
}
```

下記は実行結果の一部サンプルです。

```sql
RMAN> RUN {
2>     ALLOCATE CHANNEL c1 DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
3>     ALLOCATE CHANNEL c2 DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
4>     ALLOCATE CHANNEL c3 DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
5>     ALLOCATE CHANNEL c4 DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
6>     BACKUP SECTION SIZE 512M INCREMENTAL LEVEL 0 AS COMPRESSED BACKUPSET DATABASE SPFILE PLUS ARCHIVELOG;
7> }
allocated channel: c1
channel c1: SID=196 device type=SBT_TAPE
channel c1: Oracle Database Backup Service Library VER=19.0.0.1
：
：
：
Starting backup at 2023/07/31 05:26:04
current log archived
skipping archived logs of thread 1 from sequence 9 to 71; already backed up
channel c1: starting compressed archived log backup set
channel c1: specifying archived log(s) in backup set
input archived log thread=1 sequence=72 RECID=138 STAMP=1143609965
channel c1: starting piece 1 at 2023/07/31 05:26:05
channel c1: finished piece 1 at 2023/07/31 05:26:12
piece handle=3i22k6jd_114_1_1 tag=TAG20230731T052605 comment=API Version 2.0,MMS Version 19.0.0.1
channel c1: backup set complete, elapsed time: 00:00:07
Finished backup at 2023/07/31 05:26:12

Starting backup at 2023/07/31 05:26:12
skipping datafile 5; already backed up 2 time(s)
skipping datafile 6; already backed up 2 time(s)
skipping datafile 7; already backed up 2 time(s)
channel c1: starting compressed incremental level 0 datafile backup set
channel c1: specifying datafile(s) in backup set
input datafile file number=00012 name=+DATA/AYSDB19C_NCM_KIX/FE74D2FE740B6301E0537201000ABD9A/DATAFILE/users.274.1139890861
：
：
：
piece handle=5u22k6sa_190_1_1 tag=TAG20230731T052612 comment=API Version 2.0,MMS Version 19.0.0.1
channel c3: backup set complete, elapsed time: 00:00:12
Finished backup at 2023/07/31 05:31:02

Starting backup at 2023/07/31 05:31:02
current log archived
channel c1: starting compressed archived log backup set
channel c1: specifying archived log(s) in backup set
input archived log thread=1 sequence=73 RECID=140 STAMP=1143610262
channel c1: starting piece 1 at 2023/07/31 05:31:02
channel c1: finished piece 1 at 2023/07/31 05:31:03
piece handle=6322k6sm_195_1_1 tag=TAG20230731T053102 comment=API Version 2.0,MMS Version 19.0.0.1
channel c1: backup set complete, elapsed time: 00:00:01
Finished backup at 2023/07/31 05:31:03

Starting Control File and SPFILE Autobackup at 2023/07/31 05:31:03
piece handle=c-3066954643-20230731-07 comment=API Version 2.0,MMS Version 19.0.0.1
Finished Control File and SPFILE Autobackup at 2023/07/31 05:31:04
released channel: c1
released channel: c2
released channel: c3
released channel: c4

RMAN> 
```

LIST BACKUP で RMANバックアップ の取得状況を確認してみます。Object Storage にRMANバックアップを取得できている様子が確認できます。

```sql
RMAN> LIST BACKUP;


List of Backup Sets
===================


BS Key  Size       Device Type Elapsed Time Completion Time    
------- ---------- ----------- ------------ -------------------
49      4.50M      SBT_TAPE    00:00:03     2023/07/31 04:02:12
        BP Key: 57   Status: AVAILABLE  Compressed: YES  Tag: TAG20230731T040209
        Handle: 2b22k1m1_75_1_1   Media: swiftobjectstorage.ap-..oud.com/v1/nrp9esenpcgb/ays-osk-objstr01

  List of Archived Logs in backup set 49
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    17      3666806    2023/07/31 04:00:21 3667208    2023/07/31 04:00:54
  1    18      3667208    2023/07/31 04:00:54 3667537    2023/07/31 04:02:09
：
  Backup Set Copy #1 of backup set 57
  Device Type Elapsed Time Completion Time     Compressed Tag
  ----------- ------------ ------------------- ---------- ---
  SBT_TAPE    00:00:25     2023/07/31 04:02:54 YES        TAG20230731T040238

    List of Backup Pieces for backup set 57 Copy #1
    BP Key  Pc# Status      Media                   Piece Name
    ------- --- ----------- ----------------------- ----------
    65      1   AVAILABLE   swiftobjectstorage.ap-..oud.com/v1/nrp9esenpcgb/ays-osk-objstr01 2e22k1mu_78_1_1
    69      2   AVAILABLE   swiftobjectstorage.ap-..oud.com/v1/nrp9esenpcgb/ays-osk-objstr01 2e22k1mu_78_2_1
    66      3   AVAILABLE   swiftobjectstorage.ap-..oud.com/v1/nrp9esenpcgb/ays-osk-objstr01 2e22k1mu_78_3_1
：
```

OCIコンソールで Object Storage に格納された RMANバックアップの取得状況を確認してみます。
![OCI_BKM002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/62710ebc-5d27-0ad0-00b5-84967562c61a.png)

コンソール上でもRMANバックアップを取得できていることが確認できました。
彡(^)(^)

# 7. まとめ
Backup Module でユーザー管理の Object Storage に RMANバックアップを取得できました。

より高機能な ZRCV(Zero Data Loss Autonomous Recovery Service) もリリースされているんですが、
Backup Module でしか対応していない要件もあるので、適宜使い分けて下さいね。
彡(^)(^)

> Zero Data Loss Autonomous Recovery Service
> https://www.oracle.com/jp/database/zero-data-loss-autonomous-recovery-service/