マルチテナント・アーキテクチャへの非CDB Oracle Databaseリリースの手動アップグレード
スクリプトを使用して非CDBのOracle Databaseアップグレードを手動で管理するために、アップグレード・シナリオおよび手順について学習します。
Oracle Database 20c以降、非CDBアーキテクチャはサポートされなくなりました。非CDB Oracle DatabaseをCDB上のPDBにアップグレードする必要があります。次の2つの手動アップグレード・オプションを使用できます。
- 非CDB Oracle DatabaseをOracle Database 20cのコンテナ・データベース(CDB)に接続します。次に、接続された非CDBをOracle Database 20cにアップグレードして、データ・ディクショナリを非CDBからプラガブル・データベース(PDB)形式に変換します。
- 非CDB Oracle Databaseを同じリリースのOracle DatabaseのCDBに接続し、データ・ディクショナリを非CDBからPDBに変換します。次に、CDBおよびPDBをOracle Database 20cにアップグレードします。
注意:
アップグレードまたはダウングレードを開始する前に、ソース・データベースとターゲット・データベースを最新の四半期リリース更新(Update)またはリリース更新リビジョン(Revision)にアップグレードすることをお薦めします。
- 最新のOracle Databaseのアップグレード前情報ツールのダウンロード
アップグレードを円滑に行うために、最新の更新を取得してチェックを実行するには、最新のOracle Databaseのアップグレード前ツールをダウンロードします。 - PDBプラグインを使用した非CDBのPDBとしての採用について
非CDBをPDBとして手動で採用するには、非CDBを記述するXMLファイルを生成し、DBMS_PDB.DESCRIBE
プロシージャを使用します。その後、切断されたPDBを接続するのと同じように、非CDBに接続します。 - PDBとしての非CDBの適用
DBMS_PDB.DESCRIBE
プロシージャを使用して非CDBをPDBに適用(移動)できます。 - 切断されたPDBの接続
切断されたPDBをCDBに接続することで、PDBを作成できます。 - 非CDBアーキテクチャのOracle Databaseの手動アップグレード
CDBをインストールした後にこの手順を使用して、以前のリリースの非CDBアーキテクチャのOracle DatabaseをアップグレードしてPDBにし、そのPDBをCDBに接続します。 - フリート・パッチ適用およびプロビジョニングを使用したOracle Databaseのアップグレード
Oracle Database 12cリリース2 (12.2)以上のリリースでは、フリート・パッチ適用およびプロビジョニングを使用して以前のリリースのOracle Databaseをアップグレードできるようになりました。
最新のOracle Databaseのアップグレード前情報ツールのダウンロード
アップグレードを円滑に行うために、最新の更新を取得してチェックを実行するには、最新のOracle Databaseのアップグレード前ツールをダウンロードします。
Oracle Databaseのアップグレード前情報ツールは、ソフトウェアの初期リリース後も引き続き開発されています。ソフトウェアにパッケージされているアップグレード前情報ツールは、多くの問題を特定してアップグレードを容易にすることができますが、常に最新バージョンをダウンロードして実行することをお薦めします。ツールの最新バージョンをダウンロードすることにより、初期リリース後に発生した問題に対応するために追加された新しい更新のメリットを得ることができます。ツールの最新バージョンは、My Oracle SupportのドキュメントID 884522.1から入手できます。
アップグレード前情報ツールの新しいバージョンをダウンロードする前に、ソフトウェアに付属するバージョンをバックアップします。次に、Oracleホームのファイルを、Oracle Supportからダウンロードしたファイルに置き換えます。
PDBプラグインを使用したPDBとしての非CDBの採用について
非CDBをPDBとして手動で採用するには、非CDBを記述するXMLファイルを生成し、DBMS_PDB.DESCRIBE
プロシージャを使用します。その後、切断されたPDBを接続するのと同じように、非CDBに接続します。
非CDBをPDBに自動的に採用およびアップグレードする取得リプレイ・メソッドを使用しないことを選択した場合、非CDBを記述し非CDBをPDBに採用する手動の手順を使用できます。CREATE PLUGGABLE DATABASE ... USING
文を使用してPDBを作成します。非CDBがCDBに接続されると、それは新しいPDBですが、ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
スクリプトを使用してデータディクショナリが変換されるまで使用できません。
アプリケーション・コンテナに新しいアプリケーションPDBを作成するのと同じ手法を使用できます。
PDBとしての非CDBの適用
DBMS_PDB.DESCRIBE
プロシージャを使用して非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
ビューをチェックして、互換性がない理由を確認できます。続行する前に、すべての違反を修正する必要があります。たとえば、バージョンまたはパッチの不一致は、アップグレードまたはデータパッチのユーティリティを実行して解決する必要があります。違反を修正してから、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を作成できます。 -
ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
スクリプトを実行します。このスクリプトは、PDBを初めてオープンする前に実行する必要があります。PDBが非CDBでない場合、
noncdb_to_pdb.sql
スクリプトを実行する必要はありません。noncdb_to_pdb.sql
スクリプトを実行するには、次のステップを実行します。-
PDBにアクセスします。
現在のユーザーには
SYSDBA
管理権限が必要であり、その権限は共通で付与されているか、またはPDBでローカルに付与されている必要があります。ユーザーは、接続時にAS SYSDBA
を使用して権限を行使する必要があります。 -
noncdb_to_pdb.sql
スクリプトを次のように実行します。@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
スクリプトによって、PDBのオープン、変更の実行、および変更の完了時にPDBのクローズが行われます。
-
-
新しいPDBを読取り/書込みモードでオープンします。
Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスは
NORMAL
になります。 -
PDBをバックアップします。
PDBは、バックアップしないとリカバリできません。
注意:
PDBの作成中にエラーが返される場合は、作成されるPDBが
UNUSABLE
状態である可能性があります。PDBの状態を確認するには、CDB_PDBS
またはDBA_PDBS
ビューを問い合せます。PDB作成のエラーの詳細は、アラート・ログを確認してください。使用できないPDBは削除するしかありません。使用できないPDBが作成される可能性があるので、同じ名前のPDBを作成しようとする前に、使用できないPDBを削除する必要があります。
非CDBアーキテクチャのOracle Databaseの手動アップグレード
CDBをインストールした後にこの手順を使用して、以前のリリースの非CDBアーキテクチャのOracle DatabaseをアップグレードしてPDBにし、そのPDBをCDBに接続します。
注意:
Oracle Database 20c以降、非CDBアーキテクチャはサポートされなくなりました。非CDB Oracle DatabaseをCDB上のPDBにアップグレードする必要があります。
この手順を使用する前に、次のステップを実行してください。
-
新しいリリースのOracle Databaseソフトウェアのインストール
-
新しいマルチテナント・アーキテクチャのOracleホームの準備
-
アップグレード前情報ツールの実行
ステップ:
-
アップグレード前情報ツールをまだ実行していない場合、実行します。次に進む前に、アップグレード前情報ツールの出力を確認して、出力に記載されているすべての問題を修正します。
たとえば、LinuxまたはUnixシステムで次のように指定します。
$ORACLE_HOME/jdk/bin/java -jar /opt/oracle/product/19.0.0/rdbms/admin/preupgrade.jar FILE TEXT
-
適切なバックアップ計画が準備されていることを確認します。
-
新しいOracleホームをまだ準備していない場合、準備します。
-
(条件付き) Oracle RAC環境の場合のみ、次のコマンドを入力して、
CLUSTER_DATABASE
の初期化パラメータ値をFALSE
に設定します。ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;
-
データベースを停止します。次に例を示します。
SQL> SHUTDOWN IMMEDIATE
-
ご使用のオペレーティング・システムがWindowsの場合、次のステップを実行します。
-
アップグレードするデータベースのOracleサービス
OracleServiceSID
を停止します(SID
はインスタンスの名前です)。たとえば、SID
がORCL
の場合、コマンド・プロンプトで次のように入力します。C:\> NET STOP OracleServiceORCL
-
コマンド・プロンプトで、
ORADIM
を使用してOracleサービスを削除します。たとえば、
SID
がORCL
の場合、次のコマンドを入力します。C:\> ORADIM -DELETE -SID ORCL
-
コマンド・プロンプトで新しいOracle Databaseリリースの
ORADIM
コマンドを使用して、新しいリリースのOracle Databaseのサービスを作成します。次の構文を使用します。
SID
はデータベースSID、PASSWORD
はシステム・パスワード、USERS
は最大ユーザー数に設定する値、ORACLE_HOME
はOracleホームです。C:\> ORADIM -NEW -SID SID -SYSPWD PASSWORD -MAXUSERS USERS -STARTMODE AUTO -PFILE ORACLE_HOME\DATABASE\INITSID.ORA
ほとんどのOracle Databaseサービスは、Oracleソフトウェア・インストール所有者の権限を使用してシステムにログオンします。サービスは、このユーザーの権限を使用して実行されます。
ORADIM
コマンドによって、このユーザー・アカウントのパスワードの入力を求められます。ORADIM
を使用して、他のオプションを指定できます。次の例で、
SID
がORCL
、password
(SYSPWD
)がTWxy5791
、ユーザーの最大数(MAXUSERS
)が10、およびOracleホーム・パスがC:\ORACLE\PRODUCT\20.0.0\DB
の場合、次のコマンドを入力します。C:\> ORADIM -NEW -SID ORCL -SYSPWD TWxy5791 -MAXUSERS 10 -STARTMODE AUTO -PFILE C:\ORACLE\PRODUCT\20.0.0\DB\DATABASE\INITORCL.ORA
ORADIM
によって、ORACLE_HOME\database
ディレクトリにログが書き込まれます。ログ・ファイルには、マルチテナント・コンテナ・データベース内のPDBの名前が含まれています。注意:
Oracleホームのユーザー・アカウントを使用してOracleホームを所有する場合、ORADIMコマンドによって、そのユーザーの名前とパスワードを求められます。次の表に、手動アップグレード時に
ORADIM
を使用するための変数を示します。表4-2 ORADIMの変数および機能
ORADIM変数 説明 -SID sid
アップグレードするデータベースのSIDと同じSID名 -SYSPWD password
アップグレードされたOracle DatabaseインスタンスのSYSパスワード。これは、
SYSDBA
権限で接続するユーザーのパスワードです。Oracle Databaseのデフォルトのセキュリティ設定では、パスワードは8文字以上である必要があります。
welcome
やoracle
などのパスワードを使用することはできません。- MAXUSERS value
SYSDBA
権限またはSYSOPER
権限を付与できるユーザー・アカウントの最大数。-PFILE oracle-home-path
アップグレードされたOracle DatabaseリリースのOracleホームの場所にあるパラメータ・ファイル(
PFILE
)の場所。-PFILE
オプションを使用して、Oracleホームの場所のドライブ文字を含む、フルパス名を指定する必要があります。
-
-
ご使用のオペレーティング・システムがLinuxまたはUNIXの場合は、次の内容を確認します。
-
ORACLE_SID
が正しく設定されていること。 -
oratab
ファイルが新しいOracleホームを指していること -
次の環境変数が新しいOracle Databaseディレクトリを指していること
-
ORACLE_HOME
-
PATH
-
-
クライアントで
$ORACLE_HOME
環境変数を設定するために使用するどのスクリプトも、新しいOracleホームを指している必要があります。
注意:
Oracle Real Application Clustersデータベースをアップグレードする場合、Oracle Real Application Clustersデータベースでインスタンスが構成されているすべてのOracle Grid Infrastructureノードでこれらのチェックを実行してください。
-
-
新しいOracle DatabaseリリースのOracleインストール所有者としてシステムにログインします。
-
SPFILE.ORAまたはINIT.ORAファイルを古いOracleホームから新しいOracleホームにコピーします。
-
新しいOracleホーム・ディレクトリのadminディレクトリから、新しいOracleホームでSQL*Plusを起動します。
次に例を示します。
$ cd $ORACLE_HOME/rdbms/admin $ pwd /u01/app/oracle/product/20.0.0/dbhome_1/rdbms/admin $ ./sqlplus
-
SYSDBA権限を持つアカウントを使用して、アップグレードするデータベースに接続します。
Enter user-hame: connect / as sysdba
-
アップグレード・モードで非CDB Oracle Databaseを起動します。
SQL> startup upgrade
サポートが終了した初期化パラメータを示すエラーが表示された場合は、そのサポートが終了した初期化パラメータを記録し、アップグレードを継続します。次回、データベースを停止したときに、そのサポートが終了した初期化パラメータを削除します。
注意:
UPGRADE
モードでデータベースを起動すると、以前のOracle Databaseリリースに基づいてデータベースがオープンされます。また、AS SYSDBA
セッションへのログインの制限、システム・トリガーの無効化、およびアップグレードの環境を準備するその他の操作も実行されます。 -
SQL*Plusを終了します。
次に例を示します。
SQL> EXIT
-
アップグレードに必要なアップグレード・オプションを使用して、パラレル・アップグレード・ユーティリティ(
catctl.pl
)スクリプトを実行します。Oracle_home/bin
にあるdbupgrade
シェル・コマンドを使用し、パラレル・アップグレード・ユーティリティをコマンドライン・シェル・コマンドとして実行できます。PATH環境変数を設定してOracle_home/bin
を含めると、コマンドを直接コマンドラインから実行できます。次に例を示します。$ dbupgrade
それ以外の場合は、
$ORACLE_HOME/bin/dbupgrade
を実行します。注意:
-
パラレル・アップグレード・ユーティリティ・コマンドを実行する際に、
-l
オプションを使用して、スプール・ログ・ファイルに使用するディレクトリを指定します。
-
-
アップグレードが成功した後、データベースは停止します。インスタンスを再起動して、通常の操作用にシステム・パラメータを再初期化します。次に例を示します。
SQL> STARTUP
このようにデータベースが停止してから再起動することで、すべてのキャッシュがフラッシュされ、バッファが消去されて、その他のハウスキーピング・アクティビティが実行されます。これらの操作は、アップグレードしたOracle Databaseソフトウェアの整合性と一貫性を保証するための重要な最終ステップです。
注意:
データベースを起動したときに、サポートが終了した初期化パラメータがリストされているメッセージが表示された場合は、再起動の前にサポートが終了した初期化パラメータをパラメータ・ファイルから削除します。ファイルを編集してパラメータを削除するために、必要に応じて
SPFILE
をPFILE
に変換します。 -
catcon.pl
を実行してutlrp
.sqlを起動し、残りの無効なオブジェクトをすべて再コンパイルします。次に例を示します。
$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlrp -d '''.''' utlrp.sql
-b utlrp
を使用してコマンドを実行しているため、ログ・ファイルutlrp0.log
はスクリプトが実行されるときに生成されます。ログ・ファイルには再コンパイルの結果が含まれています。 -
postupgrade_fixups.sql
を実行します。次に例を示します。SQL> @postupgrade_fixups.sql
注意:
スクリプトを別の場所に配置するように指定しなかった場合、スクリプトはデフォルトのパス
Oracle_base/cfgtoollogs/SID/preupgrade
に配置されます。Oracle_base
はOracleベースのホーム・パスで、SID
は一意のデータベース名です。 -
utlusts.sql
を実行します。スクリプトは、すべての問題が修正されたことを検証します。次に例を示します。
SQL> @$ORACLE_HOME/rdbms/admin/utlusts.sql
スクリプトを実行すると、アップグレードの結果を示すログ・ファイル
utlrp0.log
が生成されます。upg_summary.log
でアップグレード・レポートを確認することもできますデータベースの状態に関する情報を確認するには、アップグレードの完了後、いつでも必要な回数だけ
utlusts.sql
を実行します。utlusts.sql
スクリプトがエラーを返したり、ステータスがVALID
ではないコンポーネントを表示した場合や、コンポーネントに対してリストされたバージョンが最新のリリースではない場合、このガイドのトラブルシューティングに関する項を参照してください。 -
DBMS_DST
PL/SQLパッケージを使用してタイムゾーン・ファイルをアップグレードし、タイムゾーン・データファイルを最新の状態にします。アップグレード後にタイムゾーン・データ・ファイルを調整することもできます。 -
SQL*Plusを終了します
次に例を示します。
SQL> EXIT
-
(条件付き) Oracle Real Application Clustersデータベースをアップグレードする場合、次のコマンド構文を使用して、Oracle Clusterwareのデータベース構成をアップグレードします。
srvctl upgrade database -db db-unique-name -oraclehome oraclehome
この構文例で、
db-unique-name
は(インスタンス名ではなく)データベース名であり、oraclehome
は、データベースがアップグレードされるOracleホームの場所です。SRVCTL
ユーティリティでは、以前のリリースで使用される短いコマンドライン・インタフェース(CLI)オプションに加えて、GNUスタイルの長いオプションがサポートされています。 -
(条件付き) Oracle RAC環境の場合のみ、すべてのノードをアップグレードした後に、次のコマンドを入力してCLUSTER_DATABASEの初期化パラメータ値をTRUEに設定し、データベースを起動します(
db_unique_name
はOracle RACデータベースの名前)。ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE; srvctl start database -db db_unique_name
これで、データベースがアップグレードされました。アップグレード後の手順を完了する準備が整いました。
注意:
古いOracleソフトウェアを保持している場合、古いソフトウェアを使用してアップグレードしたデータベースを起動しないでください。必ず新しいOracle Databaseホームで起動コマンドを使用してOracle Databaseを起動します。
古いOracle環境を削除する前に、その環境のデータファイルをすべて新しいOracle Database環境に再配置してください。
参照:
データファイルの再配置の詳細は、『Oracle Database管理者ガイド』を参照してください
フリート・パッチ適用およびプロビジョニングを使用したOracle Databaseのアップグレード
Oracle Database 12cリリース2 (12.2)以上のリリースでは、フリート・パッチ適用およびプロビジョニングを使用して以前のリリースのOracle Databaseをアップグレードできるようになりました。
フリート・パッチ適用およびプロビジョニングを使用してデータベースをアップグレードするには、新しいOracle Databaseリリースのコピーを作成し、コマンドrhpctl upgrade database
を使用して以前のリリースのOracle Databaseをアップグレードします。このアップグレードはアウトオブプレース・アップグレードです。アップグレードが完了した後、リスナーと他の初期化変数が新しいOracleホームを指すように設定されます。フリート・パッチ適用およびプロビジョニング・イメージの作成方法の詳細は、『Oracle Clusterware管理およびデプロイメント・ガイド』を参照してください。
このステップの概要を使用することで、フリート・パッチとプロビジョニングを使用して以前のOracle Databaseリリースをアップグレードする方法を理解してください。
-
新しいOracle Databaseリリースをインストールします。
-
標準運用環境(SOE)の仕様に合わせてデータベースへのパッチ適用、テスト、構成を行います。
-
SOEリリースOracle Databaseホームからフリート・パッチ適用およびプロビジョニングのゴールド・イメージを作成します。
-
アップグレード対象のデータベースがあるサーバー上で新しいOracle Grid Infrastructureリリースへのアップグレードを実行します。このアップグレードはフリート・パッチ適用およびプロビジョニングを使用して実行できます。(注意: ご使用のOracle Grid Infrastrauctureソフトウェアは常にOracle Databaseソフトウェアと同じか、それより新しいリリースである必要があります。)
-
アップグレード対象の以前のリリースのOracle Databaseがあるサーバーに新しいリリースのOracle Databaseフリート・パッチ適用およびプロビジョニングのゴールド・イメージのコピーをデプロイします。
-
フリート・パッチ適用およびプロビジョニング・コマンド
rhpctl upgrade database
を実行します。このコマンドは、新しいリリースのフリート・パッチ適用およびプロビジョニングのゴールド・イメージを使用して、以前のリリースのデータベースをアップグレードします。新しいリリースのOracle Databaseゴールド・イメージを使用してプロビジョニングされたサーバー上の1つ、複数、またはすべての以前のリリースのOracle Databaseインスタンスをアップグレードできます。