Oracle Cloud(OCI)のPaaSのデータベースサービス(DBシステム/1ノード/19c)でパッチ適用をする

####概要
Oracle Cloudで提供されているPaaSのデータベースサービス(DBシステム)で、提供されたパッチを適用した際の作業内容を紹介します。Oracle Cloudで提供されるツールを使うことで、Grid InfrastructureとDatabaseへのパッチ適用は簡単に実施することができます。
DBシステムでは、Grid Infrastructure(ASM)を使うデータベースと使わないデーベースを構築可能です。ここではGrid Infrastructureを使う構成に関してパッチ適用を実施しました。Grid Infrastructureを使う構成では、Oracle Detabaseだけでなく、Grid Infrastructureにもパッチが提供されます。ここでは、Grid InfrastructureとDatabaseのそれぞれにパッチを適用します。実施したOracle Databaseのリリースは19cで、1 ocpuの（Real Application Clusters環境ではなく）シングルDBです。
2019年11月ごろの情報・環境を元にこの記事は記載しています。

####1. OCIのコンソールからのパッチ適用とdbcliによるパッチ適用
Oracle Cloud(Oracle Cloud Infrastructure = OCI)上で、DBシステムにパッチを適用する場合、2つの方法が提供されています。（APIによる適用方法もあります）

+ OCIのコンソールからパッチを適用する方法
OCIのコンソール画面からパッチ適用することができます。本記事ではこちらの方法を中心に紹介します。Grid Infrastructure、DatabaseともにOCIのコンソールからパッチ適用が可能です。DBシステムの情報を参照したいときに、補助的に次に紹介するコマンドラインのインタフェース(dbcli)が便利な場面もあります。

+ dbcliによるパッチ適用
OCIのDBシステムに用意されているコマンドラインのインターフェースdbcliを利用して、Grid Infrastructure、Databaseにパッチ適用することができます。

####2. DBシステムへのパッチ適用に関する参照マニュアル
マニュアルの「Oracle Cloud Infrastructure Documentation 」の中の、「Database」->「Bare Metal and Virtual Machine DB Systems」に「Patching a DB System」という章があり、Grid Infrastructure、Databaseへのパッチ適用の手順が、OCIのコンソールとdbcliそれぞれに関して記載されています。
[Patching a DB System](https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/patchingDB.htm)

●OCIのコンソールからGrid Infrastructureへのパッチ適用
「Patching a DB System」の中の「Using the Console」->「To perform a patch operation on a DB system」
●OCIのコンソールからDatabaseへのパッチ適用
「Patching a DB System」の中の「Using the Console」->「To perform a patch operation on a database」
●dbcliからGrid Infrastructureへのパッチ適用
「Patching a DB System」の中の「Using the Database CLI」->「To patch server components」
●dbcliからDatabaseへのパッチ適用
「Patching a DB System」の中の「Using the Database CLI」->「To patch database home components」

なお、dbcliを利用するときに、dbcliを最新にすることが推奨されています。（DBシステムがプロビジョニングしたときから時間が経過している場合、最新のdbcliにすることでパッチ適用をより確かにすることができる、とマニュアルに記載されています。）dbcliを最新にする手順は、上記の「Patching a DB System」の中の「Using the Database CLI」->「To update the CLI with the latest commands」に記載があります。

####3. 本記事の作業の前提
●OCIにDBシステムがプロビジョニングされている（本記事の内容は19cをベースとしています）

●ブラウザでOCIコンソールへ接続できる
本記事ではOCIコンソールへの接続方法や、基本的な利用方法は紹介しません。次のリンク先の情報が参考になります。
[OCIコンソールにアクセスして基本を理解する](https://community.oracle.com/docs/DOC-1019533)

●プロビジョニングされたDBシステムのホストへTera Termなどからsshで接続できる
パッチ適用だけであれば、OCIのコンソールから（ブラウザから）の作業だけで可能ですが、DBシステムの情報を確認するためにdbcliを使う方法も紹介します。その場合sshで接続して実行します。本記事ではDBシステムのホストへTera Termなどからsshで接続する方法は紹介しません。次のリンク先の情報が参考になります。
[クラウドでOracle Databaseを使う](https://community.oracle.com/docs/DOC-1019568)

####4. インストールされているバージョンとパッチ適用できるバージョンの確認
パッチを適用する前に、現在DBシステムにインストールされているバージョンと、適用可能なパッチのバージョンを確認します。ここでは、OCIのコンソールから確認する方法とdbcliから確認する方法を紹介します。

#####4.1. OCIのコンソールから確認
OCIのコンソールの左上のハンバーガーメニューから、「データベース / ベア・メタル、VMおよびExadata」をクリックします。「(データベースの)ベア・メタル、VMおよびExadata」のコンソール画面左側で、パッチ適用したいインスタンスのあるコンパートメントを選択してください。
画面右側に、パッチ適用の対象のDBシステムが表示されたら、該当のDBシステムの名前をクリックします。選択したDBシステムの詳細情報が表示されます。
![17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/64a1c812-5bc1-9823-8137-9c390e83a13f.png)
ここで「DBシステム・バージョン」にGrid Infrastructureのバージョンが記載されています。ここの例では19.4.0.0.190716です。
同じ画面の左側下部の「リソース」-「パッチ」をクリックします。Grid Infrastructureに適用可能なパッチがあれば、ここで画面右側に、そのパッチのバージョンが表示されます。
![18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/65fab0de-f124-4524-d121-83904e764026.png)
ここの例ではパッチのバージョンは19.5.0.0.191015です。このあと、この画面からパッチ適用を進めることが可能ですが、ここでは次にDatabaseの情報に関して関して確認していきます。同じ画面の「データベース」をクリックします。画面右側にデータベースのバージョンが確認できます。ここの例では19.4.0.0.190716です。
![19.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/dde28d86-0dfd-234c-b381-07080844d54c.png)
Databaseに適用できるパッチを確認するために、まずこの画面でデータベース名（画面の例では「DB1126」となっています）をクリックします。Databaseの詳細情報の画面が表示されたら、画面左下部の「リソース」-「パッチ」をクリックします。Databaseに適用可能なパッチがあれば、ここで画面右側に、そのパッチのバージョンが表示されます。
![20.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/3fcc20ea-2b8b-9ebd-2f93-ec0085ceeea8.png)
ここの例ではパッチのバージョンは19.5.0.0.191015です。


#####4.2. dbcliから確認
DBシステムのホストへsshで接続します。opcユーザーからsudoコマンドでrootで接続し、dbcliコマンドで下記のように実行します。
**ここで紹介しているdbcliのdescribe-componentは、「2ノードのRAC DBシステムでは使用できません。 」とマニュアルに記載されているので注意ください。**[Oracle Database CLIリファレンス](https://docs.oracle.com/cd/E97706_01/Content/Database/References/dbacli.htm)のdbcli describe-componentの記載を参照ください。

```
[opc@tsugahar19c ~]$ sudo -s
[root@tsugahar19c opc]# cd /opt/oracle/dcs/bin
[root@tsugahar19c bin]# ./dbcli describe-component
System Version
---------------
19.3.1.2.0

Component                                Installed Version    Available Version 
---------------------------------------- -------------------- --------------------
GI                                        19.4.0.0.190716       19.5.0.0.191015 
DB                                        19.4.0.0.190716       19.5.0.0.191015 
```
Grid Infrastructureは19.4.0.0.190716がインストールされており、適用可能なパッチが19.5.0.0.191015であることがわかります。
Databaseは19.4.0.0.190716がインストールされており、適用可能なパッチが19.5.0.0.191015であることがわかります。
どちらも先にOCIのコンソールから確認した情報と同じです。

####5. OCIのコンソールからGrid Infrastructureへパッチ適用する
Grid Infrastructureへパッチ適用します。「5.1. OCIのコンソールから確認」と同じようにGrid Infrastructureへ適用可能なパッチの情報を表示させます。表示させたら、画面右側の「三つの点」のボタンへマウスを持っていくとメニューが表示されます。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/e0c99648-00a3-e87b-657d-54d98a54d995.png)
パッチ適用の前に、メニューから「事前チェック」をクリックします。
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/f10a9af3-a800-4f77-88e8-c1560b98e9d9.png)
確認を求められるので「OK」をクリックします。
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/6260e32d-c1db-6097-29ec-187cdfb875e9.png)
Grid Infrastructureへのパッチ適用の事前チェックが実行されます。画面では「チェック中」と表示されます。パッチ適用の事前チェックは、なんどやっても問題ありません。なにか問題が確認できた場合に関する表示については「8. （参考）パッチ適用の事前チェックで何かひっかかかる場合」を確認ください。
事前チェックで問題がなければ、パッチ適用に進みます。先ほどと同じ画面で「三つの点」のボタンへマウスを持っていき今度は「適用」をクリックします。
![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/6465a830-b10f-97a8-756b-f89146044b9f.png)
![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/8514e39a-8db9-d52f-becc-bb50e6a53102.png)
Grid Infrastructureへパッチ適用する場合、データベースインスタンスは起動した状態から実施して構いませんが、パッチ適用中に停止し再起動されます。したがって、このように注意が表示されます。パッチ適用するためには「OK」をクリックして先に進めます。
![12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/57c851bb-c784-eda0-106b-9efcb0d53064.png)
パッチ適用中はこのように表示されます。パッチ適用の間も、DBシステムのホストは起動したままでssh接続した端末から、データベース関連のプロセスなどを確認することはできます（DBインスタンスやASMインスタンスのsmonプロセスが停止したり起動したりすることを確認できます）。
今回の例ではGrid Infrastructureへのパッチ適用時間は約45分でした。パッチ適用が終了すること、次の画面のように「パッチ」のところの表示がなくなります。
![14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/0b014e22-d681-a594-a18d-d61f39160e98.png)
画面左で「パッチ履歴」をクリックすると、パッチ適用済みとなったことが確認できます。
![15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/b9322a75-f1b3-6be9-829b-5a30b353e05f.png)
（ここでパッチ履歴には、事前チェックの履歴も表示されます。ここの例では、事前チェックを何度か実施しているので、履歴の数が多く表示されています。）
これでGrid Infrastructureへパッチ適用は完了です。OCIコンソール、およびdbcliでGrid Infrastructureのバージョンが新しくなったことが確認できます。下記は「5.2. dbcliから確認」と同じ手順でGrid Infrastructureのバージョンを確認した結果です。

```
[opc@tsugahar19c ~]$ sudo -s
[root@tsugahar19c opc]# cd /opt/oracle/dcs/bin
[root@tsugahar19c bin]# ./dbcli describe-component
System Version
---------------
latest

Component                                Installed Version    Available Version 
---------------------------------------- -------------------- --------------------
GI                                        19.5.0.0.191015       up-to-date      
DB                                        19.4.0.0.190716       19.5.0.0.191015 
```
Grid Infrastructureが19.5.0.0.191015になり、最新である（up-to-date）と表示されます。

####6. OCIのコンソールからDatabaseへパッチ適用する
Databaseへのパッチ適用も、Grid Infrastuctureへのパッチ適用とほぼ同じ手順で実行できます。「5.1. OCIのコンソールから確認」でDatabaseへ適用できるパッチのバージョンを表示させた画面がありました。その画面を表示させます。**DBシステム(Grid Infrastructure)のパッチの情報の画面ではなく、1つ下へ遷移させたDatabaseのパッチの情報であることに注意してください。2つの画面はとてもに似ているので間違いやすいです。**
![21.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/07dfc51e-9184-9413-a3d9-7c958f493878.png)
Databaseへ適用可能なパッチの情報を表示させたら、画面右側の「三つの点」のボタンへマウスを持っていくとメニューが表示されるので、「事前チェック」をクリックします。事前チェックで問題がなければ「適用」に進みます。
![22.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/3597b853-d959-e337-e4da-4adaa5c793b8.png)
Grid Infrastructureへのパッチ適用と同じように、データベースインスタンスの再起動があるので、そのことの注意が表示されます。パッチ適用するためには「OK」をクリックして先へ進めます。
![23.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/5141e2bd-79f6-a10f-7023-f4129392f4a8.png)
今回の例ではDatabaseへのパッチ適用は大体30分でした。「5.2. dbcliから確認」と同じ手順でDatabaseのバージョンを確認すると、パッチが適用されていることが確認できます。これでDatabaseへのパッチ適用は終了です。

```
[opc@tsugahar19c ~]$ sudo -s
[root@tsugahar19c opc]# cd /opt/oracle/dcs/bin
[root@tsugahar19c bin]# ./dbcli describe-component
System Version
---------------
latest

Component                                Installed Version    Available Version 
---------------------------------------- -------------------- --------------------
GI                                        19.5.0.0.191015       up-to-date      
DB                                        19.5.0.0.191015       up-to-date      
```

####7. （参考）パッチ適用の事前チェックで何かひっかかかる場合
パッチ適用の前の事前チェックで何か問題が確認できた場合は、次の画面のようにパッチの状態の表示のところで、informationの「i」が表示されます。この「i」にマウスを持っていくとメッセージが表示されます。
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368742/1722ba18-ca27-9afb-a9c4-3933940037d0.png)
ここのメッセージを確認すると、マニュアルのパッチ適用時のトラブルシュートへのリンクを参照するように指示されています。
[Patching Failures on Bare Metal and Virtual Machine DB Systems](https://docs.cloud.oracle.com/iaas/Content/Database/Troubleshooting/Patching/patchingfail.htm)

この記事の中では、同じバージョンの19.5.0.0.191015に関して、Grid Infrastructure(DBシステム)へのパッチ適用の後でDatabaseのパッチ適用を実施しました。先にDatabaseへ適用しようとして事前チェックすると、問題として報告されます。上記のマニュアルの「Patching Failures on Bare Metal and Virtual Machine DB Systems」の「Determining the Problem」にしたがって問題の内容を確認してみると、次のようになります。

```
[root@tsugahar19c opc]# cd /opt/oracle/dcs/bin/
[root@tsugahar19c bin]# ./dbcli list-jobs

ID                                       Description                                                                 Created                             Status 
---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ----------
ab56365f-a28a-4ffe-8eba-0cd79da93549     Authentication key update for DCS_ADMIN                                     November 20, 2019 9:56:09 AM UTC    Success
ac61b3c8-2b21-4182-a1b1-85512ec1b0b0     Provisioning service creation                                               November 20, 2019 9:58:06 AM UTC    Success
0a524bd1-8dc5-4395-9ccd-dfcd4341dda1     SSH keys update                                                             November 20, 2019 10:55:05 AM UTC   Success
3e3a9a2d-8992-4af5-92fc-21c6dc8e5038     SSH key delete                                                              November 20, 2019 10:56:40 AM UTC   Success
6dbe49d9-60aa-4cef-8132-8fb0ec796815     Server Patching Prechecks                                                   November 26, 2019 12:30:08 AM UTC   Success
9fd57542-b088-42f1-aaf7-119227fbb26a     DB Home Prechecks                                                           November 26, 2019 12:37:59 AM UTC   Failure
```

IDが9fd57542-b088-42f1-aaf7-119227fbb26aであるジョブ(DB Home Prechecks)がFailしていることがわかります。続けて、その原因を確認します。

```
[root@tsugahar19c bin]# ./dbcli describe-job -i 9fd57542-b088-42f1-aaf7-119227fbb26a -j
{
  "jobId" : "9fd57542-b088-42f1-aaf7-119227fbb26a",
  "status" : "Failure",
  "message" : "DCS-10204:Operation: update-dbhome failed, Found unsupported Grid Infrastructure version: 19.4.0.0.190716, Expected version: 19.5.0.0.191015",
  "reports" : [ {
    "taskId" : "TaskZLockWrapper_518",
    "taskName" : "DB Home Precheck",
    "taskResult" : "DCS-10204:Operation: update-dbhome failed, Found unsupported Grid Infrastructure version: 19.4.0.0.190716, Expected version: 19.5.0.0.191015",
    "startTime" : "November 26, 2019 00:37:59 AM UTC",
    "endTime" : "November 26, 2019 00:39:24 AM UTC",
    "status" : "Failure",
    "taskDescription" : null,
    "parentTaskId" : "TaskServiceRequest_516",
    "jobId" : "9fd57542-b088-42f1-aaf7-119227fbb26a",
    "tags" : [ ],
    "reportLevel" : "Error",
    "updatedTime" : "November 26, 2019 00:39:24 AM UTC"
  }, {
    "taskId" : "TaskSequential_500",
    "taskName" : "DB Home Precheck",
    "taskResult" : "DCS-10204:Operation: update-dbhome failed, Found unsupported Grid Infrastructure version: 19.4.0.0.190716, Expected version: 19.5.0.0.191015",
    "startTime" : "November 26, 2019 00:39:23 AM UTC",
    "endTime" : "November 26, 2019 00:39:24 AM UTC",
    "status" : "Failure",
    "taskDescription" : null,
    "parentTaskId" : "TaskZLockWrapper_518",
    "jobId" : "9fd57542-b088-42f1-aaf7-119227fbb26a",
    "tags" : [ ],
    "reportLevel" : "Error",
    "updatedTime" : "November 26, 2019 00:39:24 AM UTC"
  }, {
    "taskId" : "TaskZJsonRpcExt_502",
    "taskName" : "Create Patching Repository Directories[tsugahar19c]",
    "taskResult" : "Successfully created repository directories",
    "startTime" : "November 26, 2019 00:39:23 AM UTC",
    "endTime" : "November 26, 2019 00:39:23 AM UTC",
    "status" : "Success",
    "taskDescription" : null,
    "parentTaskId" : "TaskSequential_501",
    "jobId" : "9fd57542-b088-42f1-aaf7-119227fbb26a",
    "tags" : [ ],
    "reportLevel" : "Info",
    "updatedTime" : "November 26, 2019 00:39:23 AM UTC"
  }, {
    "taskId" : "TaskZJsonRpcExt_505",
    "taskName" : "Download latest patch metadata[tsugahar19c]",
    "taskResult" : "Successfully downloaded latest patch metadata",
    "startTime" : "November 26, 2019 00:39:23 AM UTC",
    "endTime" : "November 26, 2019 00:39:24 AM UTC",
    "status" : "Success",
    "taskDescription" : null,
    "parentTaskId" : "TaskSequential_504",
    "jobId" : "9fd57542-b088-42f1-aaf7-119227fbb26a",
    "tags" : [ ],
    "reportLevel" : "Info",
    "updatedTime" : "November 26, 2019 00:39:24 AM UTC"
  }, {
    "taskId" : "TaskParallel_507",
    "taskName" : "task:TaskParallel_507",
    "taskResult" : "DCS-10204:Operation: update-dbhome failed, Found unsupported Grid Infrastructure version: 19.4.0.0.190716, Expected version: 19.5.0.0.191015",
    "startTime" : "November 26, 2019 00:39:24 AM UTC",
    "endTime" : "November 26, 2019 00:39:24 AM UTC",
    "status" : "Failure",
    "taskDescription" : null,
    "parentTaskId" : "TaskSequential_500",
    "jobId" : "9fd57542-b088-42f1-aaf7-119227fbb26a",
    "tags" : [ ],
    "reportLevel" : "Error",
    "updatedTime" : "November 26, 2019 00:39:24 AM UTC"
  }, {
    "taskId" : "TaskZJsonRpcExt_508",
    "taskName" : "checking GiHome version[tsugahar19c]",
    "taskResult" : "DCS-10204:Operation: update-dbhome failed, Found unsupported Grid Infrastructure version: 19.4.0.0.190716, Expected version: 19.5.0.0.191015",
    "startTime" : "November 26, 2019 00:39:24 AM UTC",
    "endTime" : "November 26, 2019 00:39:24 AM UTC",
    "status" : "Failure",
    "taskDescription" : null,
    "parentTaskId" : "TaskParallel_507",
    "jobId" : "9fd57542-b088-42f1-aaf7-119227fbb26a",
    "tags" : [ ],
    "reportLevel" : "Error",
    "updatedTime" : "November 26, 2019 00:39:24 AM UTC"
  } ],
  "createTimestamp" : "November 26, 2019 00:37:59 AM UTC",
  "resourceList" : [ ],
  "description" : "DB Home Prechecks",
  "updatedTime" : "November 26, 2019 00:39:24 AM UTC"
}
```
次のような表記が確認できます。どうやら、Grid Infrastructureが19.4.0.0.190716のままで、Databaseを19.5.0.0.191015にすると失敗するようです。

```
"taskResult" : "DCS-10204:Operation: update-dbhome failed, Found unsupported Grid Infrastructure version: 19.4.0.0.190716, Expected version: 19.5.0.0.191015",
```

このようにパッチ適用の事前チェックで問題が報告された場合は、その原因を確認します。