OCI DBCS の Standalone Backup を Backup Module で別テナントに取得してみる。(Oracle Cloud Infrastructure)

※2024/7/2追記：本記事で取り扱った create_backup_from_onprem は現時点で使用不可であることが判明しました。他の方法での対応をご検討下さい。

表題の通り、OCI DBCS の Standalone Backup を Backup Module を使って別テナントに取得してみますやで。
彡(ﾟ)(ﾟ)

# 1. 参考ドキュメント

基本は下記マニュアルの手順で可能です。ただしマニュアルは記述内容の順番がおかしかったりするので、本エントリで読み替えつつ記述します。
彡(ﾟ)(ﾟ)

> クラウドでのバックアップ作成によるオンプレミス・データベースのOracle Cloud Infrastructureへの移行
> https://docs.cloud.oracle.com/ja-jp/iaas/Content/Database/Tasks/mig-onprembackup.htm

# 2. DBCS で python3 をインストール

DBCS で python3 を yum でインストールします。特別な事は無いので詳細は割愛。

```
sudo yum install python3
```

# 3. /home/oracle配下にmigrateディレクトリを作成

パスやディレクトリ名は oracleユーザー がアクセスできれば何でもエエんですが、後が楽なのでマニュアル通りに /home/oracle/migrate を作成します。

```shell
sudo su -
cd /home/oracle
mkdir migrate
```

# 4. rootユーザーで OCI CLI をインストール

rootユーザー で OCI CLI をインストールします。

> Quickstart
> https://docs.cloud.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm#Quickstart

対話式で入力を求められるので、下記のように入力(全てマニュアル通り)

```shell

sudo su -
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
:
★1
===> In what directory would you like to place the install? (leave blank to use '/root/lib/oracle-cli'): 
/home/oracle/migrate/lib/oracle-cli

★2
===> In what directory would you like to place the 'oci' executable? (leave blank to use '/root/bin'): 
/home/oracle/migrate/bin

★3
===> In what directory would you like to place the OCI scripts? 
(leave blank to use '/root/bin/oci-cli-scripts'): 
/home/oracle/migrate/bin/oci-cli-scripts

★4
===> Currently supported optional packages are: ['db (will install cx_Oracle)'] 
What optional CLI packages would you like to be installed (comma separated names;
press enter if you don''t need any optional packages)?: db

★5
===> Modify profile to update your $PATH and enable shell/tab completion now? (Y/n): Y

★6
===> Enter a path to an rc file to update (leave blank to use '/root/.bashrc'): 
/home/oracle/.bashrc
```

|No.|入力値|
|---|---|
|★1|/home/oracle/migrate/lib/oracle-cli|
|★2|/home/oracle/migrate/bin|
|★3|/home/oracle/migrate/bin/oci-cli-scripts|
|★4|db|
|★5|Y|
|★6|/home/oracle/.bashrc|

# 5. OCI CLI の owner:group を oracle:oinstall に変更

インストールした OCI CLI の owner:group を oracle:oinstall に変更します。

```shell
sudo su -
chown -R oracle:oinstall /home/oracle/migrate
```

# 6. 別テナントの OCID等 をメモ

OCI CLI 及び Backup Module を動作させるための OCID等 をメモします。以下をメモしておきます。

> * テナントのOCID(tenancy OCID)
> * IAMユーザーのOCID(IAM User OCID)
> * region名
> * コンパートメントのOCID(Compartment OCID)
> * Availability Domain名 ※ここで言う Availability Domain名 は 下記の tenancy-specific prefixes が付与されたものです。「Governance => Limits, Quota and Usage」等で参照可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/a19425a3-1a61-978b-d543-7f02cfd6f151.png)

# 7. oracleユーザーで OCI CLI の config.txt を設定

DBCS の oracleユーザー で oci setup config を実行して OCI CLI の config.txt を設定します。ペチペチと入力……

```shell
sudo su - oracle
oci setup config
:
★1
Enter a location for your config [/home/oracle/.oci/config]: /home/oracle/migrate/config.txt

★2
Enter a user OCID: ocid1.user.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

★3
Enter a tenancy OCID: ocid1.tenancy.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

★4
Enter a region (e.g. ap-chuncheon-1, ap-hyderabad-1, ap-melbourne-1, ap-mumbai-1, ap-osaka-1, ap-seoul-1, ap-sydney-1, ap-tokyo-1, ca-montreal-1, ca-toronto-1, eu-amsterdam-1, eu-frankfurt-1, eu-zurich-1, me-jeddah-1, sa-saopaulo-1, uk-gov-london-1, uk-london-1, us-ashburn-1, us-gov-ashburn-1, us-gov-chicago-1, us-gov-phoenix-1, us-langley-1, us-luke-1, us-phoenix-1, us-sanjose-1): us-ashburn-1

★5
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y

★6
Enter a directory for your keys to be created [/home/oracle/.oci]: /home/oracle/migrate

★7
Enter a name for your key [oci_api_key]:
Public key written to: /home/oracle/migrate/oci_api_key_public.pem

★8
Enter a passphrase for your private key (empty for no passphrase):
Private key written to: /home/oracle/migrate/oci_api_key.pem
Fingerprint: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Config written to /home/oracle/migrate/config.txt
```

|No.|入力値|
|---|---|
|★1|/home/oracle/migrate/config.txt(マニュアル通り)|
|★2|別テナントの IAM User の OCID を入力|
|★3|別テナントの Tenancy OCID を入力|
|★4|今回は us-ashburn-1 を入力|
|★5|Y(SSH key pairを生成)|
|★6|/home/oracle/migrate(マニュアル通り)|
|★7|デフォルト(oci_api_key)|
|★8|何も入力せずEnter(passphrase無し)|

# 8. 別テナントの IAM User の API key Fingerprintを生成(Public keyを貼り付け)
別テナントの IAM User で、API key に 上記 7. で生成した SSH key pair の Public key を貼り付けて、API Key Fingerprint を生成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/9dba9784-efe4-d552-452c-60866fa7fe92.png)

API Key Fingerprint が生成されたら OCI CLI の動作確認をしてみまっす。--config-fileパラメータを忘れずに……。

```shell
sudo su - oracle
oci iam availability-domain list --config-file /home/oracle/migrate/config.txt --compartment-id ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxx --all
{
  "data": [
    {
      "compartment-id": "ocid1.compartment.oc1..xxxxxxx",
      "id": "ocid1.availabilitydomain.oc1..xxxxxx",
      "name": "IdmO:US-ASHBURN-AD-1"
    },
    {
      "compartment-id": "ocid1.compartment.oc1..xxxxxxx",
      "id": "ocid1.availabilitydomain.oc1..xxxxxx",
      "name": "IdmO:US-ASHBURN-AD-2"
    },
    {
      "compartment-id": "ocid1.compartment.oc1..xxxxxxx",
      "id": "ocid1.availabilitydomain.oc1..xxxxxx",
      "name": "IdmO:US-ASHBURN-AD-3"
    }
  ]
}
```

# 9. DBCS に Backup Module(opc_install.jar) をコピー

Bakcup Module をダウンロードして zip展開して取り出した opc_install.jar を DBCS の /home/oracle/migrate配下にコピーします。Backup Module は下記からダウンロード可能

> Oracle Database Cloud Backup Module
> https://www.oracle.com/database/technologies/oracle-cloud-backup-downloads.html

```shell
ls -la /home/oracle/migrate/opc_install.jar
-rw-rw-r-- 1 oracle oinstall 944514 Jun 12  2018 /home/oracle/migrate/opc_install.jar
```

# 10. DBCS の oracleユーザー でバックアップスクリプト(create_backup_from_onprem)を実行

DBCS の oracleユーザーで create_backup_from_onprem を実行します。DBCS は TDE(暗号化) されているので、マニュアルの「TDE対応データベースの場合のコマンド」を実行します。DBCS の oracleユーザー は ORACLE_HOME, ORACLE_SID, PATH は設定されているので、そこは省略

```shell
sudo su - oracle
export AD=IdmO:US-ASHBURN-AD-3 ★1
export C=ocid1.compartment.oc1..xxxxxxxxxxxx ★2
rm -rf /home/oracle/migrate/onprem_upload
cd /home/oracle/migrate/bin/oci-cli-scripts/
./create_backup_from_onprem --config-file /home/oracle/migrate/config.txt ★3 --display-name XXXDB19CBACKUPMODULE1_TENANT2 ★4 --availability-domain $AD --edition ENTERPRISE_EDITION_HIGH_PERFORMANCE ★5 --opc-installer-dir /home/oracle/migrate ★6 --tmp-dir /home/oracle/migrate/onprem_upload ★7 --compartment-id $C
```

|No.|設定値|
|---|---|
|★1|Availability Domain名(tenancy-specific prefixes付きのもの)|
|★2|コンパートメントの OCID|
|★3|上記7. で設定した OCI CLI の config.txt|
|★4|任意の文字列(Standalone Backup名)|
|★5|今回は ENTERPRISE_EDITION_HIGH_PERFORMANCE を設定|
|★6|/home/oracle/migrate(マニュアル通り)|
|★7|/home/oracle/migrate/onprem_upload(マニュアル通り)|

上手く行けば下記のようにバックアップが取得されます。

```sql
Connecting to Oracle database
Oracle version is:19.0.0.0.0
Checking the archive log mode of the database
Checking if the database is open
Getting database name and database unique name
Database Id:1234567890 Name:XXXDB19 UniqueName:XXXDB19_nrt16w
Fetching character set
Character Set:AL32UTF8
Fetching national character set
National Character Set:AL16UTF16
Fetching rac mode
Rac mode:FALSE
Creating external backup job resource...
Created external backup job resource with id: ocid1.dbbackup.oc1.iad.xxxxxxxxxxxxx
Creating external backup job resource...
Creating external backup job resource...
Creating external backup job resource...
Waiting for completion of external backup job...
Compressing the wallet
Uploading wallet
Uploading parameter logs
Setting up opc installer
Executing command: java -jar /home/oracle/migrate/opc_install.jar -host https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/dbbackupiad -opcId 'XXXXXXXXXXXXXXXXXXXX' -opcPass <redacted_password> -walletDir /home/oracle/migrate/onprem_upload -libDir /home/oracle/migrate/onprem_upload -configFile /home/oracle/migrate/onprem_upload/opcXXXDB19.ora -container XXXXXXXXXXXXXXXXX
Executing RMAN. It will take a few minutes to complete..
Completing the external backup job..
Response:200
External Backup created.
```

# 11. 別テナントの OCI Console から Standalone Backup を確認

別テナントの OCI Console から Standalone Backup を確認します。ハンバーガーメニュー(画面左上) ⇒ Bare Metal, VM, and Exadata ⇒ Standalone Backups から確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/f8f9acde-5556-feb3-2a28-662a609f7424.png)

Standalone Backup がばっちり取得されてるで！彡(^)(^) 

# 12. まとめ

本当はリストア(Standalone Backup からの DBCS作成) までやりたかったんやけど、力尽きてしまった……。完全にマニュアル通りだとちょこちょこハマったので、本記事を参考にしてね。
彡(^)(^)

# 追記(2020/9/24)

バックアップスクリプトの実行時に Availability Domain を指定しますが、Standalone Backup からのリストア(DBCS作成)はここで指定した AD にしか実行できません。ここはご注意を。
彡(ﾟ)(ﾟ)