リプレイ・アップグレードを使用したOracle Databaseリリースのアップグレード
以前のリリースからアップグレードするには、Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)プロシージャを使用して、非CDBをPDBに採用するか、PDBをアップグレードできます。
- リプレイ・アップグレードを使用したCDBまたはPDBのアップグレード
リプレイ・アップグレードを使用してコンテナ・データベース(CDB)全体およびそのプラガブル・データベース(PDB)をアップグレードすることも、個々のPDBをアップグレードすることもできます。 - リプレイ・アップグレードを無効または有効にする方法
デフォルトで、Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)メソッドはPDBおよびCDBでのアップグレードに対して有効になっています。ただし、リプレイ・アップグレード・メソッドの使用を有効または無効にすることができます。 - リプレイ・アップグレードを使用した非CDBからPDBへのアップグレードについて
Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)メソッドを使用することにより、非CDBのOracle Databaseソフトウェアをマルチテナント・アーキテクチャにアップグレードするステップの一部を自動化できます。 - リプレイ・アップグレードを使用したPDBとしての非CDBの採用およびアップグレード
アップグレードを簡略化するには、Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)メソッドを使用することにより、非CDBをPDBに採用(移動)およびアップグレードできます。 - リプレイ・アップグレード・プロセスの障害とリカバリのシナリオ
Oracle Multitenantリプレイ・アップグレード(リプレイ・アップグレード)のログ・ファイルおよびトレース・ファイルでエラーと問題をチェックする方法について説明します。
リプレイ・アップグレードを使用したCDBまたはPDBのアップグレード
リプレイ・アップグレードを使用してコンテナ・データベース(CDB)全体およびそのプラガブル・データベース(PDB)をアップグレードすることも、個々のPDBをアップグレードすることもできます。
アップグレードを開始する前に、次のステップを実行する必要があります。
- 新しいリリースのOracle Databaseソフトウェアのインストール
- 新しいOracleホームを準備します。
preupgrade
パラメータを指定してAutoUpgradeを実行します。
ノート:
リプレイ・アップグレードを使用してPDBを接続し、PDBオープン時にPDBをアップグレードする場合、アップグレードするPDBの数は、Oracle Databaseで使用できるCPUコア(プロセッサ)の数を指定するOracle Database初期化パラメータCPU_COUNT
の値の4分の1(¼)以下にすることをお薦めします。従来のアップグレードでは、一度にアップグレードされるPDBのデフォルト数は、CPU_COUNT
の値の2分の1(½)以下です。
クラシック・アップグレード・ツールまたはAutoUpgradeユーティリティを使用して、Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)メソッドを使用してアップグレードを完了できます。
クラシック・アップグレード・ツールを使用したリプレイ・アップグレード
CDB$ROOT
およびホストされているすべてのPDBを含めてCDB全体をアップグレードするには、パラレル・アップグレード・ユーティリティ(catctl.pl
)を手動または暗黙的に実行するか、dbupgrade
スクリプトを使用します。手順は以前のリリースと同じです。ただし、Oracle Database 21c以降では、アップグレード・ユーティリティにはデフォルトでリプレイ・アップグレード・プロシージャが使用されます。コマンド構文に変更はありません。
PDBプラグインでの自動アップグレードを使用した新しいリリースのCDBへのリプレイ・アップグレード
以前のリリースのPDBを新しいリリースのCDBに接続すると、CDBはPDBのオープン時にPDBがCDBより以前のリリースであることを検出し、リプレイ・アップグレード・プロセスを自動的に開始します。PDBオープン時のアップグレードでは、リプレイ・アップグレード同期化機能を使用してPDBを自動的にアップグレードします。この最適化により、PDBを制限モードで開いてエラーをPDB_PLUG_IN_VIOLATIONS
ビューに公開することが回避され、エラーを手動で修正する必要がなくなります。
リプレイ・アップグレードを有効または無効にする方法
デフォルトで、Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)メソッドはPDBおよびCDBでのアップグレードに対して有効になっています。ただし、リプレイ・アップグレード・メソッドの使用を有効または無効にすることができます。
パラレル・アップグレード・ユーティリティ(catctl.pl
)のデフォルトのリプレイ・アップグレードの実行を無効にするには、次のコマンドをCDB$ROOT
または特定のPDBのいずれかで実行します。
ALTER DATABASE UPGRADE SYNC OFF
リプレイ・アップグレードの動作を再度有効にするには、次のコマンドを入力します。
ALTER DATABASE UPGRADE SYNC ON
パラレル・アップグレード・ユーティリティ(catctl.pl
)のパラメータ-t
を設定することで、非リプレイ・アップグレードを選択することもできます。これにより、従来のスクリプト方式を使用する非リプレイ・アップグレードが強制されます。
ノート:
CDB$ROOT
に接続しているか、特定のPDBに接続しているかによって、CDB全体または個々のPDBでのリプレイ・アップグレード・メソッドの使用を管理できます。
UPGRADE SYNC
がCDB$ROOT
でOFF
に設定されている場合、CDBに接続されているどのPDBにもリプレイ・アップグレード・メソッドは使用されません。UPGRADE SYNC
がCDB$ROOT
でON
に設定されているが、PDBでOFF
に設定されている場合、リプレイ・アップグレード・メソッドは、UPGRADE SYNC
がOFF
であるPDBに対して使用されません。ただし、リプレイ・アップグレード・メソッドは、CDBに接続されている他のすべてのPDBに対して使用されます。UPGRADE SYNC
がCDB$ROOT
でON
に設定され、すべてのPDBに対してON
に設定されている場合(デフォルト)、リプレイ・アップグレード・メソッドはCDBに接続されているすべてのPDBに対して使用されます。
リプレイ・アップグレードを使用した非CDBからPDBへのアップグレードについて
Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)メソッドを使用することにより、非CDBのOracle Databaseソフトウェアをマルチテナント・アーキテクチャにアップグレードするステップの一部を自動化できます。
リプレイ・アップグレード・メソッドは、このOracle Databaseリリースへの直接アップグレードがサポートされている以前のOracle Databaseリリースからのアップグレードに対してデフォルトで有効になっています。リプレイ・アップグレード・プロセスは、noncdb_to_pdb.sql
などのスクリプトを実行する従来の方法とは異なります。非CDBの場合、DBMS_PDB.DESCRIBE
を実行して非CDBを記述した後、新しいOracle Database CDBに非CDBを接続します。アップグレードのためのリプレイ・アップグレード・メソッドは、次の2つのステップで完了します。
- 非CDBデータベースは、新しいOracle Databaseリリースにアップグレードされます。
- 非CDBデータ・ディクショナリは、PDBデータ・ディクショナリに変換されます。
これらのステップはいずれも、ALTER PLUGGABLE DATABASE OPEN
を実行するときにトリガーされます。どちらのステップも、ディクショナリに格納されたSQL文を自動的に再生し、PDBへの非CDBの採用と、新しいリリースへのデータベースのアップグレードのタスクを完了します。
リプレイ・アップグレード・メソッドを使用する利点は、PDBのアップグレードと変換のために実行する必要があるアップグレード・ワークフローを大幅に簡略化できることです。非CDBからPDBへの暗黙的な変換により、Oracle Database 21cより前の非CDBおよびPDBの両方のOracle Databaseリリースを新しいリリースのCDBのPDBに採用およびアップグレードするプロセスが簡略化されます。
リプレイ・アップグレードを使用したPDBとしての非CDBの採用およびアップグレード
アップグレードを簡略化するには、Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)メソッドを使用することにより、非CDBをPDBに採用(移動)およびアップグレードできます。
アップグレードを開始する前に、次のステップを実行する必要があります。
- 新しいリリースのOracle Databaseソフトウェアのインストール
- 新しいOracleホームを準備します。
preupgrade
パラメータを指定してAutoUpgradeを実行します。
DBMS_PDB
パッケージおよびリプレイ・アップグレード・メソッドを使用して非CDBをPDBとして採用するには、次の手順を実行します。
-
CDBが存在しない場合は作成します。
-
非CDBがトランザクション上一貫した状態にあることを確認してください。
-
非CDBを読取り専用モードにします。
-
非CDBに接続し、
DBMS_PDB.DESCRIBE
プロシージャを実行して、非CDBを記述するXMLファイルを作成します。現行ユーザーには、
SYSDBA
管理権限が必要です。ユーザーは、接続時にAS SYSDBA
を使用して権限を行使する必要があります。たとえば、
ncdb.xml
という名前のXMLファイルを/disk1/oracle
ディレクトリに生成し、次のプロシージャを実行します。BEGIN DBMS_PDB.DESCRIBE( pdb_descr_file => '/disk1/oracle/ncdb.xml'); END; /
このプロシージャが正常に完了した後、XMLファイルおよび非CDBデータベース・ファイルを使用して、非CDBをCDBに接続できます。
-
DBMS_PDB.CHECK_PLUG_COMPATIBILITY
ファンクションを実行して、非CDBがCDBと互換性があるかどうかを確認します。このファンクションを実行する場合は、次のパラメータを設定します。
-
pdb_descr_file
- このパラメータをデータベース記述XMLファイルへのフルパスに設定します。 -
pdb_name
- 新しいPDBの名前を指定します。このパラメータを省略した場合は、XMLファイル内のPDB名が使用されます。
たとえば、
/disk1/oracle/ncdb.xml
ファイルで記述されている非CDBが現在のCDBと互換性があるかどうかを確認するには、次のPL/SQLブロックを実行します。SET SERVEROUTPUT ON DECLARE compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY( pdb_descr_file => '/disk1/oracle/ncdb.xml', pdb_name => 'NCDB') WHEN TRUE THEN 'YES' ELSE 'NO' END; BEGIN DBMS_OUTPUT.PUT_LINE(compatible); END; /
出力が
YES
の場合は非CDBに互換性があり、次のステップに進むことができます。出力がNO
の場合は、非CDBには互換性がありません。互換性がない理由を確認するには、ビューPDB_PLUG_IN_VIOLATIONS
を確認します。続行する前に、すべての違反を修正する必要があります。たとえば、アップグレードを実行するか、datapatch
ユーティリティを実行して、バージョンまたはパッチの不一致をすべて解決する必要があります。違反を修正してから、DBMS_PDB.CHECK_PLUG_COMPATIBILITY
を再度実行して、非CDBがCDBと互換性があることを確認します。 -
-
非CDBを停止します。
-
非CDBを接続します。
たとえば、次のSQL文は非CDBをプラグインし、そのファイルを新しい場所にコピーして、非CDBから
tbs3
ユーザー表領域のみを含めます。CREATE PLUGGABLE DATABASE ncdb USING '/disk1/oracle/ncdb.xml' COPY FILE_NAME_CONVERT = ('/disk1/oracle/dbs/', '/disk2/oracle/ncdb/') USER_TABLESPACES=('tbs3');
違反がない場合は、新しいPDBをオープンしないでください。これは、後のステップで開きます。
USER_TABLESPACES
句を使用すると、非CDB内の複数のテナントに使用されたデータを異なるPDBに分けることができます。この句を指定したCREATE PLUGGABLE DATABASE
文を複数使用して、非CDBに存在する他の表領域のデータを含む別のPDBを作成できます。 - データベースを開くコマンドでリプレイ・アップグレードを実行できるようにするには、
ALTER DATABASE PROPERTY SET UPGRADE_PDB_ON_OPEN='true'
と入力します。たとえば:ALTER DATABASE PROPERTY SET UPGRADE_PDB_ON_OPEN='true';
-
新しいPDBに接続して、それを開きます。PDBが開かれるときに、データベースはアップグレードされ、非CDBデータベース・データ・ディクショナリがPDBに変換されます。たとえば:
ALTER PLUGGABLE DATABASE OPEN
Oracle Databaseでデータベースのアップグレードを完了するには、新しいPDBを開く必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが開かれるときに、非CDBがPDBに採用され、データ・ディクショナリが変換されて、新しいPDBがCDBに統合されます。リプレイ・アップグレードからのメッセージは、トレース・ディレクトリに置かれます。PDBが開かれてリプレイ・アップグレードが完了すると、そのステータスは
NORMAL
になります。アップグレードのステータスを確認するには、次のビューを問い合せます。- リプレイ・アップグレード・エラーを確認するには、ビュー
DBA_REPLAY_UPGRADE_ERRORS
を使用します - 完全性をチェックするには、
DBA_APPLICATIONS
を使用します。app_name 'APP$CDB$CATALOG'
値のapp_version
値を確認します。この値は、PDBの新しいバージョンである必要があります。 - ビュー
DBA_APP_ERRORS
で文エラーをチェックします。このビューには、エラー・メッセージとエラーに関する文テキスト(app_statement
)が表示されます。成功したアップグレードでは、このビューにapp_name='APP$CDB$CATALOG'
の行が含まれていないことが必要です。
- リプレイ・アップグレード・エラーを確認するには、ビュー
-
datapatchを実行して、新しいPDBにパッチを適用します。
datapatch -pdbs ncdb
-
アップグレード後の修正を実行します。
java -jar autoupgrade.jar -preupgrade "target_home=/u01/app/oracle/product/21.0.0/dbhome_1,dir=/autoupgrade/test/log,inclusion=ncdb" –mode postfixups
-
PDBをバックアップします。
PDBは、バックアップしないとリカバリできません。
ノート:
PDBの作成時にエラーが返された場合は、作成されたPDBがUNUSABLE
状態である可能性があります。ビューCDB_PDBS
またはDBA_PDBS
を問い合せることで、PDBの状態を確認できます。PDB作成のエラーについてさらに学習するには、アラート・ログを確認してください。使用できないPDBは削除するしかありません。PDBが使用できない場合は、使用できないPDBと同じ名前のPDBを作成する前にPDBを削除する必要があります。
リプレイ・アップグレード・プロセスの失敗とリカバリのシナリオ
Oracle Multitenant Replay Upgrade (リプレイ・アップグレード)のログ・ファイルおよびトレース・ファイル内のエラーと問題をチェックする方法を学習します。
リプレイ・アップグレードが失敗した場合、PDB_UPGRADE_SYNC
プロパティはPDBに対して1つ減分されます。リプレイ・アップグレードが2回失敗すると、catctl.pl
は、アップグレードを完了するために従来のスクリプト・ベースのパラレル・アップグレード・プロシージャのメソッドを使用することになります。
リプレイ・アップグレード・エラーの原因を特定するには、エラーが発生した文のアップグレード・ログを確認します。リプレイ・アップグレード・プロシージャの実行後、正常に実行されたかどうかに関係なく、問合せDBA_APP_ERRORS
が実行されます。その問合せの結果を確認して、エラーが発生した文の文テキストおよびエラー・メッセージを確認します。ログ内の特定のエラーを表示するには、grep
コマンドを使用して'^ORA-'
のテキスト文字列を検索し、アップグレード・ログを問い合せることもできます。
もう1つのリカバリ・オプションは、トレース・ファイル(.trc
)を確認することです。トレース・ファイルには、リプレイ・アップグレード・プロシージャ中に実行された各文の出力が含まれています。ファイルには、文テキスト、文が成功したか失敗したか、エラー・メッセージ(該当する場合)およびプロセス中の経過時間が示されます。接頭辞文字列Replay Upgrade, PDB ID
を含む行を探します。ここで、変数ID
はPDB IDです。たとえば、Replay Upgrade, PDB 15
です。