[Oracle] RACをRAC One Nodeに変換する

## やりたいこと
Oracle Linux 7.8 / Oracle Database 19c (RAC)

RAC環境からRAC One Nodeに変換する方法。

行う機会は少ないかと思いますが、RACをRAC One Nodeにしたり、その逆は意外に簡単です。
どちらかというとRAC One Nodeを、RACにすることの方が多いかもしれませんね。



## 手順

作業の流れ
1. インスタンス2の停止
2. インスタンス2の削除
3. サービスの作成
4. DBタイプの変換（RACからRACOneNodeへ）



■　現在のDBタイプを確認する
srvctl config database -db ＜DB名＞

16行目のTypeが表示される行に、「RAC」または「RACOneNode」とDBのタイプが表示されます


```
[oracle@node1 ~]$ srvctl config database -db racdb
Database unique name: racdb
Database name: racdb
Oracle home: /oracle/db/product/19.0.0/db
Oracle user: oracle
Spfile: +DATA/RACDB/PARAMETERFILE/spfile.273.1142946957
Password file: +DATA/RACDB/PASSWORD/pwdracdb.258.1142945401
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools:
Disk Groups: DATA
Mount point paths:
Services: racone
Type: RAC  　　　　　　　　★Typeの行に、RAC または RACOneNode とDBのタイプが表示される
Start concurrency:
Stop concurrency:
OSDBA group: dba
OSOPER group: oper
Database instances: racdb1
Configured nodes: node1
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0
Default network number for database services:
Database is administrator managed
```


■　現在のクラスタウェアリソース状況を確認
crsctl stat res -t
（oracleユーザで実施する場合は、フルパスで実行）

2つのインスタンスからなるRACデータベースであることを確認します。
これを1つのインスタンスからなるRACOneNodeに変換していきます。

```
[oracle@node1 ~]$ /oracle/product/19.0.0/grid/bin/crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
～　省略　～
ora.racdb.db
      1        ONLINE  ONLINE       node1                    Open,HOME=/oracle/db
                                                             /product/19.0.0/db,S
                                                             TABLE
      2        ONLINE  ONLINE       node2                    Open,HOME=/oracle/db
                                                             /product/19.0.0/db,S
                                                             TABLE
ora.scan1.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       node2                    STABLE
--------------------------------------------------------------------------------
```

■　インスタンス２の停止
srvctl stop instance -db ＜DB名＞ -instance ＜インスタンス名＞

```
[oracle@node1 ~]$ srvctl stop instance -db racdb -instance racdb2
[oracle@node1 ~]$
[oracle@node1 ~]$ /oracle/product/19.0.0/grid/bin/crsctl stat res -t
～　省略　～
ora.racdb.db
      1        ONLINE  ONLINE       node1                    Open,HOME=/oracle/db
                                                             /product/19.0.0/db,S
                                                             TABLE
      2        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
ora.scan1.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       node2                    STABLE
--------------------------------------------------------------------------------
[oracle@node1 ~]$
```



■　インスタンス２の削除（RACからインスタンス２を削除して、インスタンス１のみにする）
srvctl remove instance -db ＜DB名＞ -instance ＜インスタンス名＞
 ⇒確認が求められるため、プロンプトで y を入力
```
[oracle@node1 ~]$ srvctl remove instance -db racdb -instance racdb2
Remove instance from the database racdb? (y/[n]) y
[oracle@node1 ~]$ /oracle/product/19.0.0/grid/bin/crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
～　省略　～
ora.racdb.db
      1        ONLINE  ONLINE       node1                    Open,HOME=/oracle/db
                                                             /product/19.0.0/db,S
                                                             TABLE
ora.scan1.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       node2                    STABLE
--------------------------------------------------------------------------------
```


■　サービスを作成
srvctl add service -db ＜DB名＞ -service ＜適当なサービス名＞ -preferred ＜インスタンス１の名前＞

サービスが存在しないと変換時にエラーがでるため、事前にサービスを作成します

```
[oracle@node1 ~]$ srvctl add service -db racdb -service racone -preferred racdb1
[oracle@node1 ~]$ /oracle/product/19.0.0/grid/bin/crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
～　省略　～
ora.racdb.db
      1        ONLINE  ONLINE       node1                    Open,HOME=/oracle/db
                                                             /product/19.0.0/db,S
                                                             TABLE
ora.racdb.racone.svc
      1        OFFLINE OFFLINE                               STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       node2                    STABLE
--------------------------------------------------------------------------------
```



■　DBタイプの変換
srvctl convert database -database ＜DB名＞ -instance ＜インスタンス１の名前＞ -dbtype raconenode

```
[oracle@node1 ~]$ srvctl convert database -database racdb -instance racdb1 -dbtype raconenode
[oracle@node1 ~]$ /oracle/product/19.0.0/grid/bin/crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
～　省略　～
ora.racdb.db
      1        ONLINE  ONLINE       node1                    Open,HOME=/oracle/db
                                                             /product/19.0.0/db,S
                                                             TABLE
ora.racdb.racone.svc
      1        OFFLINE OFFLINE                               STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       node2                    STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       node2                    STABLE
--------------------------------------------------------------------------------

[oracle@node1 ~]$ srvctl config database -db racdb
Database unique name: racdb
Database name: racdb
Oracle home: /oracle/db/product/19.0.0/db
Oracle user: oracle
Spfile: +DATA/RACDB/PARAMETERFILE/spfile.273.1142946957
Password file: +DATA/RACDB/PASSWORD/pwdracdb.258.1142945401
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools:
Disk Groups: DATA
Mount point paths:
Services: racone
Type: RACOneNode　　　　　　　　　　　　　★TypeがRACOneNodeに変わった
Online relocation timeout: 30
Instance name prefix: racdb1
Candidate servers: node1
OSDBA group: dba
OSOPER group: oper
Database instances: racdb1_1
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0




```