スクリプトを使用したOracle Database 23aiのダウングレード

ダウングレードを自動化するために、dbdowngradeユーティリティ・スクリプトが提供されています。以前のリリースと同様に、必要に応じて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は、その後のリリースではアップグレードされたままになります。

前提条件:

  • マルチテナント・コンテナ・データベース(CDB)内のすべてのデータベース、またはCDB内の1つのプラガブル・データベース(PDB)をダウングレードできます。
  • COMPATIBLEパラメータを増やした後、データベースのダウングレードはできません。
  • アップグレード元のリリースにのみダウングレードできます。
  • 包含リストなしでダウングレードする場合、dbdowngradeスクリプトを実行する前にすべてのPDBコンテナを開く必要があります。
  1. Oracle DatabaseのOracleホーム・ディレクトリの所有者として、システムにログインします。
  2. ORACLE_HOME環境変数を、アップグレードしたOracle DatabaseリリースのOracleホームに設定します
  3. ORACLE_SID環境変数を、ダウングレードするOracle Databaseのシステム識別子(SID)に設定します。

    ノート:

    クラスタ・データベースをダウングレードしている場合は、データベースを完全に停止し、CLUSTER_DATABASE初期化パラメータをFALSEに設定します。ダウングレードが完了した後、このパラメータの設定をTRUEに戻します。

  4. SQL*Plusを使用して、SYSDBA権限を持つユーザーとして、ダウングレードするデータベース・インスタンスに接続します。
    sqlplus sys as sysdba
    Enter password: password
    
  5. 使用するOracle Databaseインスタンス・タイプに応じて、SQL*Plusで次のコマンドを発行し、ダウングレード・モードでインスタンスを起動します。起動中のエラーの場合、PFILEオプションを使用して初期化パラメータ・ファイルの場所を指定するように求められる可能性があります。
    SQL> startup downgrade pfile=pfile_name
    SQL> alter pluggable database all open downgrade;

    初期化パラメータ・ファイルPFILEの場所を指定します。

    参照:

    初期化パラメータの起動時の指定および初期化パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください

  6. デフォルト値または包含リストを使用してdbdowngradeスクリプトを起動します。

    包含リストを使用する場合は、CDB$ROOTを包含リストに含めないでください。

    たとえば:

    Running with default values

    LinuxおよびUnix

    $cd $ORACLE_HOME/bin 
    $./dbdowngrade

    Microsoft Windows

    $cd %ORACLE_HOME%\bin
    $dbdowngrade.cmd
    Running with inclusion list for CDB

    LinuxおよびUnix

    $cd $ORACLE_HOME/bin 
    $./dbdowngrade –c 'PDB1 PDB2 PDBN'

    Microsoft Windows

    $cd %ORACLE_HOME%\bin 
    $dbdowngrade.cmd –c "PDB1 PDB2 PDBN"
  7. 次の環境変数がダウングレード先のリリースのディレクトリを指定するように変更します。
    • ORACLE_HOME
    • PATH

    また、oratabファイル、およびORACLE_HOME値を設定するすべてのクライアント・スクリプトが、ダウングレードされたOracleホームを指していることを確認します。

  8. 下位バージョンのOracleホームにあるデータベースをアップグレード・モードで起動します。catcon.plを実行して、CDBに対してcatrelod.sqlを実行します。
    $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -e -n 1 -b catrelod -d $ORACLE_HOME/rdbms/admin catrelod.sql

    このコマンドにより、ダウングレードしたデータベース内の各データベース・コンポーネントに該当するバージョンが再ロードされます。

  9. utlrp.sqlスクリプトを実行して、残りのすべてのストアドPL/SQLおよびJavaコードを再コンパイルします:
    $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl 1 -e -b utlrp -d $ORACLE_HOME/rdbms/admin utlrp.sql

    utlrp.sqlスクリプトは、以前INVALID状態だったパッケージ、プロシージャ、型などのすべての既存のPL/SQLモジュールを、再コンパイルします。ログ・ファイルutlrp0.logが生成されます。そのログ・ファイルには再コンパイルの結果がリストされます。

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を使用したOracle Databaseの手動ダウングレード

Oracle Databaseを手動でダウングレードする場合、または過剰なスレッドについて心配している場合は、手動でcatdwgrd.sqlスクリプトを実行できます。

手動のcatdwgrd.sqlスクリプトを使用して、Oracle Databaseをサポートされている以前のメジャー・リリースまたは以前のリリース更新にダウングレードできます。

Oracle Database 23aiからOracle Database 21cにダウングレードする場合、マルチテナント・コンテナ・データベース(CDB)またはCDB内の1つのプラガブル・データベース(PDB)にあるすべてのデータベースをダウングレードできます。Oracle Database 12cより前のOracle Databaseリリースでは、マルチテナント・アーキテクチャを使用しませんでした。

ノート:

Oracle Database 21c以降、非CDBアーキテクチャはサポートされなくなりました。非CDBをアップグレードしてPDBに変換した場合、可能なのはPDBへのダウングレードのみです。非CDBからPDBへの変換は元に戻せません。Oracle Database 23ai以降では、Oracle Label Securityがサポートされなくなりました。

  1. Oracle DatabaseのOracleホーム・ディレクトリの所有者として、システムにログインします。
  2. ORACLE_HOME環境変数を、アップグレードしたOracle DatabaseリリースのOracleホームに設定します
  3. ORACLE_SID環境変数を、ダウングレードするOracle Databaseのシステム識別子(SID)に設定します。
  4. システム・プロンプトで、ORACLE_HOME/rdbms/adminディレクトリへ移動します(ORACLE_HOMEはシステムのOracleホームです)。

    ノート:

    クラスタ・データベースをダウングレードしている場合は、データベースを完全に停止し、CLUSTER_DATABASE初期化パラメータをFALSEに設定します。ダウングレードが完了した後、このパラメータの設定をTRUEに戻します。

  5. SQL*Plusを使用して、SYSDBA権限を持つユーザーとして、ダウングレードするデータベース・インスタンスに接続します。
    sqlplus sys as sysdba
    Enter password: password
    
  6. 使用するOracle Databaseインスタンスに応じて、SQL*Plusで次のコマンドを発行し、ダウングレード・モードでインスタンスを起動します。起動中のエラーの場合、PFILEオプションを使用して初期化パラメータ・ファイルの場所を指定するように求められる可能性があります。
    SQL> startup downgrade pfile=pfile_name
    SQL> alter pluggable database all open downgrade;

    初期化パラメータ・ファイルPFILEの場所を指定します。

    参照:

    初期化パラメータの起動時の指定および初期化パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください

  7. 次のコマンドを使用して、ログ・ファイル・ベースとしてcatdwgrdを使用してCDBでのダウングレードを開始します。
    $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -d $ORACLE_HOME/rdbms/admin -e -b catdwgrd -l output-directory -r catdwgrd.sql
    

    この例では、catdwgrd.sqlcatcon.plを使用してコンテナに対して実行されます。catcon.plユーティリティを使用してコマンドを実行するには、まずPerlを起動します。-dパラメータは、catcon.plcatdwgrdの入手先を指定します。-lパラメータは、ログ・ファイルの出力ディレクトリを指定します(rdbms/adminディレクトリに書き込むかわりとなります)。-rパラメータを指定すると、catdwgrdはまずPDBで実行され、次にCDB_ROOTで実行されます。

    CDBをダウングレードするときには-rパラメータを使用してcatdwgrdを実行してください。–rパラメータはスクリプトが実行されるデフォルトの順番を変更し、まずすべてのPDBでスクリプトが実行され、その後にCDB_ROOTで実行されます。

    ノート:

    • Oracle Databaseリリースに付属するcatdwgrd.sqlスクリプトのバージョンを使用します。

    • CDBをダウングレードするときには-rパラメータを使用してcatdwgrdを実行してください。

    • Oracle Databaseリリース環境でcatdwgrd.sqlを実行します。

    • catdwgrd.sqlスクリプトはOracle Databaseのデータベース内のすべてのコンポーネントを、アップグレード前のリリースにダウングレードします。ダウングレードはアップグレード前のサポートされているメジャー・リリースか、またはアップグレード前のパッチ・リリースのいずれかです。

    マルチテナント環境のデータベースにダウングレードしており、catdwgrd.sqlコマンドでエラーが発生した場合は、エラー・メッセージを確認します。続行する前に、CDB$ROOTまたはPDBにどのような問題があるかを調べます。「Oracle Databaseのダウングレードのトラブルシューティング」の項を確認します。エラーで指摘された問題を修正します。エラーを解決した後、構文catcon.pl -c 'cdb,pdb' -rを使用して、catcon.plユーティリティを指定したcatdgwrd.sqを再実行します。

    注意:

    コンポーネントのダウングレードが失敗すると、ORA-39709エラーが表示されます。Oracle Databaseデータ・ディレクトリをダウングレードせずにSQL*Plusセッションが終了します。すべてのコンポーネントは、Oracle Databaseのデータ・ディクショナリをダウングレードする前に、正常にダウングレードする必要があります。catdwgrd.sqlスクリプトを再実行する前に、問題を特定して修正します。

  8. インスタンスを停止します。
    SQL> SHUTDOWN IMMEDIATE
  9. SQL*Plusを終了します。
  10. ご使用のオペレーティング・システムがLinuxまたはUNIXの場合、次の環境変数がダウングレード先のリリースのディレクトリを指定するように変更してください。
    • LinuxシステムおよびUNIXシステム

      次の環境変数がダウングレード先のリリースのディレクトリを指定するように変更します。

      • ORACLE_HOME

      • PATH

      また、oratabファイル、およびORACLE_HOME値を設定するすべてのクライアント・スクリプトが、ダウングレードされたOracleホームを指していることを確認します。

      参照:

      ご使用のオペレーティング・システムでのその他の重要な環境変数の設定に関する詳細は、ご使用のオペレーティング・システムの『Oracle Databaseインストレーション・ガイド』を参照してください

    • Microsoft Windowsシステム

      1. すべてのOracleサービス(Oracle DatabaseのOracleServiceSID Oracleサービスなど)を停止します。SIDはインスタンス名です。

        たとえば、SIDORCLの場合、コマンド・プロンプトで次のように入力します。

        C:\> NET STOP OracleServiceORCL
        

        参照:

        WindowsでのOracleサービスの停止の詳細は、『Oracle Database管理者リファレンスfor Microsoft Windows』を参照してください

      2. コマンド・プロンプトでコマンドORADIMを発行して、Oracleサービスを削除します。

        たとえば、SIDORCLの場合、次のコマンドを入力します。

        C:\> ORADIM -DELETE -SID ORCL
        

        コマンド・プロンプトでコマンドORADIMを使用して、ダウングレードするデータベースのOracleサービスを作成します。

        C:\> ORADIM -NEW -SID SID -INTPWD PASSWORD -MAXUSERS USERS
        -STARTMODE MANUAL -PFILE ORACLE_HOME\DATABASE\INITSID.ORA

        ORADIMの構文には次の変数が含まれます。

        変数 説明

        SID

        ダウングレードするデータベースのSIDと同じシステム識別子(SID)名です。

        PASSWORD

        データベース・インスタンスのパスワードです。このパスワードはSYSDBA権限で接続するユーザー用のパスワードです。-INTPWDオプションは必須ではありません。パスワードの入力を求められた場合は、このWindowsプラットフォームの標準のユーザー・アカウントのパスワードを使用します。

        USERS

        SYSDBA権限およびSYSOPER権限を付与できるユーザーの最大数です。

        ORACLE_HOME

        ダウングレード先のデータベースのOracleホーム・ディレクトリです。-PFILEオプションを使用して、(Oracleホーム・ディレクトリがマウントされているドライブを含む)フルパス名を指定する必要があります。

        初期化パラメータの起動時の指定および初期化パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください。

        たとえば、SIDORCLPASSWORDTWxy5791USERSの最大数が10ORACLE_HOMEディレクトリがC:\ORANTの場合、次のコマンドを入力します。

        C:\> ORADIM -NEW -SID ORCL -INTPWD TWxy5791 -MAXUSERS 10
             -STARTMODE AUTO -PFILE C:\ORANT\DATABASE\INITORCL.ORA

        ノート:

        ORADIMコマンドによって、Oracleホームのユーザー・アカウントのパスワードの入力が求められます。ORADIMを使用して、他のオプションを指定できます。

        データベースをダウングレードする際に、Windowsレジストリの設定を変更する必要はありません。必要な変更は、すべてORADIMユーティリティによって自動的に行われます。

        参照:

        ORADIMを使用したOracle Databaseインスタンスの管理の詳細は、Oracle Database管理者のリファレンスfor Microsoft Windowsを参照してください

  11. ダウングレード先のリリースの構成ファイル(パラメータ・ファイル、パスワード・ファイルなど)をリストアします。

    データベースがOracle RACデータベースの場合は、次のコマンドを実行して、データベースを単一インスタンス・モードに戻します。

    SET CLUSTER_DATABASE=FALSE

    ノート:

    クラスタ・データベースをダウングレードしている場合は、このクラスタ・データベースのインスタンスが構成されているすべてのノードでこのステップを実行してください。初期化パラメータCLUSTER_DATABASEの値をFALSEに設定します。ダウングレードが完了した後、この初期化パラメータの設定をTRUEに戻します。

    参照:

    Oracle RACでの初期化パラメータの使用の詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください

  12. システム・プロンプトで、ダウンロード先である以前のリリースのOracleホーム・ディレクトリのadminディレクトリに変更します。(ORACLE_HOME/rdbms/adminORACLE_HOMEは以前のリリースのOracleホームのパスです。)
  13. SQL*Plusを開始して、SYSDBA権限を持つユーザーとして、データベース・インスタンスに接続します。
    connect / as sysdba
    startup upgrade;
    alter pluggable database all open upgrade;
    
  14. catcon.plを使用して、CDBデータベースに対してcatrelod.sqlを実行します。

    例:

     $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -e -b catrelod -d $ORACLE_HOME/rdbms/admin catrelod.sql

    このコマンドにより、ダウングレードしたデータベース内の各データベース・コンポーネントに該当するバージョンが再ロードされます。

  15. 通常の操作のために、インスタンスを停止し、再起動します。
    SQL> SHUTDOWN IMMEDIATE
    SQL> STARTUP
    

    オプションPFILEを使用して、初期化パラメータ・ファイルの場所を指定するように求められる場合があります。

    参照:

    初期化パラメータの起動時の指定および初期化パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください

  16. Oracle Label Securityを使用するようにデータベースを構成した場合、このステップを完了します。Oracle Label Securityを使用するようにデータベースを構成しなかった場合、次のステップに進みます。
    1. olstrig.sqlスクリプトを、Oracle Database 12cのOracleホームから、データベースをダウングレードするリリース番号のOracleホームにコピーします。
    2. ダウングレード・リリースのOracleホームからolstrig.sqlを実行し、Oracle Label Securityのポリシーを適用して、表のDMLトリガーを再作成します。
      SQL> @olstrig.sql
      
  17. utlrp.sqlスクリプトを実行して、残りのすべてのストアドPL/SQLおよびJavaコードを再コンパイルします。

    ログ・ファイル・ベースutlrpを使用して、CDBでこの手順を使用します:

    $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -e -b utlrp -d $ORACLE_HOME/rdbms/admin utlrp.sql

    utlrp.sqlスクリプトは、以前INVALID状態だったパッケージ、プロシージャ、型などのすべての既存のPL/SQLモジュールを、再コンパイルします。ログ・ファイルutlrp0.logが生成されます。そのログ・ファイルには再コンパイルの結果がリストされます。

    Oracle Database 19cにダウングレードして、データベースにOracle APEX (以前のApplication Express)が存在する場合、ultrp.sqlの実行が完了した後、スクリプトsys.validate_apexを実行してAPEXダウングレードを検証します。APEXは、Oracle Database 19cに対してのみ手動で検証する必要があります。その他のリリースでは、sys.validate_apexを手動で実行する必要はありません。

  18. SQL*Plusを終了します。

このプロシージャの完了時に、データベースがダウングレードされます。