[Oracle Cloud] DBaaS (VM) を使ってみる その2 - パッチをあてる

# はじめに
DBaaSで作成した直後のデータベースには最新のパッチがあたってない(場合がある)ので、パッチをあてる。

今回のケースでは、初期構成されるDBが19.5なので19.6にあげる (ちなみに、今回検証したエディションはStandard Edition2です)

初期状態では、以下のようなパッチ適用状態でした。これに対してパッチを適用します。

```
(grid)$ $ORACLE_HOME/OPatch/opatch lspatches
30269395;ACFS Interim patch for 30269395
30125133;Database Release Update : 19.5.0.0.191015 (30125133)
30122149;OCW RELEASE UPDATE 19.5.0.0.0 (30122149)
29401763;TOMCAT RELEASE UPDATE 19.0.0.0.0 (29401763)

OPatch succeeded.

(oracle)$ $ORACLE_HOME/OPatch/opatch lspatches
30423135;REINSTATE IS FAILING POST APPLYING 19C OCT19 PATCHES
30128191;OJVM RELEASE UPDATE: 19.5.0.0.191015 (30128191)
30125133;Database Release Update : 19.5.0.0.191015 (30125133)
30122149;OCW RELEASE UPDATE 19.5.0.0.0 (30122149)

OPatch succeeded.

SQL> select PATCH_ID,PATCH_TYPE,ACTION,STATUS,DESCRIPTION from dba_registry_sqlpatch;

  PATCH_ID PATCH_TYPE ACTION          STATUS                    DESCRIPTION
---------- ---------- --------------- ------------------------- ----------------------------------------------------------------------------------------------------
  30128191 INTERIM    APPLY           SUCCESS                   OJVM RELEASE UPDATE: 19.5.0.0.191015 (30128191)
  30125133 RU         APPLY           SUCCESS                   Database Release Update : 19.5.0.0.191015 (30125133)
```

#パッチを適用してみる
DBaaSのパッチには2種類あるようで、GIのパッチとDBのパッチをそれぞれあてるようです。

・システムパッチ (GIパッチ) ~~OSを含むかも~~ OS Updateは、[Updating a DB System](https://docs.cloud.oracle.com/en-us/iaas/Content/Database/Tasks/updatingDB.htm)をみる限り、yumコマンドで実施する手順のようです
　ベア・メタル、VMおよびExadata > DBシステム > DBシステムの詳細 > パッチ

・DBパッチ
　ベア・メタル、VMおよびExadata > DBシステム > DBシステムの詳細 >データベース詳細 > パッチ

## 事前チェック (System Patch)

コンソールからポチポチするだけでパッチをあてることができます。
適用前に事前チェックができるようなので、やってみます。

![patch01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/2d8ae7ca-d4da-5d88-a872-d2afe1093005.png)

しばらくチェック中となりますが、裏で何が実行されているかわからないと不安になるので、確認する方法がないか調べてみました。

コンソールからのパッチ適用は、おおむね以下の図のようになっていると思われます。

![dcs-agent01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/95bd5242-915b-f1cc-7590-0d2d10c8d1f4.png)

これは、dcs-agentのログと、コマンドが実行されているときのpstreeを見た結果からの推測です。
dcs-agentのログは主に以下の3つです。(ローテートされます)
・/opt/oracle/dcs/log/dcs-agent.log - メインのログ
・/opt/oracle/dcs/log/dcs-agent-requests.log - アクセスログみたいなの
・/opt/oracle/dcs/log/dcs-agent-debug.log - 実行されているコマンドとか出力される

コンソールから、パッチ関連の操作をすると、dcs-agent-requests.logに以下のようなエントリが出力されます

```
169.254.169.254 - - [08/Feb/2020:08:12:16 +0900] "GET /ping HTTP/1.1" 200 186 "-" "Jersey/2.25 (HttpUrlConnection 1.8.0_232)" 12
169.254.169.254 - - [08/Feb/2020:08:12:16 +0900] "GET /ping HTTP/1.1" 200 186 "-" "Jersey/2.25 (HttpUrlConnection 1.8.0_232)" 8
169.254.169.254 - - [08/Feb/2020:08:12:40 +0900] "PUT /server HTTP/1.1" 200 215 "-" "Jersey/2.25 (HttpUrlConnection 1.8.0_232)" 21377
169.254.169.254 - - [08/Feb/2020:08:13:49 +0900] "GET /ping HTTP/1.1" 200 186 "-" "Jersey/2.25 (HttpUrlConnection 1.8.0_232)" 201
```

また、dcs-agent-debug.logをtailしながら、時間のかかってそうなコマンドが実行されているときにpstreeをしてみると以下のようにdcs-agentの子プロセスとしてコマンドが実行されていることがわかります。

```
# pstree -p 5499 |head
java(5499)-+-opatchauto(68542)---perl(68547)---java(68592)-+-{java}(68593)
           |                                               |-{java}(68594)
           |                                               |-{java}(68595)
※5499はdcs-agentのjavaプロセス

```

zookeeperのところは、ODA(Oracle Database Appliance)のHA構成の場合、そのような連携の仕方をするので、そうなるのだろうという予想です。(プロセスの存在は確認していますが、DBaaSのRAC環境でそのように動作するのかは未確認です)


実行中のジョブを確認するには、dbcliを使います。dcs-agentにリクエストを飛ばし、現在のジョブ実行状態を表示してくれます。
以下は、パッチのプレチェック時に実行されているジョブを確認した結果です。

```
# dbcli list-jobs

ID                                       Description                                                                 Created                             Status    
---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ----------
　 1def8fb7-c8bd-497e-aa73-562524dfd3f8     Provisioning service creation                                               February 6, 2020 12:49:07 PM JST    Success   
　 b8a7cafc-9dc1-4ed8-acc2-7627b30efd52     SSH keys update                                                             February 6, 2020 1:43:34 PM JST     Success   
　 9d56ab83-bb17-4d73-8fbe-30872f7fb084     SSH key delete                                                              February 6, 2020 1:45:26 PM JST     Success   
　 6ecb041c-a702-45c8-ae1c-214d00d81070     Authentication key update for DCS_ADMIN                                     February 6, 2020 2:11:48 PM JST     Success   
★ f3521372-ce56-4af6-811c-83e720079121     Server Patching Prechecks                                                   February 7, 2020 11:20:17 AM JST    Running  

# dbcli describe-job -i f3521372-ce56-4af6-811c-83e720079121
※ -i の後ろにジョブのIDを指定する

Job details                                                      
----------------------------------------------------------------
                     ID:  f3521372-ce56-4af6-811c-83e720079121
            Description:  Server Patching Prechecks
                 Status:  Running
                Created:  February 7, 2020 11:20:17 AM JST
                Message:  

Task Name                                                                Start Time                          End Time                            Status    
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Create Patching Repository Directories[db19c]                            February 7, 2020 11:20:17 AM JST    February 7, 2020 11:20:17 AM JST    Success   
Download latest patch metadata[db19c]                                    February 7, 2020 11:20:17 AM JST    February 7, 2020 11:20:38 AM JST    Success   
Update Patching Repository[db19c]                                        February 7, 2020 11:20:38 AM JST    February 7, 2020 11:23:10 AM JST    Success   
Opatch updation[db19c]                                                   February 7, 2020 11:23:11 AM JST    February 7, 2020 11:23:21 AM JST    Success   
Patch conflict check[db19c]                                              February 7, 2020 11:23:22 AM JST    February 7, 2020 11:23:22 AM JST    Running  

```

それぞれのtaskで実際にどんなコマンドが実行されているかは、dcs-agent-debug.logを見るとだいたいわかります。事前チェックの場合は以下のようなことを裏で行っているようです。

1. 以下のパスにパッチをダウンロード
　/opt/oracle/oak/pkgrepos/db/19.6.0.0.200114/p30501910_190000_Linux-x86-64_1912251219.zip
　/opt/oracle/oak/pkgrepos/db/19.6.0.0.200114/p30700030_196000ACFSRU_Linux-x86-64.zip
　/opt/oracle/oak/pkgrepos/opatch/19.5.0.0.0/p6880880_190000_Linux-x86-64.zip

2. grid・oracleユーザで鍵認証設定 (この環境はシングルですが、RAC構成の場合もあるため、実行されていると思われる)

3. OPatchのupdate

4. パッチ(RU)を/u01/odaPatchingTempDirに展開

5. opatchautoで、analyzeを実行

　※ただ、このopatchautoのanalyzeでは、以下のようなエラーが出力されていました。コンソール上では成功になっているので、単純に戻り値だけで判断しているのではないのだろうと推測しています。

```
OPatchauto session is initiated at Fri Feb 7 11:26:29 2020 
OPATCHAUTO-72083: Performing bootstrap operations failed. 
OPATCHAUTO-72083: The bootstrap execution failed because OPATCHAUTO-72082: Multiple system patch supplied. 
OPATCHAUTO-72082: opatchauto cannot process multiple system patches as part of same session. 
OPATCHAUTO-72082: Please remove one system patch from the patch location.. 
OPATCHAUTO-72083: Fix the reported problem and re-run opatchauto. 

OPatchauto session completed at Fri Feb 7 11:26:36 2020 
Time taken to complete the session 0 minute,
 8 seconds 

opatchauto bootstrapping failed with error code 255. 
```

　6. 後片付け (作った鍵とかその他一時ファイルの削除とか)


##パッチの適用 (systemパッチ)
事前チェックが成功したら、実際にパッチをあててみます。

コンソールをぽちっと押した後、サーバにログインして、dbcliでジョブの状態を確認すると、
"Server Patching"ジョブが実行されます。

```
# dbcli list-jobs

ID                                       Description                                                                 Created                             Status    
---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ----------
　 1def8fb7-c8bd-497e-aa73-562524dfd3f8     Provisioning service creation                                               February 6, 2020 3:49:07 AM JST     Success   
　 b8a7cafc-9dc1-4ed8-acc2-7627b30efd52     SSH keys update                                                             February 6, 2020 4:43:34 AM JST     Success   
　 9d56ab83-bb17-4d73-8fbe-30872f7fb084     SSH key delete                                                              February 6, 2020 4:45:26 AM JST     Success   
　 6ecb041c-a702-45c8-ae1c-214d00d81070     Authentication key update for DCS_ADMIN                                     February 6, 2020 5:11:48 AM JST     Success   
　 f3521372-ce56-4af6-811c-83e720079121     Server Patching Prechecks                                                   February 7, 2020 2:20:17 AM JST     Success   
★ b2a0b254-6846-430a-be4a-d0c8937c234a     Server Patching                                                             February 8, 2020 8:49:43 AM JST     Running 

# dbcli describe-job -i b2a0b254-6846-430a-be4a-d0c8937c234a

Job details                                                      
----------------------------------------------------------------
                     ID:  b2a0b254-6846-430a-be4a-d0c8937c234a
            Description:  Server Patching
                 Status:  Success
                Created:  February 8, 2020 8:49:43 AM JST
                Message:  

Task Name                                                                Start Time                          End Time                            Status    
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Create Patching Repository Directories[db19c]                            February 8, 2020 8:49:44 AM JST     February 8, 2020 8:49:44 AM JST     Success   
Download latest patch metadata[db19c]                                    February 8, 2020 8:49:44 AM JST     February 8, 2020 8:50:04 AM JST     Success   
Update Patching Repository[db19c]                                        February 8, 2020 8:50:04 AM JST     February 8, 2020 8:53:00 AM JST     Success   
Opatch updation[db19c]                                                   February 8, 2020 8:53:03 AM JST     February 8, 2020 8:53:08 AM JST     Success   
Patch conflict check[db19c]                                              February 8, 2020 8:53:08 AM JST     February 8, 2020 8:55:52 AM JST     Success   
apply clusterware patch[db19c]                                           February 8, 2020 8:55:52 AM JST     February 8, 2020 9:38:25 AM JST     Success   
Updating GiHome version[db19c]                                           February 8, 2020 9:38:25 AM JST     February 8, 2020 9:39:18 AM JST     Success   
Update System version[db19c]                                             February 8, 2020 9:39:37 AM JST     February 8, 2020 9:39:37 AM JST     Success 
```

## 事前チェック (DB Patch)
Systemパッチがあたったら、DBパッチをあてます。まずは事前チェックから

チェック方法はSystemパッチと同じですが、以下の場所にあるパッチに対して行います。
ベア・メタル、VMおよびExadata > DBシステム > DBシステムの詳細 > データベース詳細 > パッチ

実行中にサーバにログインして、dbcliでジョブの状態を確認します。"DB Home Prechecks"ジョブが実行されるようです。

```
# dbcli list-jobs

ID                                       Description                                                                 Created                             Status    
---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ----------
　 1def8fb7-c8bd-497e-aa73-562524dfd3f8     Provisioning service creation                                               February 6, 2020 3:49:07 AM JST     Success   
　 b8a7cafc-9dc1-4ed8-acc2-7627b30efd52     SSH keys update                                                             February 6, 2020 4:43:34 AM JST     Success   
　 9d56ab83-bb17-4d73-8fbe-30872f7fb084     SSH key delete                                                              February 6, 2020 4:45:26 AM JST     Success   
　 6ecb041c-a702-45c8-ae1c-214d00d81070     Authentication key update for DCS_ADMIN                                     February 6, 2020 5:11:48 AM JST     Success   
　 f3521372-ce56-4af6-811c-83e720079121     Server Patching Prechecks                                                   February 7, 2020 2:20:17 AM JST     Success   
　 b2a0b254-6846-430a-be4a-d0c8937c234a     Server Patching                                                             February 8, 2020 8:49:43 AM JST     Success   
★ 48537e1b-5de2-49fc-8755-093054986f6a     DB Home Prechecks                                                           February 8, 2020 10:13:36 AM JST    Running 

# dbcli describe-job -i 48537e1b-5de2-49fc-8755-093054986f6a 

Job details                                                      
----------------------------------------------------------------
                     ID:  48537e1b-5de2-49fc-8755-093054986f6a
            Description:  DB Home Prechecks
                 Status:  Success
                Created:  February 8, 2020 10:13:36 AM JST
                Message:  

Task Name                                                                Start Time                          End Time                            Status    
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Create Patching Repository Directories[db19c]                            February 8, 2020 10:13:37 AM JST    February 8, 2020 10:13:37 AM JST    Success   
Download latest patch metadata[db19c]                                    February 8, 2020 10:13:37 AM JST    February 8, 2020 10:13:57 AM JST    Success   
checking GiHome version[db19c]                                           February 8, 2020 10:13:57 AM JST    February 8, 2020 10:15:51 AM JST    Success   
Update System version[db19c]                                             February 8, 2020 10:15:51 AM JST    February 8, 2020 10:15:51 AM JST    Success   
Update Patching Repository[db19c]                                        February 8, 2020 10:15:51 AM JST    February 8, 2020 10:18:24 AM JST    Success   
Validating dbHome available space[db19c]                                 February 8, 2020 10:18:24 AM JST    February 8, 2020 10:18:24 AM JST    Success   
Opatch updation[db19c]                                                   February 8, 2020 10:18:25 AM JST    February 8, 2020 10:18:31 AM JST    Success   
Patch conflict check[db19c]                                              February 8, 2020 10:18:31 AM JST    February 8, 2020 10:24:12 AM JST    Success   

```

## パッチ適用 (DB Patch)
事前チェックが問題なく完了したら、実際に適用します。

実行中にサーバにログインして、dbcliでジョブの状態を確認します。"DB Home Patching"が実行されるようです。

```
# dbcli list-jobs

ID                                       Description                                                                 Created                             Status    
---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ----------
　 1def8fb7-c8bd-497e-aa73-562524dfd3f8     Provisioning service creation                                               February 6, 2020 3:49:07 AM JST     Success   
　 b8a7cafc-9dc1-4ed8-acc2-7627b30efd52     SSH keys update                                                             February 6, 2020 4:43:34 AM JST     Success   
　 9d56ab83-bb17-4d73-8fbe-30872f7fb084     SSH key delete                                                              February 6, 2020 4:45:26 AM JST     Success   
　 6ecb041c-a702-45c8-ae1c-214d00d81070     Authentication key update for DCS_ADMIN                                     February 6, 2020 5:11:48 AM JST     Success   
　 f3521372-ce56-4af6-811c-83e720079121     Server Patching Prechecks                                                   February 7, 2020 2:20:17 AM JST     Success   
　 b2a0b254-6846-430a-be4a-d0c8937c234a     Server Patching                                                             February 8, 2020 8:49:43 AM JST     Success   
　 48537e1b-5de2-49fc-8755-093054986f6a     DB Home Prechecks                                                           February 8, 2020 10:13:36 AM JST    Success   
★ 2963c7d0-bfa0-4535-bd74-7a32c8a5f31d     DB Home Patching: Home Id is e2019f7a-9010-4037-a02e-e35800e17297           February 8, 2020 10:27:11 AM JST    Running 

# dbcli describe-job -i 2963c7d0-bfa0-4535-bd74-7a32c8a5f31d 

Job details                                                      
----------------------------------------------------------------
                     ID:  2963c7d0-bfa0-4535-bd74-7a32c8a5f31d
            Description:  DB Home Patching: Home Id is e2019f7a-9010-4037-a02e-e35800e17297
                 Status:  Success
                Created:  February 8, 2020 10:27:11 AM JST
                Message:  

Task Name                                                                Start Time                          End Time                            Status    
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Create Patching Repository Directories[db19c]                            February 8, 2020 10:27:12 AM JST    February 8, 2020 10:27:12 AM JST    Success   
Download latest patch metadata[db19c]                                    February 8, 2020 10:27:12 AM JST    February 8, 2020 10:27:34 AM JST    Success   
checking GiHome version[db19c]                                           February 8, 2020 10:27:34 AM JST    February 8, 2020 10:29:16 AM JST    Success   
Update System version[db19c]                                             February 8, 2020 10:29:16 AM JST    February 8, 2020 10:29:16 AM JST    Success   
Update Patching Repository[db19c]                                        February 8, 2020 10:29:16 AM JST    February 8, 2020 10:31:28 AM JST    Success   
Validating dbHome available space[db19c]                                 February 8, 2020 10:31:28 AM JST    February 8, 2020 10:31:28 AM JST    Success   
Opatch updation[db19c]                                                   February 8, 2020 10:31:29 AM JST    February 8, 2020 10:31:34 AM JST    Success   
Patch conflict check[db19c]                                              February 8, 2020 10:31:34 AM JST    February 8, 2020 10:37:59 AM JST    Success   
db upgrade  to version [db19c]                                           February 8, 2020 10:37:59 AM JST    February 8, 2020 11:34:17 AM JST    Success   
SqlPatch upgrade                                                         February 8, 2020 11:34:18 AM JST    February 8, 2020 11:38:59 AM JST    Success   
updating the Database version                                            February 8, 2020 11:40:01 AM JST    February 8, 2020 11:41:47 AM JST    Success   

```

# パッチの適用結果
以下のようにパッチがあたりました。

```
(grid)$ $ORACLE_HOME/OPatch/opatch lspatches
30700030;ACFS Interim patch for 30700030
30655595;TOMCAT RELEASE UPDATE 19.0.0.0.0 (30655595)
30557433;Database Release Update : 19.6.0.0.200114 (30557433)
30489227;OCW RELEASE UPDATE 19.6.0.0.0 (30489227)

OPatch succeeded.

(oracle)$ $ORACLE_HOME/OPatch/opatch lspatches
30423135;REINSTATE IS FAILING POST APPLYING 19C OCT19 PATCHES
30432118;MERGE REQUEST ON TOP OF 19.0.0.0.0 FOR BUGS 28852325 29997937
30413137;ORA-00600  INTERNAL ERROR CODE, ARGUMENTS  [2006]
30557433;Database Release Update : 19.6.0.0.200114 (30557433)
30489227;OCW RELEASE UPDATE 19.6.0.0.0 (30489227)
30128191;OJVM RELEASE UPDATE: 19.5.0.0.191015 (30128191)

OPatch succeeded.

SQL> select PATCH_ID,PATCH_TYPE,ACTION,STATUS,DESCRIPTION from dba_registry_sqlpatch;
  PATCH_ID PATCH_TYPE ACTION          STATUS                    DESCRIPTION
---------- ---------- --------------- ------------------------- ----------------------------------------------------------------------------------------------------
  30128191 INTERIM    APPLY           SUCCESS                   OJVM RELEASE UPDATE: 19.5.0.0.191015 (30128191)
  30125133 RU         APPLY           SUCCESS                   Database Release Update : 19.5.0.0.191015 (30125133)
  30557433 RU         APPLY           SUCCESS                   Database Release Update : 19.6.0.0.200114 (30557433)
```



### まとめ
パッチ適用はまぁまぁ時間がかかる(今回の場合、systemパッチで50分くらい、DBパッチが1時間20分くらい)ので、裏でなにが実行されているか不安になったりします。その場合は、サーバにログインして以下を見てみるとよいと思います。

・ dbcli list-jobs & dbcli describe-job
　→ Running状態かどうか、実行中のTASKは何か
・ pstreeでdcs-agentの子プロセスとして実行されているコマンドの確認
　→ 実行されているコマンド自身のログを見る (OPatchとか)
・dcs-agent-debug.logで実行されているコマンドの詳細(引数とか)を確認する

※dbcliで確認できる(サーバ側で実行されている)ジョブ以外にも、クラウド管理側でも何かしら処理しているようで、dbcliで見るとジョブが完了しているようでも、コンソール上で成功になるまで10～20分くらい時間がかかることもありました