Windowsサーバ上のOracle DatabaseをBackup Moduleを使ってOCI Object Storageにバックアップ、新しいデータベースを新規する方法


# 初めに

この前の記事でOracle Database Cloud Backup Moduleを利用してOracle DatabaseをOCI Object Storageにバックアップして、そのバックアップから新しいデータベースを構築する方法を紹介しました。

その記事にてデータベースのOSはLinuxでした。Windowsサーバの場合、Oracle Database Cloud Backup Moduleのインストールとコンフィグする方法はいくつか違うところがあります。今回はWindowsサーバ上で同じ流れをやってみて、注意点をまとめて紹介します。

## Windowsサーバの場合の注意点

Windowsサーバの場合、Oracle Database Cloud Backup Moduleのインストールと配置するのはLinuxサーバといくつか違うところがあります。これらの注意点をきちんと対応すれば、Backup Moduleの利用するのは問題ないはずです。

最初は注意点を纏めます。詳細は下に参照してください。

- [Javaのインストール](#java%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [Visual Studio 2013の再配布可能なパッケージのインストール](#visual-studio-2013%E3%81%AE%E5%86%8D%E9%85%8D%E5%B8%83%E5%8F%AF%E8%83%BD%E3%81%AA%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [認証ファイルの準備](#認証ファイルの準備)
- [必要なOCI情報の収集](#%E5%BF%85%E8%A6%81%E3%81%AAoci%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%8E%E9%9B%86)
- [cwallet ssoの権限を変更](#cwalletsso%E3%81%AE%E6%A8%A9%E9%99%90%E3%82%92%E5%A4%89%E6%9B%B4)

【参照】前の記事（Linuxサーバの場合）

- [Oracle Database Cloud Backup ModuleでデータベースをOCI Object Storageにバックアップする方法](https://qiita.com/RexZheng/items/b64b5494899da0980970)
- [OCI Object Storageに保存されたバックアップから新しいデータベース・サーバを作成してみよう](https://qiita.com/RexZheng/items/540366fec121e58c3c61)
- [RMAN 増分バックアップで新しいデータベース・サーバーを作成する方法](https://qiita.com/RexZheng/items/cc09b9d4d009c2fc28a5)

# 事前準備

## Javaのインストール

Oracle Database Cloud Backup ModuleのインストールはJava 1.7以上が必要ですから、まずJavaをインストールします。

Java 1.8は[このURL](https://www.oracle.com/java/technologies/downloads/#java8)からダウンロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/f5ee4f3d-b935-e434-5c6b-f6ea676a275e.png)

正常でインストールして、バージョンを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/fb38664c-bf23-ceb4-d44d-aecef40cd0f0.png)


## Visual Studio 2013の再配布可能なパッケージのインストール

Visual Studio 2013の再配布可能なパッケージをインストールしなければ、Backup Moduleを使ってバックアップを実行する時に下記のようなエラーが出てくる可能性がありますので、事前にインストールします。

```sql
RMAN> backup database;

Starting backup at 06-DEC-21
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 12/06/2021 01:57:07
ORA-19554: error allocating device, device type: SBT_TAPE, device name:
ORA-27211: Failed to load Media Management Library

RMAN>
```

[このURL](https://www.microsoft.com/en-us/download/details.aspx?id=40784)からVisual Studio 2013の再配布可能なパッケージをダウンロードして、インストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/e28e1443-13ef-fd6c-225b-08776a6767fe.png)

## 認証ファイルの準備

OCI環境と正しく接続するためにOracle Database Cloud Backup Moduleをインストールする時にいくつかOCI環境の情報が必要し、OCI環境における該当ユーザーにpublic keyの登録も必要です。そのため、キーペアの作成が必要になります。

Windows環境の場合、OCI-CLIをインストールする時に作成されたキーペアは問題が会ったので、OCI API Keysを追加する時に画面上で生成されたキーペアを使ってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/8a73a834-3678-b0be-1457-0eda628f4f6f.png)


画面上で生成された秘密鍵をWindowsのフォルダに保存します（公開鍵を保存する必要がないです）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/dbfd2901-f6c6-694d-a441-711caf0b9981.png)

### OCI-CLIのインストール

Backup Moduleの利用に対して、OCI-CLIのインストールは必須ではないです。
コマンドラインでOCIをアクセス（例：Object Storageの内容を確認）したい場合、[OCI-CLI クイックスタート](https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm) の「Windows」のセクションの内容を参照した上で、簡単でインストールできます。

```powershell
PS C:\Users\opc> Set-ExecutionPolicy RemoteSigned

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
PS C:\Users\opc> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
PS C:\Users\opc> Invoke-WebRequest https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1 -OutFile install.ps1
PS C:\Users\opc> iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1'))

        ******************************************************************************
        You have started the OCI CLI Installer in interactive mode. If you do not wish
        to run this in interactive mode, please include the -AcceptAllDefaults option.
        If you have the script locally and would like to know more about
        input options for this script, then you can run:
        help .\install.ps1
        If you would like to know more about input options for this script, refer to:
        https://github.com/oracle/oci-cli/blob/master/scripts/install/README.rst
        ******************************************************************************
VERBOSE: No valid Python installation found.

Python is required to run the CLI.
Install Python now? (Entering "n" will exit the installation script)
[Y] Yes  [N] No  [?] Help (default is "Y"): Y
VERBOSE: Downloading Python...
VERBOSE: Download Complete! Installer executable written to: C:\Users\opc\AppData\Local\Temp\tmp22F3.tmp.exe
VERBOSE: Installing Python to C:\Users\opc\Python...
VERBOSE: Successfully installed Python!
VERBOSE: Downloading install script to C:\Users\opc\AppData\Local\Temp\tmpF150.tmp
VERBOSE: C:\Users\opc\Python False    False
VERBOSE: Using Python executable: C:\Users\opc\Python\python.exe to run install script...
VERBOSE: Arguments to python script: "C:\Users\opc\AppData\Local\Temp\tmpF150.tmp"
-- Verifying Python version.
-- Python version 3.8.5 okay.

===> In what directory would you like to place the install? (leave blank to use 'C:\Users\opc\lib\oracle-cli'):
-- Creating directory 'C:\Users\opc\lib\oracle-cli'.
-- We will install at 'C:\Users\opc\lib\oracle-cli'.

===> In what directory would you like to place the 'oci.exe' executable? (leave blank to use 'C:\Users\opc\bin'):
-- Creating directory 'C:\Users\opc\bin'.
-- The executable will be in 'C:\Users\opc\bin'.

===> In what directory would you like to place the OCI scripts? (leave blank to use 'C:\Users\opc\bin\oci-cli-scripts'):
-- Creating directory 'C:\Users\opc\bin\oci-cli-scripts'.
-- The scripts will be in 'C:\Users\opc\bin\oci-cli-scripts'.

===> 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)?:
-- The optional packages installed will be ''.
-- Trying to use python3 venv.
-- Executing: ['C:\\Users\\opc\\Python\\python.exe', '-m', 'venv', 'C:\\Users\\opc\\lib\\oracle-cli']
-- Executing: ['C:\\Users\\opc\\lib\\oracle-cli\\Scripts\\python.exe', '-m', 'pip', 'install', '--upgrade', 'pip']
Collecting pip
  Downloading pip-21.3.1-py3-none-any.whl (1.7 MB)

  略
  
Collecting pycparser
  Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
     |████████████████████████████████| 118 kB 6.4 MB/s
Building wheels for collected packages: terminaltables, circuitbreaker
  Building wheel for terminaltables (setup.py) ... done
  Created wheel for terminaltables: filename=terminaltables-3.1.0-py3-none-any.whl size=15354 sha256=f1af8c793ed550efffe8b909dade4faf79169ad2f8960c1477a6c2f8b76e3fd8
  Stored in directory: c:\users\opc\appdata\local\temp\tmpfrll6q9m\wheels\08\8f\5f\253d0105a55bd84ee61ef0d37dbf70421e61e0cd70cef7c5e1
  Building wheel for circuitbreaker (setup.py) ... done
  Created wheel for circuitbreaker: filename=circuitbreaker-1.3.2-py3-none-any.whl size=6017 sha256=e1139345780645c28124f24f85028cf6e52eaf7ea2987c9badc591d9a982ddda
  Stored in directory: c:\users\opc\appdata\local\temp\tmpfrll6q9m\wheels\97\d2\3d\8ad7bff00d846a770cdc0ed208f0fae657c983e675d658c1d5
Successfully built terminaltables circuitbreaker
Installing collected packages: pycparser, cffi, six, cryptography, pytz, python-dateutil, pyOpenSSL, circuitbreaker, certifi, terminaltables, PyYAML, oci, jmespath, click, arrow, oci-cli
Successfully installed PyYAML-5.4.1 arrow-1.2.1 certifi-2021.10.8 cffi-1.15.0 circuitbreaker-1.3.2 click-7.1.2 cryptography-3.4.7 jmespath-0.10.0 oci-2.52.0 oci-cli-3.3.2 pyOpenSSL-19.1.0 pycparser-2.21 python-dateutil-2.8.2 pytz-2021.3 six-1.16.0 terminaltables-3.1.0

===> Modify PATH to include the CLI and enable tab completion in PowerShell now? (Y/n): Y
--
-- ** Close and re-open PowerShell to reload changes to your PATH **
-- In order to run the autocomplete script, you may also need to set your PowerShell execution policy to allow for running local scripts (as an Administrator run Set-ExecutionPolicy RemoteSigned in a PowerShell prompt)
--
-- Installation successful.
-- Run the CLI with C:\Users\opc\bin\oci.exe --help
VERBOSE: Successfully installed OCI CLI!
PS C:\Users\opc> oci -v
3.3.2
PS C:\Users\opc>
```

コマンド`oci setup config`を実行して、OCI-CLIを配置します。配置する時にいくつかOCI情報が必要です。次の[必要なOCI情報の収集](#%E5%BF%85%E8%A6%81%E3%81%AAoci%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%8E%E9%9B%86)を参照してください。

要注意なのはキーペアは画面から生成されたから、下記のメッセージを回答する時に`n`を入れて、秘密鍵をパスを指定してください。

```bash
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]: n
```

OCI-CLIを配置して、`oci os object list --bucket-name <BUCKET NAME>` のようなコマンドで正常にアクセスできるかを確認できます。

[OCI-CLIのコマンドリファレンス](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.3.3/oci_cli_docs/)には詳細を参照できます。

実行結果例：

```powershell

PS C:\Users\opc> oci os object list --bucket-name rex_db_backup
{
  "data": [
    {
      "archival-state": null,
      "etag": "e9acba72-612b-4c73-9220-26c7221dfcfc",
      "md5": "HZTx/fNFoYkQvIwWF67rYg==-10",
      "name": "backupset.zip",
      "size": 653904286,
      "storage-tier": "Standard",
      "time-created": "2021-01-12T04:00:09.369000+00:00",
      "time-modified": "2021-01-12T04:00:09.369000+00:00"
    },
    {
      "archival-state": null,
      "etag": "4c06e629-5219-43fc-9413-5be88ae3c254",
      "md5": "z/EADj0pJzeFkp6JaAo6yA==",
      "name": "heartbeat/cleaner.xml",
      "size": 620,
      "storage-tier": "Standard",
      "time-created": "2021-01-11T13:35:43.036000+00:00",
      "time-modified": "2021-01-11T13:35:43.057000+00:00"
    },
    {
      "archival-state": null,
      "etag": "796c9d22-e970-426e-a881-2fdd2f5c0f36",
      "md5": "Je6mhDadwPbeNLEoNhw6EQ==-10",
      "name": "node1-backupset.zip",
      "size": 633224909,
      "storage-tier": "Standard",
      "time-created": "2021-01-12T01:09:43.484000+00:00",
      "time-modified": "2021-01-12T01:09:43.484000+00:00"
    },
    {
      "archival-state": null,
      "etag": "36f0be50-d168-437b-b0ec-8a9c7390c87d",
      "md5": "DMF1ucDxtqgxw5niaXcmYQ==",
      "name": "test1.txt",
      "size": 1,
      "storage-tier": "Standard",
      "time-created": "2021-01-05T06:29:38.870000+00:00",
      "time-modified": "2021-01-05T06:29:38.882000+00:00"
    }
  ],
  "prefixes": []
}
```

## 必要なOCI情報の収集

Oracle Database Cloud Backup Moduleをインストールする時下記のOCI環境/ユーザの情報が必要ですので、事前に取得します。

必要なのは下記の４つです。
- ユーザのOCID
- テナンシーのOCID
- コンパトメントのOCID
- 登録したAPI KeyのFingerprint

取得する方法は下記のイメージを参照してください。

▼ OCIユーザーのプロファイルにアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/48e5a845-1698-9ec6-f7e9-1b410372c5e7.png)

▼ OCIユーザーのOCIDを取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/6bdeffcf-f7d6-4553-23e7-b6c71ab4ad3e.png)

▼ OCIテナンシーのOCIDを取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/1e1ddfb7-7207-d770-e2b7-6b769bedfaac.png)

▼ コンパトメントのOCIDを取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/cd088d7c-2439-d5ff-6ec9-929eca4f7119.png)

▼ 登録したAPI KeyのFingerprintを取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/173eb6d6-59df-7a33-7f9a-35884de07a36.png)


# Backup Module

## ダウンロード

[このURL](https://www.oracle.com/database/technologies/oracle-cloud-backup-downloads.html)からOracle Database Cloud Backup Moduleをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/a1a01d08-51c5-b25b-edda-cd2d9143304d.png)

ダウンロードしたファイルを解凍して、２つフォルダがあります。OCI Object Storageと接続するので、`oci_installer`の中の`oci_install.jar`を使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/72806c0d-c121-0d0a-7dde-b69259f43131.png)


## インストール

Oracle Database Cloud Backup Moduleをインストールする時に下記のパラメータを指定する必要があります。これらの情報は事前準備のところに用意したので、下記のようにコマンドを実行すればBackup Moduleをインストールできます。

ここは見やすように、パラメータは複数行に表示しておりますが、実行する時は一行にしたほうがいいです。

```bash
java -jar C:\opc_installer\oci_installer\oci_install.jar 
    -host https://objectstorage.ap-tokyo-1.oraclecloud.com 
    -pvtKeyFile C:\oci_keys\private.pem 
    -pubFingerPrint f8:71:XXXXXXXXXXXXb1:b3:a0
    -uOCID ocid1.user.oc1..XXXXXXXXXXXXtacg766wl4exa 
    -tOCID ocid1.tenancy.oc1..XXXXXXXXXXXX24l7dzf3kba 
    -cOCID ocid1.compartment.oc1..XXXXXXXXXXXXxzqw36gj4kh3w3kkj4q 
    -walletDir  C:\app\oracle\product\19.3.0\dbhome_1\database\oci_wallet 
    -configFile C:\app\oracle\product\19.3.0\dbhome_1\database\opcORCL.ora
    -bucket db_backup_win 
    -libDir C:\app\oracle\product\19.3.0\dbhome_1\bin
```

| パラメータ      | 説明                                                                                                               |
| --------------- | ------------------------------------------------------------------------------------------------------------------ |
| -host           | OCIアカウントのエンドポイント、ホーム・リージョンと異なる可能性があるので、注意してください                        |
| -pvtKeyFile     | OCIへ接続用の秘密鍵、[認証ファイルの準備](#認証ファイルの準備)のところに用意したのも                               |
| -pubFingerPrint | API Keyを追加する時に生成されたフィンガープリント                                                                  |
| -uOCID          | OCIユーザーのOCID                                                                                                  |
| -tOCID          | OCIテナンシーのOCID                                                                                                |
| -cOCID          | 目標コンパトメントのOCID                                                                                           |
| -walletDir      | OCI Object Storage資格証明が格納されるディレクトリ                                                                 |
| -libDir         | OCIでバックアップおよびリストアに使用されるテープ(SBT)ライブラリへのシステム・バックアップが格納されるディレクトリ |
| -bucket         | バックアップが格納されるバケットの名前。 このバケットが存在しない場合は、インストーラによって作成されます          | 
| -configFile     | Backup Module for OCI構成ファイルが格納されているディレクトリ                                                            |

詳細は[Oracle Database Cloud Backup Module for OCIを実行するためのパラメータ](https://docs.oracle.com/cd/E83857_01/paas/db-backup-cloud/csdbb/installing-oracle-database-cloud-backup-module-oci.html#GUID-3A209515-DF1B-48DD-9A94-1358FEE9A3DC)を参照してください。

正常にインストールしたら、下記のようなメッセージを表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/e8fccc97-70d0-feab-6f4a-abace4c91ca8.png)

## cwallet.ssoの権限を変更

Backup Moduleのインストールは成功しましたが、そのままでは生成された資格証明ファイル（cwallet.sso）の権限不足のため、バックアップを実行する時に下記のエラーが出てきます。

```sql
RMAN> backup database;

Starting backup at 06-DEC-21
PSDRPC returns significant error 3113.
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 12/06/2021 02:02:23
ORA-03113: end-of-file on communication channel
```

`cwallet.sso`の権限を変更する方法は下記の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/30fb5ea8-2d65-bef1-007b-40e5dabb93c1.png)

変更後の`cwallet.sso`の権限は下記のように変わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/79403bda-d85e-b37d-ca1a-8d7ba3635698.png)


## RMANのコンフィグレーション

Oracle Database Cloud Backup Moduleを利用するため、RMANのコンフィグレーションを更新する必要があります。下記のコンフィグレーション・サンプルを参照してください。

```bash
RUN {
    # CONTROLFILEの自動バックアップを有効
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    # 新しいディバイス・タイプ（sbt）を追加
    CONFIGURE CHANNEL DEVICE TYPE sbt PARMS='SBT_LIBRARY=C:\app\oracle\product\19.3.0\dbhome_1\bin\oraopc.dll, ENV=(OPC_PFILE=C:\app\oracle\product\19.3.0\dbhome_1\database\opcORCL.ora)';
    # デフォルト・ディバイス・タイプを設定
    CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE; 
    # 圧縮レーベルをMEDIUMに設定
    CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
    # バックアップ・セットの圧縮を有効
    CONFIGURE DEVICE TYPE SBT_TAPE BACKUP TYPE TO COMPRESSED BACKUPSET;
    # パラレルは ２（２つチャネル）に設定
    CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 2;
}
```

# バックアップ

## 暗号化の設定

Oracle Database Cloud Backup Moduleを使ってデータベースをOCI Object Storageへバックアップする時に暗号化しておく必要があります。

```sql
SET ENCRYPTION ON IDENTIFIED BY <PASSWORD> ONLY;
```

しなければ、下記のようなエラーが出てきます。

```sql
KBHS-01602: backup piece 050g0v39_1_1 is not encrypted
```

## LEVEL0のバックアップを取得

```sql
BACKUP INCREMENTAL LEVEL 0 DATABASE TAG WIN_INC_L0_DATAFILE_00 PLUS ARCHIVELOG TAG WIN_ARCHIVELOG_00;
```

正常でバックアップを実施して、バックアップされた内容を`LIST BACKUP;`で確認します。

# リストア

OCI Object Storageに保存されたバックアップから新しいデータベースを作成と予想しますので、ターゲット・ホストにはバックアップを取得したソーズ・データベースのホストと同じバージョンのデータベース・ソフトウェア、ディレクトリ構造を確保してください。

簡単な方法はターゲット・ホストにソース・データベースと同名のデータベースを作成してから、そのデータベースをドロップしてもいいです。

```sql
SQL> drop database;
```

ターゲット・ホストにログインして、[事前準備](#事前準備)と[Backup Module](#backup-module)の内容を参照し、Backup Moduleを正しくインストールしたら、リストア作業を開始できます。

## DBスタート、復号化とDBIDの設定

ターゲット・データベースを`NOMOUNT`でスタートして、復号化とソース・データベースのDBIDの設定します。


```sql
PS C:\Users\opc> rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Mon Dec 6 13:32:15 2021
Version 19.3.0.0.0

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

connected to target database (not started)

RMAN> STARTUP NOMOUNT;

startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file 'C:\APP\ORACLE\PRODUCT\19.3.0\DBHOME_1\DATABASE\INITORCL9.ORA'

starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started

Total System Global Area    1073738560 bytes

Fixed Size                     9036608 bytes
Variable Size                276824064 bytes
Database Buffers             780140544 bytes
Redo Buffers                   7737344 bytes

RMAN> SET DECRYPTION IDENTIFIED BY <PASSWORD>;

executing command: SET decryption
using target database control file instead of recovery catalog

RMAN> SET DBID=3602727473;

executing command: SET DBID

```

## pfileをリストア

まず、ソース・データベースの`pfile`をリストアします。

```sql
RUN {
ALLOCATE CHANNEL t1 DEVICE TYPE SBT_TAPE PARMS='SBT_LIBRARY=C:\app\oracle\product\19.3.0\dbhome_1\bin\oraopc.dll, ENV=(OPC_PFILE=C:\app\oracle\product\19.3.0\dbhome_1\database\opcORCL.ora)';
RESTORE SPFILE TO PFILE 'C:\app\oracle\product\19.3.0\dbhome_1\database\initORCL9.ora' FROM AUTOBACKUP;
}


allocated channel: t1
channel t1: SID=90 device type=SBT_TAPE
channel t1: Oracle Database Backup Service Library VER=18.0.0.1

Starting restore at 2021/12/06 13:39:02

channel t1: looking for AUTOBACKUP on day: 20211206
channel t1: AUTOBACKUP found: c-3602727473-20211206-00
channel t1: restoring spfile from AUTOBACKUP c-3602727473-20211206-00
channel t1: SPFILE restore from AUTOBACKUP complete
Finished restore at 2021/12/06 13:39:11
released channel: t1

RMAN>
```

## pfileに記載されているディレクトリを確認

SPFILEの中に記載されているディレクトリが存在することを確認します。存在しない場合は作成してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/897b8a1f-d209-f54b-c941-620d0699459c.png)


## pfileからspfileを作成

```sql
SHOW PARAMETER SPFILE;
CREATE SPFILE FROM PFILE;
SHUTDOWN IMMEDIATE
STARTUP NOMOUNT
SHOW PARAMETER SPFILE;
```

![](Pasted%20image%2020211206215056.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/512ce286-c918-7c2b-450a-693d8d56baa3.png)


## CONTROLFILEのリストア


```sql
RMAN> RUN {
ALLOCATE CHANNEL t1 DEVICE TYPE SBT_TAPE PARMS='SBT_LIBRARY=C:\app\oracle\product\19.3.0\dbhome_1\bin\oraopc.dll, ENV=(OPC_PFILE=C:\app\oracle\product\19.3.0\dbhome_1\database\opcORCL.ora)';
RESTORE CONTROLFILE FROM AUTOBACKUP;
}


allocated channel: t1
channel t1: SID=11 device type=SBT_TAPE
channel t1: Oracle Database Backup Service Library VER=18.0.0.1

Starting restore at 2021/12/06 13:52:43

channel t1: looking for AUTOBACKUP on day: 20211206
channel t1: AUTOBACKUP found: c-3602727473-20211206-00
channel t1: restoring control file from AUTOBACKUP c-3602727473-20211206-00
channel t1: control file restore from AUTOBACKUP complete
output file name=C:\APP\ORACLE\ORADATA\ORCL9\CONTROL01.CTL
output file name=C:\APP\ORACLE\RECOVERY_AREA\ORCL9\CONTROL02.CTL
Finished restore at 2021/12/06 13:52:52
released channel: t1

RMAN>
```

## データベースをMOUNTに変更

```sql
RMAN> ALTER DATABASE MOUNT;

Statement processed
```

## データファイルのリストアのプレビュー

実際のリストアを実施する前に、プレビューしたほうがいいです。データベースを一致させるためのSCNを特定し、リストアする時に使用されるバックアップ・ピースやロケーションも確認します。

```sql
RMAN> RESTORE DATABASE PREVIEW;

Starting restore at 2021/12/06 13:57:46
Starting implicit crosscheck backup at 2021/12/06 13:57:46
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=137 device type=DISK
Finished implicit crosscheck backup at 2021/12/06 13:57:46

Starting implicit crosscheck copy at 2021/12/06 13:57:46
using channel ORA_DISK_1
Finished implicit crosscheck copy at 2021/12/06 13:57:46

searching for all files in the recovery area
cataloging files...
no files cataloged

allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: SID=389 device type=SBT_TAPE
channel ORA_SBT_TAPE_1: Oracle Database Backup Service Library VER=18.0.0.1
using channel ORA_DISK_1


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


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
2       Incr 0  1.11G      SBT_TAPE    00:00:30     2021/12/06 12:32:14
        BP Key: 2   Status: AVAILABLE  Compressed: NO  Tag: WIN_INC_L0_DATAFILE_00
        Handle: 030g219g_1_1   Media: objectstorage.ap-tokyo-1.oraclecloud.com/n/sehubjapacprod/db_bac
  List of Datafiles in backup set 2
  File LV Type Ckp SCN    Ckp Time            Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ------------------- ----------- ------ ----
  1    0  Incr 2081681    2021/12/06 12:31:45              NO    C:\APP\ORACLE\ORADATA\ORCL9\SYSTEM01.DBF
  3    0  Incr 2081681    2021/12/06 12:31:45              NO    C:\APP\ORACLE\ORADATA\ORCL9\SYSAUX01.DBF
  4    0  Incr 2081681    2021/12/06 12:31:45              NO    C:\APP\ORACLE\ORADATA\ORCL9\UNDOTBS01.DBF
  7    0  Incr 2081681    2021/12/06 12:31:45              NO    C:\APP\ORACLE\ORADATA\ORCL9\USERS01.DBF

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
4       Incr 0  467.00M    SBT_TAPE    00:00:11     2021/12/06 12:32:45
        BP Key: 4   Status: AVAILABLE  Compressed: NO  Tag: WIN_INC_L0_DATAFILE_00
        Handle: 050g21b3_1_1   Media: objectstorage.ap-tokyo-1.oraclecloud.com/n/sehubjapacprod/db_bac
  List of Datafiles in backup set 4
  Container ID: 2, PDB Name: PDB$SEED
  File LV Type Ckp SCN    Ckp Time            Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ------------------- ----------- ------ ----
  5    0  Incr 1970198    2021/12/06 07:45:43              NO    C:\APP\ORACLE\ORADATA\ORCL9\PDBSEED\SYSTEM01.DBF
  6    0  Incr 1970198    2021/12/06 07:45:43              NO    C:\APP\ORACLE\ORADATA\ORCL9\PDBSEED\SYSAUX01.DBF
  8    0  Incr 1970198    2021/12/06 07:45:43              NO    C:\APP\ORACLE\ORADATA\ORCL9\PDBSEED\UNDOTBS01.DBF

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
3       Incr 0  470.75M    SBT_TAPE    00:00:11     2021/12/06 12:32:30
        BP Key: 3   Status: AVAILABLE  Compressed: NO  Tag: WIN_INC_L0_DATAFILE_00
        Handle: 040g21ak_1_1   Media: objectstorage.ap-tokyo-1.oraclecloud.com/n/sehubjapacprod/db_bac
  List of Datafiles in backup set 3
  Container ID: 3, PDB Name: PDB1
  File LV Type Ckp SCN    Ckp Time            Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ------------------- ----------- ------ ----
  9    0  Incr 2075714    2021/12/06 11:11:56              NO    C:\APP\ORACLE\ORADATA\ORCL9\PDB1\SYSTEM01.DBF
  10   0  Incr 2075714    2021/12/06 11:11:56              NO    C:\APP\ORACLE\ORADATA\ORCL9\PDB1\SYSAUX01.DBF
  11   0  Incr 2075714    2021/12/06 11:11:56              NO    C:\APP\ORACLE\ORADATA\ORCL9\PDB1\UNDOTBS01.DBF
  12   0  Incr 2075714    2021/12/06 11:11:56              NO    C:\APP\ORACLE\ORADATA\ORCL9\PDB1\USERS01.DBF
using channel ORA_SBT_TAPE_1


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


BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
5       256.00K    SBT_TAPE    00:00:01     2021/12/06 12:32:51
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: WIN_ARCHIVELOG_00
        Handle: 060g21bi_1_1   Media: objectstorage.ap-tokyo-1.oraclecloud.com/n/sehubjapacprod/db_bac

  List of Archived Logs in backup set 5
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    4       2081664    2021/12/06 12:31:40 2081746    2021/12/06 12:32:50
validation succeeded for backup piece
recovery will be done up to SCN 2081681
Media recovery start SCN is 2081681
Recovery must be done beyond SCN 2081681 to clear datafile fuzziness
validation succeeded for backup piece
Finished restore at 2021/12/06 13:57:48

RMAN>
```


## データファイルのリストア

```sql
RMAN> RESTORE DATABASE;

Starting restore at 2021/12/06 13:59:34
using channel ORA_SBT_TAPE_1
using channel ORA_DISK_1

channel ORA_SBT_TAPE_1: starting datafile backup set restore
channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set
channel ORA_SBT_TAPE_1: restoring datafile 00001 to C:\APP\ORACLE\ORADATA\ORCL9\SYSTEM01.DBF
channel ORA_SBT_TAPE_1: restoring datafile 00003 to C:\APP\ORACLE\ORADATA\ORCL9\SYSAUX01.DBF
channel ORA_SBT_TAPE_1: restoring datafile 00004 to C:\APP\ORACLE\ORADATA\ORCL9\UNDOTBS01.DBF
channel ORA_SBT_TAPE_1: restoring datafile 00007 to C:\APP\ORACLE\ORADATA\ORCL9\USERS01.DBF
channel ORA_SBT_TAPE_1: reading from backup piece 030g219g_1_1
channel ORA_SBT_TAPE_1: piece handle=030g219g_1_1 tag=WIN_INC_L0_DATAFILE_00
channel ORA_SBT_TAPE_1: restored backup piece 1
channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:25
channel ORA_SBT_TAPE_1: starting datafile backup set restore
channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set
channel ORA_SBT_TAPE_1: restoring datafile 00009 to C:\APP\ORACLE\ORADATA\ORCL9\PDB1\SYSTEM01.DBF
channel ORA_SBT_TAPE_1: restoring datafile 00010 to C:\APP\ORACLE\ORADATA\ORCL9\PDB1\SYSAUX01.DBF
channel ORA_SBT_TAPE_1: restoring datafile 00011 to C:\APP\ORACLE\ORADATA\ORCL9\PDB1\UNDOTBS01.DBF
channel ORA_SBT_TAPE_1: restoring datafile 00012 to C:\APP\ORACLE\ORADATA\ORCL9\PDB1\USERS01.DBF
channel ORA_SBT_TAPE_1: reading from backup piece 040g21ak_1_1
channel ORA_SBT_TAPE_1: piece handle=040g21ak_1_1 tag=WIN_INC_L0_DATAFILE_00
channel ORA_SBT_TAPE_1: restored backup piece 1
channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:15
channel ORA_SBT_TAPE_1: starting datafile backup set restore
channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set
channel ORA_SBT_TAPE_1: restoring datafile 00005 to C:\APP\ORACLE\ORADATA\ORCL9\PDBSEED\SYSTEM01.DBF
channel ORA_SBT_TAPE_1: restoring datafile 00006 to C:\APP\ORACLE\ORADATA\ORCL9\PDBSEED\SYSAUX01.DBF
channel ORA_SBT_TAPE_1: restoring datafile 00008 to C:\APP\ORACLE\ORADATA\ORCL9\PDBSEED\UNDOTBS01.DBF
channel ORA_SBT_TAPE_1: reading from backup piece 050g21b3_1_1
channel ORA_SBT_TAPE_1: piece handle=050g21b3_1_1 tag=WIN_INC_L0_DATAFILE_00
channel ORA_SBT_TAPE_1: restored backup piece 1
channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:07
Finished restore at 2021/12/06 14:00:22

RMAN>
```

## リカバリのプレビュー

プレビューで、リカバリを実行する時に具体的な動作を確認します。

```sql
RMAN> RECOVER DATABASE PREVIEW;

Starting recover at 2021/12/06 14:02:20
using channel ORA_SBT_TAPE_1
using channel ORA_DISK_1
using channel ORA_SBT_TAPE_1
using channel ORA_DISK_1


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


BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
1       13.50M     SBT_TAPE    00:00:01     2021/12/06 12:31:42
        BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: WIN_ARCHIVELOG_00
        Handle: 020g219d_1_1   Media: objectstorage.ap-tokyo-1.oraclecloud.com/n/sehubjapacprod/db_bac

  List of Archived Logs in backup set 1
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    3       2075542    2021/12/06 11:11:51 2081664    2021/12/06 12:31:40

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
5       256.00K    SBT_TAPE    00:00:01     2021/12/06 12:32:51
        BP Key: 5   Status: AVAILABLE  Compressed: NO  Tag: WIN_ARCHIVELOG_00
        Handle: 060g21bi_1_1   Media: objectstorage.ap-tokyo-1.oraclecloud.com/n/sehubjapacprod/db_bac

  List of Archived Logs in backup set 5
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    4       2081664    2021/12/06 12:31:40 2081746    2021/12/06 12:32:50
validation succeeded for backup piece
recovery will be done up to SCN 1970198
Media recovery start SCN is 1970198
Recovery must be done beyond SCN 2081681 to clear datafile fuzziness
Finished recover at 2021/12/06 14:02:21

RMAN>
```

## データベースをリカバリ

リカバリする時に参照するSCNはプレビューの結果の`Next SCN`です。

```sql
RMAN> RECOVER DATABASE UNTIL SCN 2081746;


Starting recover at 2021/12/06 14:05:20
using channel ORA_SBT_TAPE_1
using channel ORA_DISK_1

starting media recovery

channel ORA_SBT_TAPE_1: starting archived log restore to default destination
channel ORA_SBT_TAPE_1: restoring archived log
archived log thread=1 sequence=4
channel ORA_SBT_TAPE_1: reading from backup piece 060g21bi_1_1
channel ORA_SBT_TAPE_1: piece handle=060g21bi_1_1 tag=WIN_ARCHIVELOG_00
channel ORA_SBT_TAPE_1: restored backup piece 1
channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:01
archived log file name=C:\APP\ORACLE\RECOVERY_AREA\ORCL9\ARCHIVELOG\2021_12_06\O1_MF_1_4_JTW651M9_.ARC thread=1 sequence=4
channel default: deleting archived log(s)
archived log file name=C:\APP\ORACLE\RECOVERY_AREA\ORCL9\ARCHIVELOG\2021_12_06\O1_MF_1_4_JTW651M9_.ARC RECID=3 STAMP=1090591521
media recovery complete, elapsed time: 00:00:02
Finished recover at 2021/12/06 14:05:24

RMAN>
```


## LEVEL1のリカバリ

上記のステップでソース・データベースのバックアップからターゲット・ホストに新しいデータベースをリカバリしました。ただ、後続のLEVEL1バックアップを続けて適用するため、ターゲット・データベースはまだオープンしていません。

基本的にLEVEL1のバックアップをリカバリする用法はLEVEL0と同じです。

- [DBスタート、復号化とDBIDの設定](#db%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E5%BE%A9%E5%8F%B7%E5%8C%96%E3%81%A8dbid%E3%81%AE%E8%A8%AD%E5%AE%9A)
- [CONTROLFILEのリストア](#controlfile%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2)
- [データベースをMOUNTに変更](#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92mount%E3%81%AB%E5%A4%89%E6%9B%B4)
- [リカバリのプレビュー](#%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA%E3%81%AE%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC)
- [データベースをリカバリ](#データベースをリカバリ)

## ターゲット・データベースをオープン

データベースをオープンする時に、`RESETLOGS`の指定することが必要です。
`RESETLOGS`を指定すると、オープンされたデータベースにソース・データベースのバックアップを適用できなくなります。

```sql
RMAN> ALTER DATABASE OPEN RESETLOGS;

Statement processed

RMAN>
```

ターゲット・データベースをオープンして、ソース・データベースにおける作成したテーブルを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100411/f7e2d7e9-e1df-9ac7-0138-d2d2a65d8b7c.png)