Oracle Database 19c から 23ai へ PDB リモート・クローン移行してみてみた

Oracle Database 23ai へのバージョンアップ移行は、PDB リモート・クローンです。
19c 以前では[手動アップグレード](https://mikedietrichde.com/2020/03/06/upgrade-testing-online-clone-a-pdb-to-19c/)する必要がありましたが、21c より、AutoUpgrade機能が追加されました。PDBをオープンすると、Oracle DatabaseによってPDBとCDBとの[互換性がチェック](https://docs.oracle.com/en/database/oracle/oracle-database/23/multi/administering-pdbs-with-sql-plus.html#GUID-7C114EF1-A602-4420-8C6D-483F3FAD03E2)され、PDBとCDBルートの間でバージョンの不一致があった場合は、自動的にアップグレードされます。

ということで、PDBバージョン・アップ移行の手順がより簡単になったので、オンプレミスの 19c を Oracle Cloud Infrastructure (OCI) の 23ai へ PDBリモート・クローンしてみてみます。

# ■ 構成イメージ
![構成図2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/d368f53a-f7e2-fdc1-cb96-c4ef53a0160b.jpeg)
Oracle Database 19c, 23ai それぞれの環境は以前作成した環境を使用します。
    ・19c 手順: [Oracle Real Application Clusters 19c (RAC)作成](https://qiita.com/shirok/items/d6f2b3c0813122dd4048)
    ・23ai 手順: [OCI Oracle Database 23ai 作成](https://qiita.com/shirok/items/4b5d7bd61ac3914d8be4)
    ・オンプレミス-OCI接続: [OCI と Cisco 841M ルーターを IKEv2 と BGP で IPSec VPN接続](https://qiita.com/shirok/items/1542af8efcd4d94c4b3a)
    ・オンプレミス環境: [VMware ESXi 8 を Intel NUC 13 へ作成](https://qiita.com/shirok/items/d1c067a4023f33b69af0)


# ■ 前提条件確認
[リモートPDBのクローン作成](https://docs.oracle.com/en/database/oracle/oracle-database/23/multi/cloning-a-pdb.html#GUID-D4900E43-DF38-4629-9A1F-D1C11EC8EC8F)ドキュメントを確認して前提条件確認を確認します。
主なものはつぎのようなものがあります。

**⚫︎ 一般的な前提条件**
・[「PDB作成の一般的な前提条件」](https://docs.oracle.com/en/database/oracle/oracle-database/23/multi/overview-of-pdb-creation.html#GUID-B26D56E1-B958-444F-864C-8AFDFF1566A6)で説明されている前提条件を満たす
・CREATE PLUGGABLE DATABASE を含むCDBのルートに対するシステム権限が必要
・ソースとターゲットは次の要件を満たしていることが必要
　- 同じエンディアンネス
　- ソースのDatabase Optionは、ターゲットと同じか、そのサブセットであることが必要
　- アプリケーションPDB構成の場合、ソースPDBのアプリケーション名およびバージョンは、ターゲット・アプリケーション・コンテナのアプリケーション名およびバージョンと一致することが必要

**⚫︎ ソースPDBのオープンモードの前提条件**
・リモートCDBがローカルUNDOモードでない場合、ソースPDBは読取り専用モード
・リモートCDBがARCHIVELOGモードでない場合、ソースPDBは読取り専用モード
・リフレッシュ可能なPDBの場合、ソースPDBはARCHIVELOGモードおよびローカルUNDOモード

他には次のような前提条件もあります。
**⚫︎文字セットの前提条件**
**⚫︎データベースリンクの前提条件**

・参考: [リモートPDBのクローン作成: 前提条件](https://docs.oracle.com/en/database/oracle/oracle-database/23/multi/cloning-a-pdb.html#GUID-D4900E43-DF38-4629-9A1F-D1C11EC8EC8F)



# ■ Source DB (19c) 作業

## ⚫︎ Source DB (PDB19c) 確認
**1) CDB接続**
```
[oracle@rac19c-node1 ~]$ sql / as sysdba

    SQLcl: Release 19.1 Production on Thu Nov 02 08:12:08 2023

    Copyright (c) 1982, 2023, Oracle.  All rights reserved.

    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0
```

**2) Version 確認**
```
SQL> select * from v$version;

    BANNER
    --------------------------------------------------------------------------------
    BANNER_FULL
    ----------------------------------------------------------------------------------------------------
    BANNER_LEGACY                                                                        CON_ID
    -------------------------------------------------------------------------------- ----------
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
```

**3) CDB の UNDO モード 確認**
リモート CDB がローカル UNDO モードではない場合、ソース PDB は読取り専用モードで開く必要があります。

```
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='LOCAL_UNDO_ENABLED';

    PROPERTY_NAME
    --------------------------------------------------------------------------------
    PROPERTY_VALUE
    --------------------------------------------------------------------------------
    LOCAL_UNDO_ENABLED
    TRUE
```

**4) ARCHIVELOG モード確認**
リモート CDB が ARCHIVELOG モードでない場合は、ソース PDB を読取り専用モードで開く必要があります。

```
SQL>  select log_mode from v$database;

    LOG_MODE
    ------------
    ARCHIVELOG
```

**5) ソース PDB 確認**
```
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            MOUNTED
         4 PDB19C                         READ WRITE NO
```

**6) ソース PDB 接続**
```
SQL> alter session set container=PDB19C;

    Session altered.
```

**7) ソース PDB 接続確認**
```
SQL> show con_name

    CON_NAME
    ------------------------------
    PDB19C
```


## ⚫︎ Database Link 接続ユーザー作成
**1) リモート・クローン用ユーザー作成**
```
SQL> create user remote_user_for_clone identified by <Password>;

    User created.

SQL> grant create session,create pluggable database to remote_user_for_clone;

    Grant succeeded.
```

# ■ Target Database (23ai) 作業
データベース・リンクは、(リモートCDBではなく)ローカル CDB に存在する必要があります。
CREATE PLUGGABLE DATABASE ローカル CDBのルートから文を発行する場合は、FROM 句でクローニングされる PDB を含むリモート CDB へのデータベース・リンクを指定する必要があります。
データベース・リンクは、ローカル CDB からリモート CDB のルートまたはリモート・ソース PDB に接続します。


## ⚫︎ Source Database 接続用 SQL*NET 設定

**1) tnsnames.ora 設定**
```
[oracle@basedb23ai-tokyo ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora

Source_PDB19c =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.19)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb19c.oracle.com)
    )
  )
```


**2) tnsnames.ora 設定確認**
作成した接続記述子で Source Database へ接続できることを確認
```
[oracle@basedb23ai-tokyo ~]$ sql system/<Password>@Source_PDB19c

    SQLcl: Release 23.2 Production on Wed Nov 01 15:41:28 2023

    Copyright (c) 1982, 2023, Oracle.  All rights reserved.

    Last Successful login time: Wed Nov 01 2023 23:44:58 +00:00

    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

SQL> show con_name

    CON_NAME
    ------------------------------
    PDB19C
```



## ⚫︎ Source Database 接続用 Database link 作成
**1) Database link 作成**
```
SQL> create database link Source_PDB19c connect to remote_user_for_clone identified by <Password> using 'Source_PDB19c';

    Database link created.
```

**2) Database link 接続確認**
```
select * from dual@Source_PDB19c;
    DUM
    ---
    X
```

## ⚫︎ ORA-02085 発生した場合

**1) Database link 接続確認で ORA-02085**
```
SQL> select * from dual@Source_PDB19c;
    select * from dual@Source_PDB19c
                    *
    ERROR at line 1:
    ORA-02085: database link SOURCE_PDB19C.CLIENTSUBNET.VCNEXATOKYO.ORACLEVCN.COM
    connects to PDB19C.ORACLE.COM
    Help: https://docs.oracle.com/error-help/db/ora-02085/
```

**2) ORA-02085 調査**
次のドキュメントに ORA-0208の内容があります

 ・参考: [Database Error Messages: ORA-02085](https://docs.oracle.com/en/error-help/db/ora-02085/)


```
create a database link with the same name as the database it connects to, or set global_names=false.
```
**3) ORA-02085 対応**
Set global_names = FALSEを設定
```
SQL> ALTER SESSION SET global_names = FALSE;

    Session altered.
```
**4) Database link 接続確認**
```
SQL> select * from dual@Source_PDB19c;

    DUM
    ---
    X
```

# ■ PDB リモート・クローン移行
Target Databasae でリモート・クローンで PDB作成を実行します。
```
SQL> create pluggable database PDB19c from PDB19c@Source_PDB19c keystore identified by <Password>;

    Pluggable database created.
```



## ⚫︎ リモート・クローン PDB 作成確認
```
SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB				  READ WRITE NO
	 4 PDB19C			  MOUNTED
```

## ⚫︎ PDB オープン
**1) PDB オープン**
```
SQL> ALTER PLUGGABLE DATABASE PDB19c OPEN;
```

**2) Alert Log確認**
アラート・ログを確認すると次のように自動 Upgrade していることを確認できます。

```:Alert Log
[oracle@basedb23ai-tokyo ~]$ tail -f /u01/app/oracle/diag/rdbms/${ORACLE_UNQNAME,,}/$ORACLE_SID/trace/alert_$ORACLE_SID.log
    ・・・
    PDB19C_CLONE(5):Starting Upgrade on PDB Open
    ・・・
    PDB19C_CLONE(5):alter database upgrade sync on
    PDB19C_CLONE(5):Completed: alter database upgrade sync on
```

**3) PDB オープン確認**
```
SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB				  READ WRITE NO
	 4 PDB19C			  READ WRITE NO
```


## ⚫︎ PDB_PLUG_IN_VIOLATIONS確認
PDBオープン時にPDBとCDBとの互換性がチェックがされます。
その時に [PDB_PLUG_IN_VIOLATIONS ビュー](https://docs.oracle.com/en/database/oracle/oracle-database/23/refrn/PDB_PLUG_IN_VIOLATIONS.html#GUID-845E5369-CCB0-4F8D-AE09-447EF0CAC93F)上に非互換性に関する情報がTYPE列値に 'ERROR' となっているものが自動アップグレードで対処され、STATUS='RESOLVED'になります。
PDB 再起動 するとこのERRORは起動時になくなります。

:::note info
PDB_PLUG_IN_VIOLATIONS の TYPE='WARNING'値について
PDB には、接続先の CDB よりもサブセット (少ない) オプションがインストールされていても問題はないため、PDB_PLUG_IN_VIOLATIONS に WARNING メッセージが表示されますが、無視しても問題ありません。
:::
**1) 初回 PDB Open 時の PDB_PLUG_IN_VIOLATIONS 確認**
```
SQL> select * from PDB_PLUG_IN_VIOLATIONS Where NAME='PDB19c' and TYPE='ERROR';

	TIME                               NAME      CAUSE            TYPE        ERROR_NUMBER    LINE MESSAGE                                                                                                  STATUS      ACTION                                                            CON_ID
	__________________________________ _________ ________________ ________ _______________ _______ ________________________________________________________________________________________________________ ___________ ______________________________________________________________ _________
	01-NOV-23 02.56.08.695042000 AM    PDB19C    OPTION           ERROR                  0       1 Database option CATALOG mismatch: PDB installed version 19.0.0.0.0. CDB installed version 23.0.0.0.0.    RESOLVED    Fix the database option in the PDB or the CDB                          1
	01-NOV-23 02.56.08.695042000 AM    PDB19C    VSN not match    ERROR                  0       1 PDB's version does not match CDB's version: PDB's version 19.0.0.0.0. CDB's version 23.0.0.0.0.          RESOLVED    Either upgrade the PDB or reload the components in the PDB.            4
	01-NOV-23 02.56.08.695042000 AM    PDB19C    OPTION           ERROR                  0       2 Database option CATPROC mismatch: PDB installed version 19.0.0.0.0. CDB installed version 23.0.0.0.0.    RESOLVED    Fix the database option in the PDB or the CDB                          1
	01-NOV-23 02.56.08.695042000 AM    PDB19C    OPTION           ERROR                  0       3 Database option OWM mismatch: PDB installed version 19.0.0.0.0. CDB installed version 23.0.0.0.0.        RESOLVED    Fix the database option in the PDB or the CDB                          1
	01-NOV-23 02.56.08.695042000 AM    PDB19C    OPTION           ERROR                  0       5 Database option XDB mismatch: PDB installed version 19.0.0.0.0. CDB installed version 23.0.0.0.0.        RESOLVED    Fix the database option in the PDB or the CDB                          1
```

**2) PDB 再起動**
```
SQL> ALTER PLUGGABLE DATABASE PDB19c close;

	Pluggable database PDB19C altered.

SQL> ALTER PLUGGABLE DATABASE PDB19c OPEN;

	Pluggable database PDB19C altered.
 ```

 **3) PDB_PLUG_IN_VIOLATIONS 確認**
 TIME列を確認し、初回確認時と同じデーター行が表示され、再起動以降の TIME は、'ERROR'データないことを確認
```
SQL> select * from PDB_PLUG_IN_VIOLATIONS Where NAME='PDB19c' and TYPE='ERROR';

	TIME                               NAME      CAUSE            TYPE        ERROR_NUMBER    LINE MESSAGE                                                                                                  STATUS      ACTION                                                            CON_ID
	__________________________________ _________ ________________ ________ _______________ _______ ________________________________________________________________________________________________________ ___________ ______________________________________________________________ _________
	01-NOV-23 02.56.08.695042000 AM    PDB19C    OPTION           ERROR                  0       1 Database option CATALOG mismatch: PDB installed version 19.0.0.0.0. CDB installed version 23.0.0.0.0.    RESOLVED    Fix the database option in the PDB or the CDB                          1
	01-NOV-23 02.56.08.695042000 AM    PDB19C    VSN not match    ERROR                  0       1 PDB's version does not match CDB's version: PDB's version 19.0.0.0.0. CDB's version 23.0.0.0.0.          RESOLVED    Either upgrade the PDB or reload the components in the PDB.            4
	01-NOV-23 02.56.08.695042000 AM    PDB19C    OPTION           ERROR                  0       2 Database option CATPROC mismatch: PDB installed version 19.0.0.0.0. CDB installed version 23.0.0.0.0.    RESOLVED    Fix the database option in the PDB or the CDB                          1
	01-NOV-23 02.56.08.695042000 AM    PDB19C    OPTION           ERROR                  0       3 Database option OWM mismatch: PDB installed version 19.0.0.0.0. CDB installed version 23.0.0.0.0.        RESOLVED    Fix the database option in the PDB or the CDB                          1
	01-NOV-23 02.56.08.695042000 AM    PDB19C    OPTION           ERROR                  0       5 Database option XDB mismatch: PDB installed version 19.0.0.0.0. CDB installed version 23.0.0.0.0.        RESOLVED    Fix the database option in the PDB or the CDB      
```
 
## ⚫︎ OCIコンソール PDB 情報登録確認
１時間程度後に追加した PDB19cがOCIコンソールに登録されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/5864778a-ae92-037c-9657-2ca8859454ee.png)




# ■ おまけ: CDBおよびPDBでの AutoUpgrade機能の無効化と有効化
PDBまたは非CDBが新しいリリースのコンテナ・データベース(CDB)に接続されると、オープンしたPDBで、PDBまたは非CDBがCDBとの互換であるためにアップグレードが必要かどうかが検出されます。
リプレイ・アップグレード・プロセスをオフまたはオフにすることもできます。
この構文は'PDB_UPGRADE_SYNC'プロパティを変更します。このプロパティは、ONの場合は1に設定され、OFFの場合は0に設定される数値です。数が正の場合、catctl.plはリプレイ・アップグレード・プロセスを使用します。
このプロパティは、CDB$ROOTまたはPDBに設定できます。ROOTで無効にされている場合、catctl.plはどのPDBにもリプレイ・アップグレード・プロセスを使用しません。ROOTで有効にされていると、PDBはこの値を継承することも、独自の値を設定することもできます。 


## ● PDB AutoUpgrade機能の無効化

**1) sql 接続**
CDBへ接続します。
```
[oracle@basedb23ai-tokyo ~]$ sql / as sysdba


  SQLcl: Release 24.1 Production on Fri May 03 13:29:47 2024

  Copyright (c) 1982, 2024, Oracle.  All rights reserved.

  Connected to:
  Oracle Database 23ai EE Extreme Perf Release 23.0.0.0.0 - Production
  Version 23.4.0.24.05
```

**2) PDB_UPGRADE_SYNC プロパティ確認**
AutoUpgrade機能が ONの場合は1に設定されています。
```
SQL> select property_name, property_value from database_properties Where property_name='PDB_UPGRADE_SYNC';

  PROPERTY_NAME       PROPERTY_VALUE
  ___________________ _________________
  PDB_UPGRADE_SYNC    1
```

**3) AutoUpgrade機能の無効化**
AutoUpgrade機能をオフにします。
```
SQL> ALTER DATABASE UPGRADE SYNC OFF;

Database altered.
```

**4) AutoUpgrade機能の無効化確認**
AutoUpgrade機能をオフであることを確認
AutoUpgrade機能が OFF の場合は 0 に設定されています。
```
SQL> select property_name, property_value from database_properties Where property_name='PDB_UPGRADE_SYNC';

  PROPERTY_NAME       PROPERTY_VALUE
  ___________________ _________________
  PDB_UPGRADE_SYNC    0
```



## ● PDB AutoUpgrade機能の有効化
**1) AutoUpgrade機能の有効化**
```
SQL> ALTER DATABASE UPGRADE SYNC ON;

  Database altered.
```

**2) AutoUpgrade機能の有効化確認**
AutoUpgrade機能が ONの場合は 1 に設定されています。
```
SQL> select property_name, property_value from database_properties Where property_name='PDB_UPGRADE_SYNC';

  PROPERTY_NAME       PROPERTY_VALUE
  ___________________ _________________
  PDB_UPGRADE_SYNC    1
```


# ■ 参考
　・ [Oracle Databaseでの動作の変更、非推奨となった機能およびサポートが終了した機能](https://docs.oracle.com/cd/F82042_01/upgrd/behavior-changes-deprecated-desupport-oracle-database.html#GUID-266EDA82-9482-4C43-95DA-3C02411ADDC1) 
　・ [DBUA Deprecation and future Desupport in Oracle Database 23c](https://mikedietrichde.com/2023/06/21/dbua-deprecation-and-future-desupport-in-oracle-database-23c/)
　・ [Upgrading Oracle Database Releases Using Replay Upgrade](https://docs.oracle.com/en/database/oracle/oracle-database/23/upgrd/adopting-non-cdb-pbs-using-capture-upgrade.html#GUID-77BA4A1D-447F-46FB-B3EE-C58B8546FEB0)
　・ [DBUAおよび手動アップグレードの非推奨](https://docs.oracle.com/cd/F82042_01/upgrd/behavior-changes-deprecated-desupport-oracle-database.html#GUID-58CEEE69-18F8-46C3-B534-5C4E15B638DA)
　・ [Multitenant Administrator's Guide](https://docs.oracle.com/en/database/oracle/oracle-database/23/multi/index.html#Oracle%C2%AE-Multitenant)
　・ [Oracle Databaseのダウングレードがサポートされているリリース](https://docs.oracle.com/cd/F19136_01/upgrd/downgrading-oracle-db-after-upgrade.html#GUID-59F92E2A-DC4D-46A3-9AC9-63F47BE4A86F)
　・ [マルチテナント・アーキテクチャのOracle Databaseの手動アップグレード・シナリオ](https://docs.oracle.com/cd/F19136_01/upgrd/manual-upgrade-scenarios-multitenant-architecture-oracle-databases.html#GUID-2424F203-D586-459E-9BC5-5332800A7D2F)
　・ [Upgrade Testing – Online Clone a PDB to 19c](https://mikedietrichde.com/2020/03/06/upgrade-testing-online-clone-a-pdb-to-19c/)
　・ [CDBおよびPDBでのリプレイ・アップグレード・プロシージャの有効化または無効化](https://docs.oracle.com/cd/F32587_01/upgrd/adopting-non-cdb-pbs-using-capture-upgrade.html#GUID-A062566C-A1FA-472A-A6E0-DBF935EB37E2)
　・ [DATABASE_PROPERTIES](https://docs.oracle.com/cd/F19136_01/refrn/DATABASE_PROPERTIES.html)
　・ [Oracle Database 19c の複数のリリースに渡る変更、サポート終了および非推奨リスト](https://docs.oracle.com/cd/F19136_01/upgrd/oracle-database-changes-deprecations-desupports.html#GUID-44E0A12C-2918-4565-BB19-A1CBA4C0FDCD)
　・ [Oracle Database 23ai の複数のリリースに渡る変更、サポート終了および非推奨リスト](https://docs.oracle.com/en/database/oracle/oracle-database/23/upgrd/oracle-database-changes-deprecations-desupports.html#GUID-44E0A12C-2918-4565-BB19-A1CBA4C0FDCD)