9 以前のリリースへのOracle Databaseのダウングレード
Oracle Databaseのサポートされているリリースでは、最後にアップグレードしたリリースにデータベースをダウングレードできます。
- Oracle Databaseのダウングレードがサポートされているリリース
ダウングレード・オプションは、データベースがアップグレードされる前の元のOracle Databaseのリリースによって異なります。 - プライマリでのスタンバイ・データベースのダウングレードの準備
Oracle Data Guardスタンバイ・データベースを使用している場合は、スタンバイ・データベースをダウングレードするために使用できる手順をプライマリ・データベースで確認します - Oracle Databaseのダウングレード時のCOMPATIBLEパラメータの確認
アップグレード後にCOMPATIBLE
が変更された場合、Oracle Databaseをダウングレードできなくなります。 - Oracle Databaseのダウングレード前の全体バックアップの実行
サポートされている以前のリリースにダウングレードする前に、新しいOracle Databaseリリースの完全バックアップを実行することをお薦めします。 - スクリプトを使用したOracle Database 23cのダウングレード
ダウングレードを自動化するために、dbdowngrade
ユーティリティ・スクリプトが提供されています。以前のリリースと同様に、必要に応じてcatdwgrd.sql
を手動で実行することもできます。 - 単一のプラガブルOracle Database (PDB)のダウングレード
Oracle Databaseをダウングレードする場合、CDB全体をダウングレードせずに1つのPDBをダウングレードできます。 - Oracle APEXを含むPDBのダウングレード
このプロシージャを使用すると、Oracle APEX (以前のApplication Express)を含むPDBをダウングレードするときにINVALID OBJECTS OWNED BY APEX_050000
エラーを回避できます。 - Oracle Databaseのダウングレード後のタスク
Oracle Databaseのリリースをダウングレードした後、互換性、コンポーネントおよびサポートされるプロトコルに影響する変更により、追加のタスクを完了する必要がある場合があります。 - Oracle Databaseのダウングレードのトラブルシューティング
このトラブルシューティング情報を使用して、Oracle Databaseのダウングレード時に発生する可能性のある問題に対処します。
Oracle Databaseのダウングレードがサポートされているリリース
ダウングレード・オプションは、データベースがアップグレードされる前の元のOracle Databaseのリリースによって異なります。
ダウングレードがサポートされているリリース
非CDB Oracle Databaseは、Oracle Database 23cからOracle Database 21c、Oracle Database 19c、Oracle Database 18cおよびOracle Database 12cリリース2にダウングレードできます。
PDBまたはCDBは、Oracle Database 23cからOracle Database 21、Oracle Database 19c、Oracle Database 18cまたはOracle Database 12cリリース2 (12.2)にダウングレードできます。
ノート:
Oracle Database 21c以降、非CDBアーキテクチャはサポートされなくなりました。非CDB Oracle DatabaseをCDB上のPDBにアップグレードする必要があります。
次の表に、ダウングレードがサポートされているリリースに関する追加情報を示します。この表を使用する際には、「Oracle Databaseをダウングレードするときの非互換性の確認」で互換性についても確認してください。
表9-1 ダウングレードがサポートされているリリースおよびエディション
Oracle Databaseのリリースまたはエディション | ダウングレード(可/不可) | ノート |
---|---|---|
21 |
可 |
1) 21c (21.6)のインストール |
19 |
可 |
現時点では追加情報はありません。 |
18 |
可 |
使用しているプラットフォーム用のリリース更新パッチ32524155: DATABASE RELEASE UPDATE 18.14.0.0.0 (Patch)以降。詳細は、Oracle Databaseのダウングレード前に必要なステップの実行を参照してください。 |
12.2 |
可 |
PDBの場合、使用しているプラットフォーム用のリリース更新パッチDATABASE APR 2021 RELEASE UPDATE 12.2.0.1.210420 (Patch)以降。詳細は、Oracle Databaseのダウングレード前に必要なステップの実行を参照してください。 |
Oracle Enterprise Manager |
不可 |
サポートされている以前のリリースにダウングレードする場合、Oracle Enterprise Managerの制御を再構成する必要があります。 アップグレードを開始する前に、 |
Oracle Database Express Edition |
不可 |
Oracle Database Express Editionからアップグレードされたデータベースをダウングレードすることはできません。 |
ダウングレード前に確認する推奨事項
ダウングレード手順を開始する前に、両方のOracleホーム(ダウングレード元およびダウングレード先)に最新のリリース更新をインストールし、その後CDBをダウングレード、またはPDBを切断およびダウングレードすることをお薦めします。
最新リリース更新パッチは、My Oracle Supportからダウンロードできます。使用しているリリースについて、My Oracle Supportの「Primary Note for Database Proactive Patch Program (ドキュメントID 888.1)」を確認してください。
Oracle Database 23cの最小の互換性設定は12.2です。新しいOracle Databaseリリースの最小の互換性設定より前のリリースにダウングレードすることはできません。
サポートされている以前のリリースでは、Oracle Databaseのダウングレードについて、次の推奨事項があります。
- マルチテナント・アーキテクチャは、マルチテナント・コンテナ・データベース(CDB)およびプラガブル・データベース(PDB)用のアーキテクチャ機能を提供します。マルチテナント・アーキテクチャにアップグレードし、このリリースへアップグレードした後にcompatible初期化パラメータを最大レベルに設定した場合は、アップグレード後にデータベースをダウングレードできなくなります。
- Oracle Enterprise Managerのダウングレードはサポートされていません。サポートされている以前のリリースにダウングレードする場合、Oracle Enterprise Managerの制御を再構成する必要があります。
プライマリでスタンバイ・データベースをダウングレードする準備
Oracle Data Guardスタンバイ・データベースを使用している場合は、スタンバイ・データベースをダウングレードするために使用できる手順をプライマリ・データベースで確認します
スタンバイ・データベースを中断することなく、データベースをダウングレードできます。Oracle Data Guard構成にフィジカル・スタンバイ・データベースまたはロジカル・スタンバイ・データベースが存在する場合にOracle Databaseをダウングレードするには、Oracle Data Guard概要および管理のOracle Data Guard構成でのデータベースのパッチ適用、アップグレードおよびダウングレードの説明に従って、ダウングレード・シナリオの手順を使用します
Oracle Databaseのダウングレード時のCOMPATIBLEパラメータの確認
アップグレード後にCOMPATIBLE
が変更された場合、Oracle Databaseをダウングレードできなくなります。
COMPATIBLE
パラメータを更新して、Oracle Databaseリリースの互換性レベルを現在のリリースに設定した場合は、以前のリリースにダウングレードできません。この問題は、新しいリリースではデータ・ディクショナリが変更されており、ダウングレードを妨げるその他の機能変更がある可能性もあるために起こります。
ダウングレードする前にデータベースのCOMPATIBLE
パラメータ設定を確認するには、次のコマンドを入力します。
SQL> SELECT name, value, description FROM v$parameter WHERE name =
‘compatible’;
ノート:
Oracle ASMディスク・グループの場合、アップグレード後にcompatible.asm
パラメータをアップグレードされたリリース値に変更した場合、前のリリースにダウングレードすると、Oracle ASMディスク・グループをマウントできません。compatible.asm
の値は、ディスク・グループをマウントできるOracle ASMの最低限のリリースを設定します。
ダウングレードの一部として、ダウングレードされたリリース・レベルに新しいディスク・グループを作成し、ダウングレードされた互換性のあるASMディスク・グループにデータをリストアする必要があります。
Oracle Databaseのダウングレード前の全体バックアップの実行
サポートされている以前のリリースにダウングレードする前に、新しいOracle Databaseリリースの完全バックアップを実行することをお薦めします。
レベル0の完全バックアップを完了する時間がない場合は、少なくともレベル1のバックアップを完了してください。
スクリプトを使用したOracle Database 23cのダウングレード
ダウングレードを自動化するために、dbdowngrade
ユーティリティ・スクリプトが提供されています。以前のリリースと同様に、必要に応じてcatdwgrd.sql
を手動で実行することもできます。
- Dbdowngradeを使用した以前のリースへのOracle Databaseのダウングレード
以前のデータベース・リリースにダウングレードするには、ダウングレード・スクリプトdbdowngrade
を実行することをお薦めします。 - catdwgrd.sqlを使用したCDBまたは非CDB Oracle Databaseの手動ダウングレード
Oracle Databaseを手動でダウングレードする場合、または過剰なスレッドについて心配している場合は、手動でcatdwgrd.sql
スクリプトを実行できます。
dbdowngradeを使用したOracle Databaseの以前のリリースへのダウングレード
以前のデータベース・リリースにダウングレードするには、ダウングレード・スクリプトdbdowngrade
を実行することをお薦めします。
Oracleはダウングレード・ユーティリティ・スクリプトdbdowngrade
を提供しています。dbdowngrade
ユーティリティを使用すると、ダウングレードに適切な値が設定され、ダウングレードの開始方法が簡略化されます。具体的には、catcon.pl
への基礎となるコールが推奨値を使用することが保証されるため、過剰なスレッドが生成されるために発生するエラーが削減されます。この機能は、マルチテナント・アーキテクチャ(CDB)データベースのダウングレードに特に役立ちます。ダウングレードに使用されるリソースの数を制御する場合は、以前のリリースと同様にcatdwgrd.sql
スクリプトを手動で実行できます。以前のデータベース・リリースにダウングレードすると、その以前のリリースに対するリリース更新を適用できます。
dbdowngrade
シェル・コマンドはファイル・パス$ORACLE_HOME/bin
(LinuxおよびUNIXの場合)、および%ORACLE_HOME%\bin
(Windowsベースのシステムの場合)にあります。CDBをダウングレードする場合、スクリプトに引数として包含リストを指定できます。
マルチテナント・アーキテクチャ・データベース(CDB)をダウングレードする場合、dbdowngrade
スクリプトには、包含リストを使用するかどうかに応じて2つの動作があります。
-
包含リストがない場合。ダウングレードは、CDBで開いているすべてのコンテナ(PDBおよびCDB)で実行されます。
CDB全体をダウングレードする場合は、包含リストなしでダウングレードを実行します。このシナリオでは開いているコンテナがすべてダウングレードされます。
dbdowngrade
スクリプトを開始する前に、CDB内のすべてのPDBを手動で開く必要があります。 -
包含リストがある場合。ダウングレードは包含リスト内のPDBでのみ実行され、ダウングレード操作中に
CDB$ROOT
はダウングレードされません。包含リストにリストされているPDBのセットのみをダウングレードする場合は、包含リストでダウングレードを実行します。このシナリオでは、切断および接続のアップグレードを使用する場合、包含リストにリストされているPDBのセットのみがダウングレードされます。包含リストにないCDBおよびPDBは、その後のリリースではアップグレードされたままになります。
前提条件:
-
Oracle Database 23cからOracle Database 21c、Oracle Database 19c、Oracle Database 18cまたはOracle Database 12.2にダウングレードする場合、マルチテナント・コンテナ・データベース(CDB)またはCDB内の1つのプラガブル・データベース(PDB)にあるすべてのデータベースをダウングレードできます。Oracle Database 12cより前のOracle Databaseリリースでは、マルチテナント・アーキテクチャを使用しませんでした。
- 包含リストなしでダウングレードする場合、
dbdowngrade
スクリプトを実行する前にすべてのPDBコンテナを開く必要があります。
dbdowngrade
スクリプトの実行結果として、ユーティリティはcatdwgrd
およびcatcon.pl
を実行します。これらのスクリプトは、ダウングレードするリリースの推奨値を使用してダウングレードを実行します。
これらのスクリプトはログ・ファイルを作成します。-l filepath
を指定してdbdowngrade
を実行すると(filepath
はログ・ファイルを作成するパス)、dbdowngrade
によって指定したディレクトリが作成され、そこにログ・ファイルが配置されます。たとえば:
./dbdowngrade -l /databases/downgrade/logs
ログ・ファイルのディレクトリを指定しない場合、ダウングレード・スクリプトによって生成されるログ・ファイルは、次の3つのオプションのうち最初に見つかったディレクトリの下に、優先順位に従って配置されます。
-
orabasehome
コマンドで識別されるOracleベース・ホーム -
orabase
コマンドで識別されるOracleベース・ホーム -
oracle_home
コマンドで識別されるOracleホーム
$ $ORACLE_HOME/bin/orabasehome
/u01/app/oracle/product/23.0.0/dbhome_1
この例では、$ORACLE_BASEディレクトリは/u01/app/oracle/product/23.0.0/dbhome_1
で、ログは/u01/app/oracle/product/23.0.0/dbhome_1/cfgtoollogs/downgrade
にあります。ディレクトリでは、ログ・ファイルの先頭に文字列catdwgrd
が付きます。
dbdowngrade
スクリプトの実行方法をさらに管理するには、次の追加オプションを指定できます。
-d directory-path
catdwgrd.sql
ファイルを格納するディレクトリ・パス(directory-path
で定義)を指定します。-e
catdwgrd.sql
の実行中にエコーをオフにすることを指定します(デフォルトはonに設定されています)。-n number
dbdowngrade
コマンドで使用するパラレル・プロセスの数を指定します。デフォルトでは、プロセスの数はCPUの数を2で割った数(cpu_count/2
)になります。-b log-file-name-base
手動ダウングレード・スクリプトcatdwgrd
によって生成されたログ・ファイルに別のベース・ファイル名(変数log-file-name-base
に指定する値)を指定します。別のベース・ファイル名を指定しない場合、デフォルトのファイル・ベース名はcatdwgrd
です。-h
dbdowngradeでコマンド・オプションのリストを表示するように指定します。dbdowngadeスクリプトは、コマンド・オプションを画面に出力して終了します。
ノート:
-
読取り/書込みのOracleホーム: コマンド
orabaseconfig
およびorabasehome
は、両方ともORACLE_HOMEの環境設定を返します。 -
読取り専用Oracleホーム:コマンド:
orabaseconfig
は、パス$ORACLE_BASE/homes
内のOracleベースの読取り専用パス構成を返します。
catdwgrd.sqlを使用したCDBまたは非CDBのOracle Databaseの手動ダウングレード
Oracle Databaseを手動でダウングレードする場合、または過剰なスレッドについて心配している場合は、手動でcatdwgrd.sql
スクリプトを実行できます。
catdwgrd.sql
スクリプトを使用して、Oracle Databaseをサポートされている以前のメジャー・リリースまたは以前のリリース更新にダウングレードできます。
Oracle Database 23cからOracle Database 21c、19c、Oracle Database 18cまたはOracle Database 12.2にダウングレードする場合、マルチテナント・コンテナ・データベース(CDB)またはCDB内の1つのプラガブル・データベース(PDB)にあるすべてのデータベースをダウングレードできます。Oracle Database 12cより前のOracle Databaseリリースでは、マルチテナント・アーキテクチャを使用しませんでした。
ノート:
Oracle Database 21c以降、非CDBアーキテクチャはサポートされなくなりました。非CDB Oracle DatabaseをCDB上のPDBにアップグレードする必要があります。Oracle Database 23c以降では、Oracle Label Securityがサポートされなくなりました。
このプロシージャの完了時に、データベースがダウングレードされます。
単一のプラガブルOracle Database (PDB)のダウングレード
Oracle Databaseをダウングレードする場合、CDB全体をダウングレードせずに1つのPDBをダウングレードできます。
個々のPDBをダウングレードできます。たとえば、アップグレードしたCDBからPDBを切断し、PDBをダウングレードした後、これを以前のリリースのCDBに接続するか、そのPDBデータベースをスタンドアロン・データベースに変換することができます。
PDBのダウングレード
この手順の例では、PDBをリリース19cにダウングレードします。
-
PDBを
DOWNGRADE
モードで起動します。これを行うとき、CDBは標準モードになります。SQL> alter pluggable database CDB1_PDB1 open downgrade;
-
dbdowngrade
ユーティリティを使用するか、catcon.pl
を使用してcatdwgrd
を手動で実行して、PDBをダウングレードします。これらの各オプションでは、ダウングレードするPDBは
PDB1
です。-
dbdowngrade
ユーティリティを使用してダウングレードします。次のように
dbdowngrade
スクリプトを使用してPDBをダウングレードします。cd $ORACLE_HOME/bin ./dbdowngrade -c 'PDB1'
-
catdwgrd
でcatcon.pl
を使用して手動でダウングレードします。次のように
catdwgrd
を実行します。output-directory
は出力ディレクトリ、catdwgrd
はログ・ファイル・ベースです。$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -d $ORACLE_HOME/rdbms/admin -n 1 -l output-directory -e -b catdwgrd -c 'PDB1' catdwgrd.sql
例では、
catdwgrd
はcatcon.pl
とともに実行されます。-d
パラメータは、catcon.pl
にcatdwgrd
の入手先を指定します。-l
パラメータは、ログ・ファイルの出力ディレクトリを指定します(rdbms/admin
ディレクトリに書き込むかわりとなります)。2つのスクリプトを同時に一緒に実行するには、-r
パラメータを使用する必要があります。ダウングレードのログ・ファイルは、Oracleベース・ホーム(コマンド
orabasehome
またはorabase
で識別されるOracleベースか、コマンドoracle_home
で識別されるOracleホーム)にこの順番で配置されます。
-
-
PDBをクローズします。
PDBのCDBからの切断
このステップでは、ダウングレードしたPDBをOracle Database 23c CDBから切断します。
-
アップグレードしたCDBに接続します。
-
切断するPDBをクローズします。
SQL> alter pluggable database PDB1 close;
-
ダウングレードした19cのPDBを切断し、変数
path
をシステムのパスに置き換えます。SQL> alter pluggable database PDB1 unplug into 'path/pdb1.xml';
切断が完了すると、次のレスポンスが表示されます。
Pluggable database altered
ダウングレードされた19cのPDBの接続
このステップでは、ダウングレードされた19cのPDBを19cのCDBに接続します。これを行うには、このCDBでPDBを作成する必要があります。次の例は、PDB1というプラガブル・データベースの作成方法を示しています。
-
19cのCDBに接続します。
-
19cのPDBを接続します。
SQL> create pluggable database PDB1 using 'path/pdb1.xml';
このコマンドを実行すると、
「プラガブル・データベースが作成されました。」
が返されます。 -
PDBをアップグレード・モードで開きます。
SQL> alter pluggable database PDB1 open upgrade;
-
PDBに接続します。
SQL> alter session set container=PDB1;
-
PDBで
catrelod
を実行します。SQL> @$ORACLE_HOME/rdbms/admin/catrelod.sql
catrelod.sql
スクリプトによって、ダウングレードしたデータベース内の各データベース・コンポーネントに該当するバージョンが再ロードされます。 -
PDBで
utlrp
を実行します。SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
utlrp.sql
スクリプトは、以前INVALID
状態だったパッケージ、プロシージャ、型などのすべての既存のPL/SQLモジュールを、再コンパイルします。
関連項目
Oracle APEXを含むPDBのダウングレード
このプロシージャを使用すると、Oracle APEX (以前のOracle Application Express)を含むPDBをダウングレードするときにINVALID OBJECTS OWNED BY APEX_050000
エラーを回避できます。
PDBを以前のリリースにダウングレードした後、次のようなSQL文を入力してOracle APEXユーザーを削除します。ログ・ファイル・ベースはdrop_apex5
です。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -b drop_apex5
-c 'PDB1' -- --x'drop user apex_050000 cascade'
この例では、PDB名は「PDB1」
です。
Oracle Databaseをダウングレードする場合のダウングレード後の作業
Oracle Databaseのリリースをダウングレードした後、互換性、コンポーネントおよびサポートされるプロトコルに影響する変更により、追加のタスクを完了する必要がある場合があります。
- ダウングレード後のリリース更新およびその他のパッチの再適用
アップグレード後かつダウングレード前に、元のOracleホームに新しいパッチをインストールしていた場合は、ダウングレードが実行されて、catrelod.sql
が正常に完了したら、インストールしたパッチが適用されていることを確認します。 - Oracle Databaseのダウングレード後のOracle RACの再有効化
ダウングレード後、Oracle Real Application Clusters (Oracle RAC)を再有効化できます。 - Oracle Databaseのダウングレード後のOracle Database Vaultの再有効化
ダウングレード時にOracle Database Vaultを無効化するよう指示があった場合、これを実行する必要があります。 - データベースのOracle Grid Infrastructure構成のダウングレード
\ダウングレード後に、Oracle Grid Infrastructureの登録を変更して、以前のリリースのOracle Databaseホームでデータベース・リリースを起動する必要があります。 - Oracle Databaseのダウングレード後のOracle Enterprise Managerのリストア
この項で説明されているリストア作業が必要になるのは、ダウングレードを実行する際に、Oracle Enterprise Managerがホストで構成されている場合のみです。 - 以前のリリースへのOracle APEXのリストア
Oracle Databaseのアップグレードと同時にOracle APEX (以前のOracle Application Express)もアップグレードした場合、ダウングレード後に以前のリリースに戻すステップを実行する必要があります。 - ダウングレード後のディクショナリ統計の収集
ダウンロード後に高いパフォーマンスを保証するためには、次のプロシージャを使用してディクショナリ統計を収集します。 - ダウングレード後の修正したオブジェクト統計の再収集
ダウングレード後に、Oracle Databaseで代表的なワークロードを実行し、修正されたオブジェクト統計を再収集します。 - ダウングレード後の失効しているCBO統計の再収集
Oracle Databaseのダウングレードが完了した後に、Oracle Cost-Based Optimizer (CBO)統計を再収集することをお薦めします。 - ダウングレード後のレジストリ・コンポーネントの有効性の確認
レジストリ・コンポーネントの有効性を確認し、無効なコンポーネントを特定します。
ダウングレード後のリリース更新およびその他のパッチの再適用
アップグレード後かつダウングレード前に、元のOracleホームに新しいパッチをインストールしていた場合は、ダウングレードが実行されて、catrelod.sql
が正常に完了したら、インストールしたパッチが適用されていることを確認します。
新しいパッチをインストールした場合、datapatch
ツールを実行して、ダウングレードしたデータベースにこれらのパッチを適用します。アップグレード後にOracleホームのバイナリおよびファイルを変更しなかった場合、catrelod.sql
を実行した後にdatapatch
を実行する必要はありません。ただし、新しいパッチがインストールされているかどうか疑問がある場合は、datapatch
を実行します。パッチがデータベースに適用されていることを確認するために必要な回数だけdatapatch
を実行できない安全上の懸念はありません。
Oracle Databaseのダウングレード後のOracle RACの再有効化
ダウングレード後に、Oracle Real Application Clusters (Oracle RAC)を再度有効にできます。
ダウングレードにCLUSTER_DATABASE=FALSE
を設定したOracle RACデータベースでのダウングレードでは、CLUSTER_DATABASE=TRUE
を再度設定し、RACクラスタ内のすべてのインスタンスから開始できるようになりました。
Oracle Databaseのダウングレード後のOracle Database Vaultの再有効化
ダウングレード時にOracle Database Vaultを無効化するよう指示があった場合、これを実行する必要があります。
Oracle Database Vaultを使用している場合、ダウングレードする前にこれを無効にするように指示されている可能性があります。ダウングレード後にOracle Database Vaultを使用するには、登録して再度有効にする必要があります。
データベースのOracle Grid Infrastructure構成のダウングレード
\ダウングレード後に、Oracle Grid Infrastructureの登録を変更して、以前のリリースのOracle Databaseホームでデータベース・リリースを起動する必要があります。
新しいリリースのOracle Grid Infrastructureは、以前のリリースのOracle Databaseを実行できます。特にOracle Grid Infrastructureに関連する問題が発生しないかぎり、Oracle Grid Infrastructureをダウングレードすることはお薦めしません。ただし、Oracle Databaesリリースをダウングレードした後は、コマンドsrvctl downgrade database
を使用して、以前のリリースのOracleホームでデータベースを起動するようにOracle Clusterwareを構成する必要があります。
以前のリリースのOracleホームでデータベースを起動するようにOracle Clusterwareを構成するには、次のコマンド構文を使用します。$LATER_RELEASE_ORACLE_HOME
は新しいリリースのOracleホームへのパス(または環境変数)、old_release_oracle_home
は以前のリリースのOracleホームへのパス、old-release
は以前のリリースのOracle Databaseリリースです。
$LATER_RELEASE_ORACLE_HOME/bin/srvctl downgrade database -d $ORACLE_UNQNAME -o old_release_oracle_home -t old-release
たとえば:
$ORACLE_HOME/bin/srvctl downgrade database -d $ORACLE_UNQNAME -o /u02/app/oracle/product/12.2/db_1/ -t 12.2.0.4
Oracle Databaseのダウングレード後のOracle Enterprise Managerのリストア
この項で説明されているリストア作業が必要になるのは、ダウングレードを実行する際に、Oracle Enterprise Managerがホストで構成されている場合のみです。
Oracle Enterprise Managerをリストアするには、最初にOracle Enterprise Manager Configuration Assistant (EMCA)を実行してから、emdwgrd
ユーティリティを実行します。
- ダウングレード後のOracle Enterprise Managerのリストアの要件
12.1より前のリリースへのダウングレード後にOracle Enterprise Managerをリストアできるようにするには、アップグレード前にこれらの要件を満たす必要があります。 - EMCAの実行によるダウングレード後のOracle Enterprise Managerのリストア
これらのトピックを参照して、ダウングレード後にOracle Enterprise Managerをリストアするためのリストア・シナリオを選択します。 - Enterprise Manager Database Controlをリストアするためのemdwgrdユーティリティの実行
Oracle Enterprise Manager Database Controlおよびデータをリストアするには、emca -restore
の実行後にemdwgrd
ユーティリティを使用します。
ダウングレード後のOracle Enterprise Managerのリストアの要件
12.1より前のリリースへのダウングレード後にOracle Enterprise Managerをリストアできるようにするには、アップグレード前にこれらの要件を満たす必要があります。
emca -restore
を使用してOracle Enterprise Managerを以前の状態にリストアするには、次の要件を満たす必要があります。
-
アップグレードの前に、Oracle Enterprise Managerの構成ファイルおよびデータのバックアップを保存していること
-
この手順で新しいOracle Databaseリリースのホームに存在する
emca
バイナリを実行すること
Oracle Clusterwareシステムで、Oracle RACデータベースのOracle Enterprise Managerをリストアするには、emca -restore
を実行する前にsrvctl
を使用してデータベースを登録しておく必要があります。emca -restore
は、データベースのダウングレード先となる以前のOracle DatabaseリリースのORACLE_HOME/bin
ディレクトリから実行する必要があります。
適切なオプションを指定してemca -restore
コマンドを実行し、Oracle Enterprise Manager Database ControlまたはOracle Enterprise Manager Grid Controlを古いOracleホームにリストアします。
ダウングレードするデータベースが単一インスタンス・データベースか、Oracle RACデータベースか、Oracle ASMデータベースかによって、emca
の異なるオプションを指定します。
EMCAの実行によるダウングレード後のOracle Enterprise Managerのリストア
これらのトピックを参照して、ダウングレード後にOracle Enterprise Managerをリストアするためのリストア・シナリオを選択します。
- Oracle ASMがない単一インスタンスのOracle Databaseでのemcaの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースを管理します。 - Oracle ASMがないOracle RACデータベースでのEMCAの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースを管理します。 - 単一インスタンスのOracle ASMインスタンスでのEMCAの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースとストレージを管理します。 - Oracle RACインスタンス上のOracle ASMでのemcaの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースとストレージを管理します。 - Oracle ASMがある単一インスタンスのOracle Databaseでのemcaの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースとストレージを管理します。 - Oracle RACデータベースおよびOracle ASMインスタンスでのemcaの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースとストレージを管理します。
Oracle ASMがない単一インスタンスのOracle Databaseでのemcaの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースを管理します。
このコマンドを使用してEnterprise Manager Configuration Assistantを実行します。
ORACLE_HOME/bin/emca -restore db
次の情報の入力を求められます。
-
リストアするデータベースのOracleホーム
-
データベースのSID
-
リスナー・ポート番号
Oracle ASMがないOracle RACデータベースでのEMCAの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースを管理します。
この手順を使用してEnterprise Manager Configuration Assistantを実行します。
ORACLE_HOME/bin/emca -restore db -cluster
次の情報の入力を求められます。
-
リストアするデータベースのOracleホーム
-
データベースの一意の名前
-
リスナー・ポート番号
単一インスタンスのOracle ASMインスタンスでのEMCAの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースとストレージを管理します。
このコマンドを使用してEnterprise Manager Configuration Assistantを実行します。
ORACLE_HOME/bin/emca -restore asm
次の情報の入力を求められます。
-
リストアするデータベースのOracleホーム
-
Oracle ASMポート
-
Oracle ASM SID
Oracle RACインスタンス上のOracle ASMでのemcaの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースとストレージを管理します。
このコマンドを使用してEnterprise Manager Configuration Assistantを実行します。
ORACLE_HOME/bin/emca -restore asm -cluster
次の情報の入力を求められます。
-
リストアするデータベースのOracleホーム
-
Oracle ASMポート
Oracle ASMがある単一インスタンスのOracle Databaseでのemcaの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースとストレージを管理します。
このコマンドを使用してEnterprise Manager Configuration Assistantを実行します。
ORACLE_HOME/bin/emca -restore db_asm
次の情報の入力を求められます。
-
リストアするOracle DatabaseのOracleホーム
-
データベースのSID
-
リスナー・ポート番号
-
Oracle ASMポート
-
Oracle ASMホーム
-
Oracle ASM SID [+ASM]
Oracle RACデータベースおよびOracle ASMインスタンスでのemcaの実行
Enterprise Manager Configuration Assistant (emca
)を使用してデータベースとストレージを管理します。
このコマンドを使用してEnterprise Manager Configuration Assistantを実行します。
ORACLE_HOME/bin/emca -restore db_asm -cluster
次の情報の入力を求められます。
-
リストアするデータベースのOracleホーム
-
データベースの一意の名前
-
リスナー・ポート番号
-
Oracle ASMポート
-
Oracle ASM Oracleホーム
-
Oracle ASM SID [+ASM]
emca
の出力は、指定するオプションおよびプロンプトで入力する値によって様々です。Oracle RAC環境では、Oracle RACのすべてのクラスタ・メンバー・ノードでこのステップを繰り返す必要があります。
ここで、Oracle Enterprise Manager Database Controlおよびデータをリストアするためにemdwgrd
ユーティリティを実行する必要があります。
Enterprise Manager Database Controlをリストアするためのemdwgrdユーティリティの実行
Oracle Enterprise Manager Database Controlおよびデータをリストアするには、emca -restore
の実行後にemdwgrd
ユーティリティを使用します。
emdwgrd
を使用するには、次の操作を実行する必要があります。
-
ORACLE_HOMEおよび他の環境変数を、アップグレードが実行されたOracleホームを指すように設定します。
-
新しいOracle DatabaseリリースのOracleホームから
emdwgrd
ユーティリティを実行します。
次の手順は、LinuxおよびUNIX用です。これをWindowsで実行する場合は、emdwgrd
をemdwgrd.bat
に置き換えてください。
-
ORACLE_HOMEを、データベースがアップグレードされる前のOracleホームに設定します。
-
ORACLE_SIDを、アップグレード後にダウングレードされたデータベースのSIDに設定します。
-
データベースがアップグレードされる前のOracleホームを指すように、PATH、LD_LIBRARY_PATHおよびSHLIB_PATHを設定します。
-
新しいOracle DatabaseリリースのOracleホームに移動します。
cd $ORACLE_HOME/bin
-
次のいずれかの手順を使用して
emdwgrd
を実行します。-
単一インスタンス・データベースの場合は、次のコマンドを実行します。
SID
はアップグレード後にダウングレードされたデータベースのSIDで、save_directory
は、Database Controlのファイルおよびデータの保存時に選択した記憶域の場所へのパスです。emdwgrd -restore -sid SID -path save_directory -tempTablespace TEMP
-
Oracle RACデータベースの場合、クラスタ・ノード間のリモート・コピーが必要です。構成済のリモート・コピーを示す環境変数を定義します。たとえば:
setenv EM_REMCP /usr/bin/scp
その後、次のオプションを使用してemdwgrd -restoreを実行します。
emdwgrd -restore -tempTablespace TEMP -cluster -sid SID_OldHome -path save_directory
Oracleホームが共有デバイス上にある場合、-sharedを
emdwgrd
コマンドのオプションに追加します。
-
-
emdwgrd
により要求された場合は、SYSおよびSYSMANパスワードを入力します。 -
emdwgrd
が終了すると、Oracle Enterprise Manager Database Controlは古いOracleホームにダウングレードされます。
以前のリリースへのOracle APEXのリストア
Oracle Databaseのアップグレードと同時にOracle APEX (以前のOracle Application Express)もアップグレードした場合、ダウングレード後に以前のリリースに戻すステップを実行する必要があります。
データベースのダウングレード後にOracle APEXのダウングレードを完了するには、Oracle APEXインストレーション・ガイドにリストされたすべてのステップを実行して、お使いのOracle APEXのリリースを以前のリリースに戻します。戻すためのステップは、お使いのアーキテクチャが非CDBか、またはマルチテナント・アーキテクチャ(CDB) Oracle Databaseかによって異なります。
ノート:
データベースをアップグレードしたとき、同時にOracle APEXをアップグレードした場合、実行する必要があるのはこのステップのみです。
ダウングレード後のディクショナリ統計の収集
ダウンロード後に高いパフォーマンスを保証するためには、次のプロシージャを使用してディクショナリ統計を収集します。
ダウングレードしたリリースのデータ・ディクショナリ表の統計が収集されるように、データベースのダウングレード後にディクショナリ統計を収集することをお薦めします。
ノート:
ダウングレード・プロセスの後、データ・ディクショナリにはダウングレード済のディクショナリに保持されている変更が存在する可能性があることに注意してください。これらの変更は重要ではありません。ダウングレード済のデータ・ディクショナリは、以前のリリースのデータ・ディクショナリと機能的に同等です。
-
非CDBのOracle Databaseの場合:
DBMS_STATS.GATHER_DICTIONARY_STATS
プロシージャを使用して、統計を収集することをお薦めします。たとえば、次のSQL文を入力します。SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
-
CDB (マルチテナント・アーキテクチャ) Oracle Databaseの場合:
catcon
を使用して、マルチテナント・アーキテクチャ全体のデータ・ディクショナリ統計を収集することをお薦めします。コンテナ・データベースのすべてのPDBのディクショナリ統計を収集するには、次の構文を使用します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -b gatherstats -- --x"exec dbms_stats.gather_dictionary_stats"
特定のPDBに関するディクショナリ統計を収集するには、次のような構文を使用します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -c 'SALES1' -b gatherstats -- --x"exec dbms_stats.gather_dictionary_stats"
前述の例では、
SALES1
というデータベースを指定することにより、実行するコマンドのPDB包含リストを-c SALES1
オプションで指定しています。オプション-b gatherstats
では、ログの基底名を指定します。オプション--x
は、実行するSQLコマンドを指定します。SQLコマンドそのものは、引用符で囲みます。
ダウングレード後の修正したオブジェクト統計の再収集
ダウングレード後に、Oracle Databaseで代表的なワークロードを実行し、修正されたオブジェクト統計を再収集します。
固定オブジェクトは、X$表とその索引です。V$パフォーマンス・ビューは、X$を通じて定義されます。ダウングレード後に、修正したオブジェクト統計を再収集して、リストアしたデータベースのオプティマイザが正しい実行計画を生成できるようにします。こうした実行計画により、データベースのパフォーマンスを改善できます。代表的な統計を取得しないと、実行計画が最適ではなくなる可能性があり、パフォーマンス問題が発生する場合があります。
固定オブジェクトの統計を収集するには、DBMS_STATS.GATHER_FIXED_OBJECTS_STATS
PL/SQLプロシージャを使用します。DBMS_STATS.GATHER_FIXED_OBJECTS_STATS
では、init.ora/spfile
およびSPFILE
からすべての非表示またはアンダースコアのパラメータおよびイベントを削除するための推奨事項も表示されます。
固定オブジェクトの統計を収集するには、次のPL/SQLプロシージャを実行します。
SQL> execute dbms_stats.gather_fixed_objects_stats;
参照:
GATHER_FIXED_OBJECTS_STATS
プロシージャの使用の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
ダウングレード後の失効しているCBO統計の再収集
Oracle Databaseのダウングレードが完了した後に、Oracle Cost-Based Optimizer (CBO)統計を再収集することをお薦めします。
Oracle Databaseをアップグレードし、新しいCBO統計を収集すると、アップグレードしたデータベースは新しいデータベース統計を持ちます。アップグレードしたデータベースは新しいヒストグラム・タイプも含むことができます。このため、データベースをダウングレードしたときには、新しいリリースで収集した統計は前のリリースとは異なる可能性があります。この問題はデータ・ディクショナリ表と一般のユーザー表の両方に当てはまります。
GATHER_DATABASE_STATS
か、または通常、ディクショナリおよびアプリケーション・スキーマで失効している統計を更新するのに使用する収集コマンドを使用して、失効している統計を再収集します。
たとえば、ダウングレード後は次のようになります。
-
非CDBのOracle Databaseの場合: 統計を再収集するには、
GATHER_DATABASE_STATS
プロシージャを、オプション'GATHER STALE'
を指定して使用することをお薦めします。たとえば:SQL> execute dbms_stats.gather_database_stats(options=>'GATHER STALE');
-
CDB (マルチテナント・アーキテクチャ) Oracle Databaseの場合: マルチテナント・アーキテクチャ全体にわたるデータ・ディクショナリ統計を再収集するには、
catcon
の使用をお薦めします。コンテナ・データベースのすべてのPDBの失効しているディクショナリ統計を収集するには、次の構文を使用します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -b gatherstats -- --x"exec dbms_stats.gather_database_stats(options=>'GATHER STALE')"
特定のPDBに関するディクショナリ統計を収集するには、次のような構文を使用します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -c 'SALES1' -b gatherstats -- --x"exec dbms_stats.gather_database_stats(options=>'GATHER STALE')"
前述の例では、
SALES1
というデータベースを指定することにより、実行するコマンドのPDB包含リストを-c SALES1
オプションで指定しています。オプション-b gatherstats
では、ログの基底名を指定します。オプション--x
は、実行するSQLコマンドを指定します。SQLコマンドそのものは、引用符で囲みます。
ダウングレード後のレジストリ・コンポーネントの有効性の確認
レジストリ・コンポーネントの有効性を確認し、無効なコンポーネントを特定します。
CDB_REGISTRY
ビューを使用できます。DBA_REGISTRY
を使用して個々のPDBを確認することもできます。すべてのコンポーネントがVALID
またはOPTION OFF
のいずれかであることを確認します。
例9-1 CDB_REGISTRYビューを使用したCDBでのレジストリの確認
set line 200
set pages 1000
col COMP_ID format a8
col COMP_NAME format a34
col SCHEMA format a12
col STATUS format a10
col VERSION format a12
col CON_ID format 99
select CON_ID, COMP_ID, comp_name, schema, status, version from CDB_REGISTRY order by 1,2;
例9-2 DBA_REGISTRYビューを使用したPDBでのレジストリの確認
set line 200
set pages 1000
col COMP_ID format a8
col COMP_NAME format a34
col SCHEMA format a12
col STATUS format a10
col VERSION format a12
select COMP_ID, comp_name, schema, status, version from DBA_REGISTRY order by 1;
Oracle Databaseのダウングレードのトラブルシューティング
このトラブルシューティング情報を使用して、Oracle Databaseのダウングレード時に発生する可能性のある問題に対処します。
この項には、ダウングレード時に発生する可能性のある既知のエラーと、それらのエラーに対処するための回避策が含まれます。
- catdwgrd.sqlスクリプトを使用したOracle Databaseコンポーネントのダウングレード中のエラー
この項を使用して、ダウングレード中にcatdwgrd.sql
スクリプトを実行するときに発生するエラー(ORA-20001
: ダウングレードを続行できませんなど)のトラブルシューティングを行います。 - アップグレードの成功または失敗後のOracle Grid Infrastructure (Oracle Restart)のダウングレード
Oracle Restartをダウングレードするには、Oracle Grid Infrastructureを構成解除してから再インストールする必要があります。その後、データベースおよびサービスを戻すことができます。 - Oracle Messaging Gatewayを使用したデータベースのダウングレード・エラー
Oracle Messaging Gatewayを使用して構成されたデータベースをダウングレードすると、ORA-02303
エラーが発生することがあります。
catdwgrd.sqlスクリプトを使用したOracle Databaseコンポーネントのダウングレード中のエラー
この項を使用して、ダウングレード中にcatdwgrd.sql
スクリプトを実行するときに発生するエラー(ORA-20001
: ダウングレードを続行できませんなど)のトラブルシューティングを行います。
catdwgrd.sql
スクリプトはOracle Databaseのデータベース内のすべてのコンポーネントを、アップグレード前の当初のメジャー・リリースにダウングレードします。このスクリプトはデータ・ディクショナリをダウングレードする前に実行する必要があります。スクリプトの実行時に何か問題が発生した場合は、問題の原因を修正してからスクリプトを再実行します。
表示されるエラーには、ORA-39709
およびORA-06512
が含まれます。これらのエラーが発生した場合、ダウングレードを続行できません。
-
原因: データ・ディクショナリのダウングレード前にダウングレードする必要のある1つ以上のコンポーネントがダウングレードされていません。
-
処置: ログ・ファイルを確認して、
catdwgrd.sql
スクリプトが停止し、ダウングレードが中断する前に、どのようなエラーが発生したかを判断します。
これらの例を確認して、この問題の修正方法を理解します。
エラーには一般に、ダウングレードの完了を妨げている問題を修正するために何をする必要があるかが説明されています。エラー・メッセージの説明に従ってください。エラーの原因を修正した後に、catdwgrd.sql
スクリプトを再実行します。
たとえば、チェックによりCDB$ROOTのダウングレード中にCDBのダウングレードが失敗した場合は、エラー・メッセージの説明に従って、条件エラーを修正します。エラーを修正した後に、catcon.pl
を指定してcatdwgrd.sql
を再実行します。-c
オプションを使用して、包含リスト'CDB$ROOT PDB1'
でコマンドを実行します。-r
オプションを使用して、コマンドを最初にPDBで、次にCDB$ROOTで実行します。たとえば:
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -d $ORACLE_HOME/rdbms/admin -e -b catdwgrd -l /scratch/rac/downgradeLogs -c 'CDB$ROOT, PDB1, PDB2' -r catdwgrd.sql
例9-3 ORA-06512によるORA-20001エラー
ダウングレードが中止されました。ログ・ファイルを確認したところ、catdwgrd.sql
がこのエラーで終了したことがわかりました。
DECLARE * ERROR at line 1: ORA-20001: Downgrade cannot proceed -
Unified Audit Trail data exists. Please clean up the data first
using DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL. ORA-06512: at line 65
ORA-06512: at line 42
CDB$ROOT
およびすべてのPDBで統合監査証跡を削除する必要があります。
-
統合監査証跡の存在を確認します。
SQL> SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL; COUNT(*) ---------- 4538
-
CDB上で監査証跡を削除します。
たとえば、この場合監査証跡タイプは
DBMS_AUDIT.MGMT.AUDIT
になります。EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL DBMS_AUDIT_MGMT.AUDIT
-
CDB$ROOT
でcatdwngrd.sql
を実行します。PDBに依然として統合監査データが存在する場合、スクリプトはORA20001で失敗します。62 execute immediate 63 'select count(*) from audsys.'||'"'||tab_name||'"' into no_rows; 64 65 -- If audit trail has some data, raise the application error 66 IF no_rows > 0 THEN 67 RAISE_APPLICATION_ERROR(-20001, ErrMsg); 68 END IF; 69 END IF; 70 END IF; 71 EXCEPTION 72 WHEN NO_DATA_FOUND THEN 73 NULL; 74 WHEN OTHERS THEN 75 RAISE; 76 END; 77 / DECLARE * ERROR at line 1: ORA-20001: Downgrade cannot proceed - Unified Audit Trail data exists.Please clean up the data first using DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL. ORA-06512: at line 75
-
個々のPDBに接続し、統合監査証跡があるかどうかを確認します。すべてのPDBの統合監査証跡をクリアします。たとえば、PDB1という名前のPDBに統合監査証跡がある場合、次のようになります。
ALTER SESSION SET container = PDB1; SQL> SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL; COUNT(*) ---------- 1330
-
統合監査証跡を特定します。
SQL> CREATE TABLE UA_DATA AS (SELECT * FROM UNIFIED_AUDIT_TRAIL);
-
監査証跡を削除します。
この例では、監査証跡タイプは
DBMS_AUDIT_MGMT.AAUDIT_TRAIL_UNIFIED
であり、USE_LAST_ARCH_TIMESTAMP
値はFALSE
に設定されているため、最終アーカイブ・タイムスタンプを考慮せずにすべての監査レコードが削除され、CONTAINER
値がDBMS_AUDIT_MGMT.CONTAINER_ALL
に設定されているため、すべてのPDB上の監査レコードが削除されます。BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, USE_LAST_ARCH_TIMESTAMP => FALSE, CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_ALL END; /
-
PDBおよびCDBレベルで
catdwngrd.sql
を再実行します。たとえば:$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -c 'CDB$ROOT,PDB1' -d $ORACLE_HOME/rdbms/admin -e -b catdwgrd -l /u01/oracle/product/19.0.0/downgrade_logs -r catdwgrd.sql
-
CDBおよびPDBでスクリプトが正常に完了して
ORA-20001
エラーがログに表示されなくなるまで、監査証跡を検索して削除するプロセスを繰り返し、catdwgrd.sql
を実行します
アップグレードの成功または失敗後のOracle Grid Infrastructure (Oracle Restart)のダウングレード
Oracle Restartをダウングレードするには、Oracle Grid Infrastructureを構成解除してから再インストールする必要があります。その後、データベースおよびサービスを戻すことができます。
Oracle Messaging Gatewayを使用したデータベースのダウングレード・エラー
Oracle Messaging Gatewayを使用して構成されたデータベースをダウングレードすると、ORA-02303
エラーが発生することがあります。
Oracle Messaging Gatewayオブジェクトを含むOracle Databaseをダウングレードすると、次のエラーが発生することがあります。
ORA-02303: cannot drop or replace a type with type or table dependents
- 原因
catrelod.sql
スクリプトで、以前のOracle Databaseリリースとは異なるタイプのOracle Messaging Gatewayオブジェクトを再ロードしようとしています。 - 処置 処置は必要ありません。このエラーは無視できます。