Oracle RAC 19cのRUパッチ適用手順|OPatchAutoでローリング適用する方法

Oracleインストール

Oracle RAC環境へRelease Update(RU)を適用する場合、シングル・インスタンス環境とはパッチ適用方法が異なります。

Oracle RACでは、Oracle Grid InfrastructureとOracle Databaseの両方が存在するため、一般的にはOPatchAuto(opatchauto)を使用してパッチを適用します。

OPatchAutoを使用すると、Oracle ClusterwareやOracle RACインスタンスの停止・起動、GridホームやDatabaseホームへのパッチ適用など、RAC環境に必要な処理を自動的に実行できます。Oracle公式でも、Grid InfrastructureおよびRAC環境のパッチ適用にOPatchAutoが使用されています。

本記事では、Oracle Database 19cの2ノードRAC環境へRUをローリング適用する基本的な流れを解説します。

Oracle Database 19cの個別パッチ適用手順|OPatch applyとnapplyの違い
Oracle Databaseで特定の不具合が発生した場合、Release Update(RU)の公開を待たずに「個別パッチ」を適用することがあります。個別パッチは、特定の不具合、Oracle Databaseのバージョン、OS・プラットフ…

本記事の対象環境

本記事では、次のような一般的なOracle RAC環境を想定します。

Oracle Database          :19c
Oracle Grid Infrastructure:19c
構成                     :2ノードRAC
OS                       :Oracle LinuxなどのLinux
Gridホーム               :各ノードのローカル領域
Databaseホーム           :各ノードのローカル領域
データベース             :CDB+PDB
ストレージ               :ASM
パッチ                   :Grid Infrastructure Release Update
適用方式                 :インプレース

ノード構成は次のとおりです。

                Oracle RAC

        ┌───────────────┐
        │     ASM共有Disk      │
        └───────┬───────┘
                │
        ┌───────┴───────┐
        │                       │
 ┌─────────────┐       ┌─────────────┐
 │    NODE1     │       │    NODE2     │
 │              │       │              │
 │ Grid Home    │       │ Grid Home    │
 │ DB Home      │       │ DB Home      │
 │ ORCL1        │       │ ORCL2        │
 └─────────────┘       └─────────────┘

共有Oracleホーム、ACFSを使用した構成、Exadata、RAC One Nodeなどでは手順が異なる場合があります。

Oracle公式でも、GridホームやRACホームが共有されている場合、ACFSを使用している場合など、構成によってパッチ適用方法が異なることが説明されています。実際の作業では、対象RUのREADMEおよびOracle Supportの「Supplemental Readme – Grid Infrastructure Release Update」を必ず確認してください。


RACではOPatchAutoを使用する

シングル・インスタンス環境では、次のようにOPatchを使用しました。

シングル環境

opatch apply
     ↓
Databaseホームへパッチ適用
     ↓
datapatch

一方、RAC環境では一般的にOPatchAutoを使用します。

RAC環境

opatchauto apply
       │
       ├─ Clusterwareを制御
       ├─ RACインスタンスを制御
       ├─ Gridホームへパッチ適用
       ├─ Databaseホームへパッチ適用
       └─ 必要なSQLパッチ処理

OPatchAutoはRAC/GI構成情報を取得し、その環境に必要なパッチ手順を自動的に組み立てて実行します。

そのため通常のGI RU適用で、

opatch apply

をGridホームに対して直接実行するのではなく、対象RUのREADMEに従って、

opatchauto apply

を使用します。


RACのローリングパッチとは

Oracle RACの大きな特徴が、ローリング方式でパッチを適用できることです。

2ノードRACの場合、基本的には次のように1ノードずつ適用します。

【通常状態】

NODE1                    NODE2
ORCL1:OPEN              ORCL2:OPEN
   │                        │
   └──── RAC Database ─────┘


            ↓


【NODE1へパッチ適用】

NODE1                    NODE2
ORCL1:停止              ORCL2:OPEN
パッチ適用中              業務継続
                           ↑
                     接続を処理


            ↓


【NODE1完了】

NODE1                    NODE2
ORCL1:OPEN              ORCL2:OPEN
新RU                     旧RU


            ↓


【NODE2へパッチ適用】

NODE1                    NODE2
ORCL1:OPEN              ORCL2:停止
新RU                     パッチ適用中
   ↑
 業務継続


            ↓


【完了】

NODE1                    NODE2
ORCL1:OPEN              ORCL2:OPEN
新RU                     新RU

Oracle Grid Infrastructureのパッチは、対応しているパッチであればローリング方式で1ノードずつ適用できます。Oracle公式手順でも、最初のノードへの適用が完了してから、次のノードへ順番に適用する方法が示されています。

複数ノードで同時にopatchautoを実行してはいけません。

OPatchAutoは各ノードで順番に実行します。


ローリングパッチ=完全無停止ではない

ここは誤解しやすいポイントです。

ローリング適用ではクラスタ全体を同時停止しませんが、パッチ対象ノード上のRACインスタンスやClusterwareは停止する場合があります。

つまり、

ローリングパッチ

≠ 全プロセスが一度も停止しない

○ 1ノードずつ停止して
   他ノードでサービスを継続する

という意味です。

アプリケーションから見て影響を小さくするには、RACサービス、接続時フェイルオーバー、FANなどが正しく構成されている必要があります。

なお、Oracle Database 19c RU 19.16以降では、Grid Infrastructureのパッチ適用中もRAC Databaseインスタンスを稼働させるZero-Downtime Oracle Grid Infrastructure Patchingという機能も提供されています。これは通常のローリングパッチとは別の仕組みです。

本記事では、一般的なOPatchAutoによるローリング適用を扱います。


RACへのRU適用の全体的な流れ

2ノードRACでは、次のように進めます。

GI RUを入手
    ↓
README確認
    ↓
各ホームのOPatch確認・更新
    ↓
現在のパッチ状態を確認
    ↓
opatchauto apply -analyze
    ↓
NODE1
opatchauto apply
    ↓
NODE1正常性確認
    ↓
NODE2
opatchauto apply
    ↓
NODE2正常性確認
    ↓
全ノードのパッチレベル確認
    ↓
DBA_REGISTRY_SQLPATCH確認
    ↓
完了

1.Grid Infrastructure RUを入手する

RAC環境では、My Oracle Supportから対象バージョンのGrid Infrastructure Release Update(GI RU)を入手します。

Oracle Database 19cのRAC環境では、Oracleのプロアクティブ・パッチ方式としてGI Updateが提供されています。

本記事ではパッチ番号を固定せず、

<GI_RU_PATCH_ID>

と記載します。

例:

/u01/stage/patch/<GI_RU_PATCH_ID>

実際には、適用するRUのREADMEに記載されたパッチ番号とディレクトリを使用してください。


2.RUを展開する

パッチ配置用ディレクトリを作成します。

mkdir -p /u01/stage/patch
cd /u01/stage/patch

ダウンロードしたGI RUを展開します。

unzip p<GI_RU_PATCH_ID>_190000_Linux-x86-64.zip

展開されたディレクトリを確認します。

ls -l

例:

/u01/stage/patch/
└── <GI_RU_PATCH_ID>
    ├── README.html
    ├── <Database RU>
    ├── <OCW RU>
    ├── <ACFS RU>
    └── ...

GI RUは複数のサブパッチを含むシステムパッチとして提供されるため、単純なDatabase RUとはディレクトリ構造が異なります。

実際にどのサブパッチがGridホーム・Databaseホームへ適用されるかは、対象RUのREADMEを確認します。


3.OPatchのバージョンを確認する

RACではGridホームとDatabaseホームの両方にOPatchがあります。

例:

Grid Home
/u01/app/19.0.0/grid/OPatch

Database Home
/u01/app/oracle/product/19.0.0/dbhome_1/OPatch

Gridユーザーで確認します。

$GRID_HOME/OPatch/opatch version

Oracleユーザーで確認します。

$ORACLE_HOME/OPatch/opatch version

さらに、すべてのノードで確認します。

NODE1
├─ GRID_HOMEのOPatch
└─ DB_HOMEのOPatch

NODE2
├─ GRID_HOMEのOPatch
└─ DB_HOMEのOPatch

OPatchAutoを使用したマルチノードパッチでは、対象ノードのOracleホームで同じOPatchバージョンを使用してからパッチ適用を開始する必要があります。

必要な最低OPatchバージョンは、対象RUのREADMEを確認してください。


4.現在のクラスタ状態を確認する

パッチ適用前にClusterwareの状態を確認します。

Gridユーザーで実行します。

crsctl check cluster -all

リソース状態を確認します。

crsctl stat res -t

RAC Databaseの状態も確認します。

srvctl status database -d ORCL

例:

Instance ORCL1 is running on node NODE1
Instance ORCL2 is running on node NODE2

PDBを使用している場合は、Database側から状態を確認します。

SELECT inst_id,
       name,
       open_mode
FROM   gv$pdbs
ORDER BY inst_id, con_id;

パッチ開始前にクラスタが正常な状態であることを確認します。


5.現在のパッチ状態を確認する

Gridホームのパッチ状態を確認します。

NODE1:

$GRID_HOME/OPatch/opatch lsinventory

NODE2:

$GRID_HOME/OPatch/opatch lsinventory

Databaseホームについても確認します。

$ORACLE_HOME/OPatch/opatch lsinventory

簡易的に確認する場合は、

$GRID_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lspatches

を使用できます。

Oracle公式のOPatchAuto手順でも、パッチ開始前に全ノードが同じパッチレベルであることを確認するよう説明されています。


6.OPatchAutoのanalyzeを実行する

実際にパッチを適用する前に、-analyzeオプションを使用して事前チェックを実行します。

rootユーザーで実行します。

$GRID_HOME/OPatch/opatchauto apply \
  /u01/stage/patch/<GI_RU_PATCH_ID> \
  -analyze

-analyzeでは実際のファイル変更は行われません。

OPatchAutoが、

・対象Oracleホーム
・パッチ適用可否
・既存パッチとの競合
・必要な前提条件
・パッチ適用時に実行する処理

などを確認します。

Oracle公式でも、実際のパッチ適用前に、

opatchauto apply -analyze

で前提条件を確認する方法が案内されています。

正常な場合は、解析が成功したことを示す結果が表示されます。

問題が検出された場合は、実際のapplyへ進まず、OPatchAutoログを確認します。

特に多いのが既存の個別パッチとの競合です。


7.NODE1へRUを適用する

事前チェックが正常終了したら、最初のノードからRUを適用します。

NODE1へrootユーザーでログインします。

su - root

GridホームのOPatchAutoを使用します。

$GRID_HOME/OPatch/opatchauto apply \
  /u01/stage/patch/<GI_RU_PATCH_ID>

例えばGridホームが、

/u01/app/19.0.0/grid

の場合は次のようになります。

/u01/app/19.0.0/grid/OPatch/opatchauto apply \
  /u01/stage/patch/<GI_RU_PATCH_ID>

Oracle公式のGrid Infrastructure 19cのパッチ適用手順でも、rootユーザーから次の形式で実行する方法が示されています。

Grid_home/OPatch/opatchauto apply <patch_directory>/<patch_ID>

OPatchAutoでは何が行われる?

具体的な処理はパッチや構成によって変わりますが、OPatchAutoはRAC/GIの構成情報を使用して必要な処理を自動的に実行します。

イメージとしては次のようになります。

NODE1

opatchauto apply
      │
      ├─構成情報取得
      │
      ├─対象リソース停止
      │
      ├─NODE1のRACインスタンス停止
      │
      ├─Clusterware関連処理
      │
      ├─Grid Homeへパッチ
      │
      ├─Database Homeへパッチ
      │
      ├─Clusterware起動
      │
      ├─RACインスタンス起動
      │
      └─SQLパッチ処理

これらを手動で1つずつ実行するのではなく、OPatchAutoが環境に応じてオーケストレーションします。


8.NODE1の正常性を確認する

NODE1へのパッチ適用が完了したら、すぐNODE2へ進まず、NODE1が正常にクラスタへ復帰したことを確認します。

crsctl check crs

リソース状態を確認します。

crsctl stat res -t

Database状態を確認します。

srvctl status database -d ORCL

例:

Instance ORCL1 is running on node NODE1
Instance ORCL2 is running on node NODE2

Gridホームのパッチ状態も確認します。

$GRID_HOME/OPatch/opatch lspatches

Databaseホームも確認します。

$ORACLE_HOME/OPatch/opatch lspatches

NODE1への適用が正常に完了し、RACインスタンスがクラスタへ戻ってからNODE2へ進みます。


9.NODE2へRUを適用する

次にNODE2へrootユーザーでログインします。

NODE1と同じコマンドを実行します。

$GRID_HOME/OPatch/opatchauto apply \
  /u01/stage/patch/<GI_RU_PATCH_ID>

処理中は、

NODE1
ORCL1:稼働

NODE2
ORCL2:停止・パッチ適用

という状態になります。

NODE2への適用が正常終了したら、

crsctl check crs
crsctl stat res -t
srvctl status database -d ORCL

を実行します。

Oracle公式手順でも、最初のノードへの適用が完了してから、次のノードへ1台ずつ適用する方法が示されています。

3ノード以上のRACの場合も、

NODE1
 ↓
NODE2
 ↓
NODE3
 ↓
NODE4

のように順番に適用します。


10.全ノードのGrid Infrastructureパッチレベルを確認する

全ノードへのパッチ適用が完了したら、Clusterwareのパッチレベルを確認します。

crsctl query crs softwarepatch NODE1
crsctl query crs softwarepatch NODE2

crsctl query crs softwarepatchは、指定したノードにインストールされているOracle Clusterwareのパッチレベルを確認するコマンドです。

両ノードのパッチレベルがそろっていることを確認します。

NODE1 :Patch Level XXXXXXXX
NODE2 :Patch Level XXXXXXXX

必要に応じて、

crsctl query crs releasepatch

も確認します。

クラスタ内でパッチレベルが不整合な状態になると、Oracle Clusterwareが正常に起動できない場合があります。Oracle公式のCRSエラー情報でも、releasepatchsoftwarepatchでパッチレベルを確認する方法が案内されています。


11.GridホームへのRU適用を確認する

各ノードで確認します。

$GRID_HOME/OPatch/opatch lspatches

詳細を確認する場合は、

$GRID_HOME/OPatch/opatch lsinventory

を実行します。

NODE1とNODE2で同じRUが適用されていることを確認します。

NODE1 Grid Home
    └─ GI RU適用済み

NODE2 Grid Home
    └─ GI RU適用済み

12.DatabaseホームへのRU適用を確認する

Databaseホームについても各ノードで確認します。

$ORACLE_HOME/OPatch/opatch lspatches

または、

$ORACLE_HOME/OPatch/opatch lsinventory

を実行します。

NODE1 Database Home
    └─ Database RU適用済み

NODE2 Database Home
    └─ Database RU適用済み

となっていることを確認します。

Oracle公式のRACパッチ手順でも、OPatchAuto適用後にはOracleホームのインベントリを確認し、パッチが正常に適用されていることを確認する流れになっています。


13.datapatchの結果を確認する

シングル環境では、

opatch apply
      ↓
datapatch -verbose

と手動で実行しました。

OPatchAutoの場合は少し異なります。

OPatchAutoは必要に応じてdatapatchを呼び出し、SQL変更の適用処理も実行します。

Oracle公式のOPatchAutoトラブルシューティング資料でも、OPatchAutoは、

・GI/RACホームへのバイナリ適用
・datapatchを使用したSQL適用

の両方を実行すると説明されています。

そのため、正常にOPatchAutoが完了している場合、通常はシングル環境のように機械的にもう一度datapatch -verboseを実行する必要はありません。

ただし、SQLパッチが正常に適用されたかは必ず確認します。

sqlplus / as sysdba
SET LINESIZE 250
SET PAGESIZE 100

COLUMN action_time FORMAT A30
COLUMN status FORMAT A15
COLUMN description FORMAT A90

SELECT patch_id,
       patch_type,
       action,
       status,
       action_time,
       description
FROM   dba_registry_sqlpatch
ORDER BY action_time;

今回のDatabase RUについて、

PATCH_TYPE :RU
ACTION     :APPLY
STATUS     :SUCCESS

になっていることを確認します。


RACでは最初のノードでdatapatchが実質何もしない場合がある

OPatchAutoによるローリング適用では、少し特殊な動作があります。

Oracle公式資料では、複数ノードへOPatchAutoを順番に実行した場合、各実行時にdatapatchが呼び出されますが、最初から最後の1つ前までのノードでは処理がno-opとなり、最後のノードでSQLパッチ適用を試みる場合があると説明されています。

イメージすると次のようになります。

NODE1 opatchauto
     │
     ├─バイナリ適用
     └─datapatch
          └─まだNODE2が旧RU
             → SQL適用を保留する場合あり


NODE2 opatchauto
     │
     ├─バイナリ適用
     └─datapatch
          │
          ├─全RAC Homeが新RU
          └─SQL変更を適用

このため、NODE1のOPatchAutoログにdatapatch関連のメッセージが表示されたからといって、すぐに異常とは限りません。

最終的には、全ノードへのバイナリ適用後に、

DBA_REGISTRY_SQLPATCH

を確認することが重要です。


datapatchが正常に実行されなかった場合

最終ノードでもdatapatchが失敗した場合は、原因を確認します。

まずすべてのRAC Databaseホームへのバイナリ適用が完了していることを確認します。

$ORACLE_HOME/OPatch/opatch lspatches

PDBの状態を確認します。

SELECT name,
       open_mode
FROM   v$pdbs
ORDER BY con_id;

必要なPDBをオープンします。

ALTER PLUGGABLE DATABASE ALL OPEN;

その後、READMEやOPatchAutoログの指示に従い、1ノードからdatapatchを手動実行します。

cd $ORACLE_HOME/OPatch

./datapatch -verbose

Oracle公式でも、最終ノードでdatapatchが失敗した場合には、手動でdatapatchを再実行する方法が示されています。

実行後に再度、

SELECT patch_id,
       action,
       status,
       description
FROM   dba_registry_sqlpatch
ORDER BY action_time;

を確認します。


14.RAC Database全体の状態を確認する

すべてのインスタンスが起動していることを確認します。

srvctl status database -d ORCL

例:

Instance ORCL1 is running on node NODE1
Instance ORCL2 is running on node NODE2

サービス状態も確認します。

srvctl status service -d ORCL

Clusterwareリソースを確認します。

crsctl stat res -t

PDBについても確認します。

SELECT inst_id,
       name,
       open_mode
FROM   gv$pdbs
ORDER BY inst_id, con_id;

OPatchAutoで特定のOracleホームだけを適用する場合

通常のGI RU適用では、OPatchAutoがGI/RAC構成を認識して対象ホームへ適切なサブパッチを適用します。

一方、特定のOracleホームだけを対象としたい場合は、-ohオプションを使用できます。

Gridホームのみの場合:

$GRID_HOME/OPatch/opatchauto apply \
  /u01/stage/patch/<GI_RU_PATCH_ID> \
  -oh $GRID_HOME

Databaseホームを指定する場合:

$GRID_HOME/OPatch/opatchauto apply \
  /u01/stage/patch/<GI_RU_PATCH_ID> \
  -oh $ORACLE_HOME

Oracle公式でも、

GI Home + RAC DB Home
    opatchauto apply PATCH

GI Homeのみ
    opatchauto apply PATCH -oh GI_HOME

RAC DB Home
    opatchauto apply PATCH -oh DB_HOME

という使い分けが説明されています。

ただし、GI RUの通常適用で安易に-ohを付けるのではなく、対象RUのREADMEで指定されている方法を使用してください。


OPatchとOPatchAutoの違い

シングル環境の記事と比較すると、違いが分かりやすくなります。

┌─────────────────────────────┐
│              OPatch                │
├─────────────────────────────┤
│ 主に単一Oracle Homeへのパッチ      │
│                                  │
│ opatch apply                     │
│       ↓                          │
│ バイナリ適用                     │
│       ↓                          │
│ datapatchを手動実行              │
└─────────────────────────────┘


┌─────────────────────────────┐
│            OPatchAuto              │
├─────────────────────────────┤
│ GI / RAC構成を認識                │
│                                  │
│ opatchauto apply                 │
│       ↓                          │
│ Clusterware制御                  │
│       ↓                          │
│ RACインスタンス制御              │
│       ↓                          │
│ GI・DB Homeへパッチ              │
│       ↓                          │
│ datapatchを含む後処理            │
└─────────────────────────────┘

RACでは、単純に「各ノードでOPatchを実行する」という考え方ではなく、クラスタ構成を考慮できるOPatchAutoを使用するのがポイントです。


RAC RUをロールバックする場合

問題が発生しRUをロールバックする場合は、opatchauto rollbackを使用します。

まず対象RUのREADMEに記載されたロールバック手順を確認してください。

事前に解析する場合は、

$GRID_HOME/OPatch/opatchauto rollback \
  /u01/stage/patch/<GI_RU_PATCH_ID> \
  -analyze

を実行します。

実際のロールバックは、

$GRID_HOME/OPatch/opatchauto rollback \
  /u01/stage/patch/<GI_RU_PATCH_ID>

で実行します。

ローリング適用可能な場合は、適用時と同様に1ノードずつ実施します。

NODE1 rollback
      ↓
NODE1正常性確認
      ↓
NODE2 rollback
      ↓
NODE2正常性確認

OPatchAutoにはrollback機能があり、適用したパッチをGI/RAC環境からロールバックできます。

ロールバック後も、

$GRID_HOME/OPatch/opatch lsinventory
$ORACLE_HOME/OPatch/opatch lsinventory
crsctl query crs softwarepatch NODE1
crsctl query crs softwarepatch NODE2

を確認します。

SQL変更を含むDatabase RUでは、

SELECT patch_id,
       action,
       status,
       description
FROM   dba_registry_sqlpatch
ORDER BY action_time;

も確認します。

対象RUについて、

ACTION :ROLLBACK
STATUS :SUCCESS

になっていることを確認します。


RACパッチ適用で注意したいポイント

RACへのRU適用では、特に次の点が重要です。

OPatchAutoはrootで実行する

Grid InfrastructureおよびRAC環境への通常のOPatchAuto適用はroot権限で実行します。

$GRID_HOME/OPatch/opatchauto apply <PATCH>

ノードを並列でパッチしない

ローリング適用では、

NODE1完了
    ↓
NODE2
    ↓
NODE3

と1ノードずつ実行します。

複数ノードで同時にOPatchAutoを実行しないよう注意してください。


GridホームとDatabaseホームの両方を確認する

RACには複数のOracleホームがあります。

Grid Home
Database Home

そのため、パッチ完了後は両方のインベントリを確認します。

$GRID_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lspatches

全ノードのパッチレベルをそろえる

ローリング適用途中は一時的に新旧RUが混在しますが、作業終了時にはすべてのノードを同じパッチレベルへそろえます。

正常

NODE1:19.xx
NODE2:19.xx


NG

NODE1:19.xx
NODE2:19.yy

Oracle Clusterwareではパッチレベルの不整合が原因で起動できなくなる場合があるため、最終確認は重要です。


まとめ

Oracle Database 19c RAC環境へRUを適用する基本的な流れは次のとおりです。

GI RUを入手
      ↓
OPatch確認
      ↓
クラスタ状態確認
      ↓
opatchauto apply -analyze
      ↓
NODE1
opatchauto apply
      ↓
NODE1復帰確認
      ↓
NODE2
opatchauto apply
      ↓
NODE2復帰確認
      ↓
GI Home確認
      ↓
DB Home確認
      ↓
Clusterware Patch Level確認
      ↓
DBA_REGISTRY_SQLPATCH確認

シングル・インスタンス環境との最大の違いは、OPatchではなくOPatchAutoを中心にパッチを適用することです。

シングル環境
   ↓
opatch apply
   ↓
datapatch


RAC環境
   ↓
opatchauto apply
   ↓
GI・RAC構成を認識して
パッチ処理を自動化

また、RACではローリング適用を利用することで、

NODE1停止中 → NODE2でサービス継続
NODE2停止中 → NODE1でサービス継続

という形で、クラスタ全体の停止を避けながらRUを適用できます。

ただし、すべてのパッチがローリング適用可能とは限りません。また、共有ホーム、ACFS、個別パッチとの競合などによって手順が変わる場合があります。

そのため、実際のパッチ適用時には必ず対象GI RUに付属するREADMEを最優先し、その環境に対応した手順で作業してください。

[参考]
Oracle Database Oracle Databaseパッチ・メンテナンス, リリース19c以降のリリース

Oracle Database 19cの個別パッチ適用手順|OPatch applyとnapplyの違い
Oracle Databaseで特定の不具合が発生した場合、Release Update(RU)の公開を待たずに「個別パッチ」を適用することがあります。個別パッチは、特定の不具合、Oracle Databaseのバージョン、OS・プラットフ…

コメント

タイトルとURLをコピーしました