[Oracle Database] Standard Edition High Availabiltyを試してみた

# はじめに

[Standard Edition High Availability Released - See What's New](https://blogs.oracle.com/maa/standard-edition-high-availability-officially-released)のブログでアナウンスされていたように、19.7からStandard EditionのHigh Availability構成がサポートされるようになった。19cからSERACが廃止されたため、これはうれしいエンハンスメント。

なので、さっそく試してみた。

Oracle Cloud でも使えるようになってほしいな。。

# 事前準備


1. Grid Infrastructure 19.7をインストールする
2. Oracle Database 19.3のインストールメディア(zipファイル)をダウンロードして、ORACLE_HOMEディレクトリに展開する
3. RU 19.7のzipファイルをダウンロードして作業ディレクトリに展開する

あとは、[Installing Standard Edition High Availability Database Software on Local File System](https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/installing-seha-on-local-file-system.html#GUID-F81473AF-75A2-421B-B8E2-B3EE1D4D103F)を見ながらインストールする

# ソフトウェアインストール

- インストーラを起動

runInstaller.shの引数にappplyRUを指定し、RU19.7を展開したディレクトリを指定する。
(こんな便利オプションあったのですね。)

```CONSOLE
(node_1)# su - oracle
(node_1)$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
(node_1)$ mkdir -p $ORACLE_HOME
(node_1)$ unzip -q /path/to/19.3_installer.zip -d $ORACLE_HOME
(node_1)$ unzip -q /path/to/19.7_RU.zip -d /path/to/work_directory/
(node_1)$ cd $ORACLE_HOME
(node_1)$ ./runInstaller -applyRU /path/to/work_directory/patch_ID
Preparing the home to patch...
Applying the patch /u01/app/installer/DB/30899722/...
```

- 「Set Up Software Only」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/fedb80d1-2b44-1cb9-b0a8-680c42836566.png)

- 「Single instance database configuration」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/507c1e83-c7e4-c365-70c9-d4dc2e925f5c.png)

- 「Standard Edition 2」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/fe7a308f-6f8a-f290-3ee0-b02f67a15461.png)

- デフォルトのままNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/25e958bf-6290-d26f-8c1c-44ad76142c37.png)

- デフォルトのままNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/a22ddb20-9ed6-09eb-ff7c-c5fffe3e0e79.png)

- デフォルトのままNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/a9ef5dbb-a6e5-69b3-7dee-c8adf82c751b.png)

- この環境ではスワップサイズの警告がでたが無視するよう設定してNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/b6808cd8-cab5-2382-3df4-3267b10a147f.png)

- 「Install」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/e7310094-f563-2660-dc5a-23bd6f1b2911.png)

- インストールが開始される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/93ed161d-ae02-d0a0-fd4e-8f4126a7b323.png)

- root.shを実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/0c0a7380-e47b-d101-0c0a-cbfbc0bee7fa.png)

```CONSOLE
(node_1)# /u01/app/oracle/product/19.0.0.0/dbhome_1/root.sh
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/19.0.0.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Oracle Trace File Analyzer (TFA - Standalone Mode) is available at :
    /u01/app/oracle/product/19.0.0.0/dbhome_1/bin/tfactl
-
Note :
1. tfactl will use TFA Service if that service is running and user has been granted access
2. tfactl will configure TFA Standalone Mode only if user has no access to TFA Service or TFA is not installed

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/106c2e42-3cf7-3155-2de2-892a6b43c229.png)

```CONSOLE
(node_1)$ $ORACLE_HOME/OPatch/opatch lspatches
30894985;OCW RELEASE UPDATE 19.7.0.0.0 (30894985)
30869156;Database Release Update : 19.7.0.0.200414 (30869156)

OPatch succeeded.
```

# ノード追加

- ノード2で、インストールディレクトリを作成する

```CONSOLE
(node_2)# mkdir /u01/app/oracle
(node_2)# chown oracle.oinstall /u01/app/oracle
```

- ノード1から、ノードを追加する

ドキュメントに明示的に記載がなかったが、SSHの透過設定が必要な気がしたので一応先に設定。それから、addnode.shを実行

```CONSOLE
(node_1)# su - oracle
(node_1)# ssh node_2 hostname
node_2  #追加するノードに、パスワード入力を求められずにログインできることの確認
(node_1)$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
(node_1)$ $ORACLE_HOME/addnode/addnode.sh -silent CLUSTER_NEW_NODES=node_2
[WARNING] [INS-13014] Target environment does not meet some optional requirements.
   CAUSE: Some of the optional prerequisites are not met. See logs for details. /u01/app/oraInventory/logs/addNodeActions2020-05-09_07-55-29AM.log
   ACTION: Identify the list of failed prerequisite checks from the log: /u01/app/oraInventory/logs/addNodeActions2020-05-09_07-55-29AM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the 
# → SWAPが足りてないため、警告が出力されてた
prerequisites and fix it manually.

Prepare Configuration in progress.

Prepare Configuration successful.
..................................................   7% Done.

Copy Files to Remote Nodes in progress.
..................................................   12% Done.
..................................................   18% Done.
..............................
Copy Files to Remote Nodes successful.
You can find the log of this install session at:
 /u01/app/oraInventory/logs/addNodeActions2020-05-09_07-55-29AM.log

Instantiate files in progress.

Instantiate files successful.
..................................................   52% Done.

Saving cluster inventory in progress.
..................................................   89% Done.

Saving cluster inventory successful.
The Cluster Node Addition of /u01/app/oracle/product/19.0.0.0/dbhome_1 was successful.
Please check '/u01/app/oraInventory/logs/silentInstall2020-05-09_07-55-29AM.log' for more details.

Setup Oracle Base in progress.

Setup Oracle Base successful.
..................................................   96% Done.

As a root user, execute the following script(s):
        1. /u01/app/oracle/product/19.0.0.0/dbhome_1/root.sh

Execute /u01/app/oracle/product/19.0.0.0/dbhome_1/root.sh on the following nodes:
[node_2]


Successfully Setup Software with warning(s).
..................................................   100% Done.

# rootユーザからroot.shを実行
(node_2)$ exit
(node_2)# /u01/app/oracle/product/19.0.0.0/dbhome_1/root.sh
Check /u01/app/oracle/product/19.0.0.0/dbhome_1/install/root_node_2_2020-05-09_08-05-52-791477457.log for the output of root script

(node_2)# su - oracle
(node_2)$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
(node_2)$ $ORACLE_HOME/OPatch/opatch lspatches
30894985;OCW RELEASE UPDATE 19.7.0.0.0 (30894985)
30869156;Database Release Update : 19.7.0.0.200414 (30869156)

OPatch succeeded.

```

# データベースの作成

- 環境変数の設定
- 
```CONSOLLE
(node_1)# su - oracle
(node_1)$ vi .bashrc
// 以下を追記
export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
export PATH=${ORACLE_HOME}/bin:${PATH}

(node_1)$ . .bashrc

(node_2)# su - oracle
(node_2)$ vi .bashrc
// 以下を追記
export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
export PATH=${ORACLE_HOME}/bin:${PATH}

```

- DBCAを起動

```
(node_1) $ dbca
```
- 「Create a database」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/2d94c566-a5d3-b3eb-379c-05b980e54477.png)

- ここでは「Advanced Configuration」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/b8441f79-44dc-52cc-b2b8-bc915dbfa5af.png)

- Database typeに、「Oracle single instance database」を選択
- ここでは、templateとして「Custom Database」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/0082baa1-6cfa-6662-bc69-1672a93acab8.png)

- データベース名を指定
- ここでは、CDBを選択してPDB名を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/93c9b87f-ede7-b4a5-531a-94fccfcbd9f3.png)

- 「Use following for database storage attributes」を選択して、ASMに格納されるようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/c3c8ac05-9b48-0e7d-d1eb-d45327febb08.png)

- ここでは、リカバリエリアとアーカイブログモードも設定せずにDB作成した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/9f986d00-b486-0862-76fd-56e38681d215.png)

- GI上に作成されているリスナーが指定されていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/a2108027-77e2-ba22-cc20-cd52528dee4b.png)

- ここでは、データベースオプションはすべて外して作成した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/e23b1d25-c7f9-7ef9-8f60-5846df95eeaa.png)

- SGA/PGAサイズなどを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/6df544e9-fbbf-e4e0-1197-3a4940c0cabf.png)

- ここでは、EM Expressを有効化するように指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/4aebc2db-779d-b190-b693-05d89473bdc8.png)

- sys/systemパスワードを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/04ad52ff-67bf-4282-279f-752ddbce1f56.png)

- ここでは、「Generate database creation script」を追加でチェックした
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/93be0a2c-f774-7e37-5eac-c9ff3bb7c6a2.png)

- 「Finish」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/a65f5b78-66d0-cdd2-a2bd-598eb7745962.png)

- DBの作成が開始される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/4f853d9a-6ce8-4c8a-3b47-b9cf215b7230.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/3f439582-656d-365b-36f9-da92d311993d.png)


```CONSOLE
(node_1)# su - grid
(node_1)$ crsctl stat res -w "TYPE = ora.database.type" -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
      1        ONLINE  ONLINE       node_1                   Open,HOME=/u01/app/o
                                                             racle/product/19.0.0
                                                             .0/dbhome_1,STABLE
--------------------------------------------------------------------------------
```

# 事後設定

- local_listenerパラメータの調整

DBCAでDB作成時、local_listener初期化パラメータが静的に登録されている。[ドキュメント](https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/creating-and-configuring-an-oracle-database.html#GUID-78BFE2F9-1698-499D-8E3A-F43FE2DAC462)にあるように、この設定をリセットしてGIによって動的に登録されるように変更する

```
(node_1)$ export ORACLE_SID=orcl
(node_1)$ sqlplus / as sysdba

(node_1)SQL> show parameter local_listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      LISTENER_ORCL
→ LISTENER_<DB名>がセットされているのでクリアする

(node_1)SQL> alter system reset local_listener;

(node_1)SQL> show parameter remote_listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_listener                      string       node_1-scan.xxx.xxx.oraclevcn.com:1521
→ remote_listenerには、GIが動的にscanを設定している

(node_1)SQL> exit
(node_1)$ srvctl stop database
(node_1)$ srvctl start database -db orcl
(node_1)$ sqlplus / as sysdba

(node_1)SQL> show parameter local_listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string       (ADDRESS=(PROTOCOL=TCP)(HOST=
                                                 10.0.10.16)(PORT=1521))
→ GI Agentによって自動登録されていること
```

- SEHAの有効化

データベース設定を修正して、2号機にF/Oできるようにする

```
(node_1)$ srvctl modify database -db orcl -node node_1,node_2 # node_2を追加する
(node_1)$ srvctl config database -db orcl 
///
Configured nodes: node_1,node_2 # 追加されていること
///
```

- 監査ログ用ディレクトリの作成 (必要な気がしたので)
2号機で、監査ログ用のディレクトリを作成しておく

```CONSOLE
(node_2)# su - oracle
(node_2)$ mkdir -p /u01/app/oracle/admin/<DB名>/adump
(node_2)$ mkdir -p /u01/app/oracle/audit 
```

- パスワードファイルのコピー (必要な気がしたので)

パスワードファイルはローカルに作成されていたので、コピーする

```
(node_2)# su - oracle
(node_2)$ cd $ORACLE_HOME/dbs
(node_2)$ scp -p node_1:$PWD/orapw* .

```
- Enterprise Manager Expressの接続設定

DB作成時にEM Expressの設定もしたため、接続確認する。EM Expressへは、いくつか設定を修正しないと接続できなかった。

まず、OSパーミッション設定によりgridユーザがwalletを参照できなかったので、これを修正する

```CONSOLE
(node_1)# ls -l /u01/app/oracle/product/19.0.0.0/dbhome_1/admin/orcl/xdb_wallet
total 8
-rw------- 1 oracle asmadmin 3864 May  9 09:03 cwallet.sso
-rw------- 1 oracle asmadmin 3819 May  9 09:03 ewallet.p12
→ 640なので、gridが見れない

(node_1)# chmod 640 /u01/app/oracle/product/19.0.0.0/dbhome_1/admin/orcl/xdb_wallet/*wallet*

2号機にF/Oしたときにもwalletが必要なのでコピーしておく
(node_2)# su - oracle
(node_2)$ mkdir -p /u01/app/oracle/product/19.0.0.0/dbhome_1/admin/orcl/xdb_wallet/
(node_2)$ cd /u01/app/oracle/product/19.0.0.0/dbhome_1/admin/orcl/xdb_wallet/
(node_2)$ scp -p node_1:$PWD/* .
(node_2)$ ll
total 8
-rw-r----- 1 oracle oinstall 3864 May  9 09:03 cwallet.sso
-rw-r----- 1 oracle oinstall 3819 May  9 09:03 ewallet.p12
(node_2)$ exit
(node_2)$ chgrp asmadmin /u01/app/oracle/product/19.0.0.0/dbhome_1/admin/orcl/xdb_wallet/*wallet*
(node_2)$ # ll /u01/app/oracle/product/19.0.0.0/dbhome_1/admin/orcl/xdb_wallet/
total 8
-rw-r----- 1 oracle asmadmin 3864 May  9 09:03 cwallet.sso
-rw-r----- 1 oracle asmadmin 3819 May  9 09:03 ewallet.p12
```

単一ポートから、各CDB/PDBに接続できるようにGlobalPortを有効にしてあげる

```
SQL> exec dbms_xdb_config.SetGlobalPortEnabled(TRUE)
```

つながった
ただ、Standard Editionだとパフォーマンス系の情報がほとんどみれないため、意味ないかもしれない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456818/63fce4ee-af5e-bccb-8798-9bbe771e5f11.png)

# 正常系の動作確認

- stop/startで2号機で起動する

```CONSOLE
(node_1)$ srvctl stop database -db orcl
(node_1)$ srvctl start database -db orcl -node node_2
(node_1)$ /u01/app/19.0.0.0/grid/bin/crsctl stat res -w "TYPE = ora.database.type" -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
      1        ONLINE  ONLINE       node_2                   Open,HOME=/u01/app/o
                                                             racle/product/19.0.0
                                                             .0/dbhome_1,STABLE
--------------------------------------------------------------------------------

→ 2号機で起動した
(node_1)$ srvctl stop database -db orcl
(node_1)$ srvctl start database -db orcl -node node_1
(node_1)$ /u01/app/19.0.0.0/grid/bin/crsctl stat res -w "TYPE = ora.database.type" -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
      1        ONLINE  ONLINE       node_1                   Open,HOME=/u01/app/o
                                                             racle/product/19.0.0
                                                             .0/dbhome_1,STABLE
--------------------------------------------------------------------------------

```

- relocateする

relocateコマンドが使えるが、RAC Oneのように、一時的にRAC構成になってから片方停止するわけではなく、完全停止してから起動する動きだった。ワンコマンドで実行できること以外、stop/startとほぼ同じかな

```CONSOLE
(node_1)$ srvctl relocate database -db orcl -node node_2
(node_1)$ /u01/app/19.0.0.0/grid/bin/crsctl stat res -w "TYPE = ora.database.type" -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
      1        ONLINE  ONLINE       node_2                   Open,HOME=/u01/app/o
                                                             racle/product/19.0.0
                                                             .0/dbhome_1,STABLE
--------------------------------------------------------------------------------

(node_1)$ srvctl relocate database -db orcl -node node_1

```

# F/O確認

F/O動作を確認してみる

- クラスタリソースの確認

まず、F/O関連の属性値は以下のように設定されている
CHECK_INTERVALは900で、RESTART_ATTEMPTSは2。CHECK_INTERVALが900になってるが、インスタンス障害はほぼ即時に検知/再起動していた

```
(node_1)$ /u01/app/19.0.0.0/grid/bin/crsctl stat res ora.orcl.db -p
…
AUTO_START=restore
…
CHECK_INTERVAL=900
…
DATABASE_TYPE=SINGLE
…
RESTART_ATTEMPTS=2
```

RESTART_ATTEMPTSが2なので、3回連続で起動に失敗すると対向ノードにF/Oするはず

```
(node_1)$ date; pkill -f ora_smon
→ 起動してくるのを待つ。node_1で再起動した。
(node_1)$ date; pkill -f ora_smon
→ 起動してくるのを待つ。node_1で再起動した。
(node_1)$ date; pkill -f ora_smon
→ node_2側で起動を開始したことを確認
Sat May  9 15:31:40 JST 2020
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
      1        ONLINE  OFFLINE      node_2                   Instance Shutdown,ST
                                                             ARTING
--------------------------------------------------------------------------------
…
Sat May  9 15:32:16 JST 2020
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
      1        ONLINE  ONLINE       node_2                   Open,HOME=/u01/app/o
                                                             racle/product/19.0.0
                                                             .0/dbhome_1,STABLE
--------------------------------------------------------------------------------

→ node_2にF/O完了

```

期待どおりの動きになっていた。