6 以前のリリースへのOracle Databaseのダウングレード

Oracle Databaseのサポートされているリリースでは、最後にアップグレードしたリリースにデータベースをダウングレードできます。

たとえば、最近、リリース11.2.0.4からOracle Database 12cリリース2 (12.2)にアップグレードし、COMPATIBLE初期化パラメータを12.1以上に変更しなかった場合、リリース11.2.0.4にダウングレードできます。Oracle Database 12cのリリースを12.1.0.2から12.2.0.1にアップグレードし、COMPATIBLE初期化パラメータを12.2.0.1に変更しなかった場合、リリース12.1.0.2にダウングレードできます。

参照:

オペレーティング・プラットフォームに固有のダウングレード情報は、ご使用のオペレーティング・システムの『Oracle Databaseインストレーション・ガイド』を参照してください

トピック:

Oracle Databaseのダウングレードがサポートされているリリース

データベースがアップグレードされる前の元のOracle Databaseのリリースに基づいて、メジャー・リリースとリリース更新またはパッチ・セット・リリースの両方をダウングレードできます。

非CDB Oracle Databaseは、Oracle Database 18cからOracle Database 12cおよびOracle Database 11gリリース11.2.0.4にダウングレードできます。

PDBまたはCDBは、Oracle Database 18cからOracle Database 12cリリース2 (12.2.0.1)にダウングレードできます。

PDBまたはCDBは、Oracle Database 12cリリース12.1.0.2にダウングレードできますが、12.1.0.1にはダウングレードできません。

ノート:

Oracle Database 12cリリース1 (12.1)以上では、非CDBアーキテクチャは非推奨です。今後のリリースでサポートが終了する可能性があります。

次の表に、ダウングレードがサポートされているリリースに関する追加情報を示します。この表を使用する際には、「Oracle Databaseをダウングレードするときの非互換性の確認」で互換性についても確認してください。

表6-1 ダウングレードがサポートされているリリースおよびエディション

Oracle Databaseのリリースまたはエディション ダウングレード(可/不可) ノート

12.2.0.1および12.1.0.2

COMPATIBLE初期化パラメータを12.1.0.2に設定した後は、データベースをダウングレードできません。

非CDBは、18.1または12.2から12.1.0.2、12.1.0.1または11.2.0.4 (サポートされているすべてのアップグレード・リリース)にダウングレードできます。

PDBは、18.1または12.2から12.1.0.2にダウングレードできますが、12.1.0.1にはダウングレードできません。

CDBは、18.1または12.2から12.1.0.2にダウングレードできますが、12.1.0.1にはダウングレードできません。

CDBをダウングレードする前に、またはPDBを切断してダウングレードする前に、最新のリリース更新、リリース・リビジョン、バンドル・パッチまたはパッチ・セット更新 (BPまたはPSU)をインストールします。パッチは、My Oracle Supportでダウンロードできます。My Oracle Support ノート756671.1を参照して、最新のパッチ・セットを取得してください。

新しいOracle Databaseリリースの最小の互換性設定より前のリリースにダウングレードすることはできません。

12.1.0.1

はい(非CDB)

いいえ(CDBとPDB)

Oracle Database 12cリリース1 (12.1.0.1)のPDBを12.1.0.1データベースから切断し、同じPDBを12.1.0.2データベースに接続してアップグレードすると、12.1.0.2データベースのCOMPATIBLE初期化パラメータが12.1.0.1.0より大きい場合はこのPDBをダウングレードできません。

PDBは、12.2から12.1.0.1にダウングレードできません。

CDBは、12.2から12.1.0.1にダウングレードできません。

Oracle Enterprise Manager

不可

サポートされている以前のリリースにダウングレードする場合、Oracle Enterprise Managerの制御を再構成する必要があります。

アップグレードを開始する前に、emdwgrdユーティリティを使用して、ダウングレード後にOracle Enterprise Manager Database Control (DB Control)をリストアできるように、DB Controlファイルおよびデータを保存する必要があります。

Oracle Database Express Edition

不可

Oracle Database Express Editionからアップグレードされたデータベースをダウングレードすることはできません。

サポートされている以前のリリースでは、Oracle Databaseのダウングレードについて、次の推奨事項があります。

  • このリリースにはマルチテナント・アーキテクチャが含まれ、マルチテナント・コンテナ・データベース(CDB)およびプラガブル・データベース(PDB)用のアーキテクチャ機能が提供されます。このようなアーキテクチャの変更のため、このリリースへのアップグレード後にCOMPATIBLE初期化パラメータを最大レベルに設定すると、ダウングレードできなくなります。

  • このリリースでは、SELECTに加えて、新しいオブジェクト権限READが含まれています。アップグレード後、このオブジェクト権限の次の影響に注意してください。

    • SELECTおよびREADオブジェクト権限を持っている場合、READ権限は削除されます。

    • 前にREADオブジェクト権限のみを持っていた場合、READオブジェクト権限はSELECTオブジェクト権限に変換されます。

    READおよびSELECTオブジェクト権限の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • アップグレードするデータベースにOracle XML DBがインストールされていない場合、ダウングレード中にOracle XML DBはアンインストールされます。たとえば、Oracle Database 11gリリース2 (11.2)とともにOracle XML DBをインストールしなかった場合、XML DBはOracle Database 12cとともにインストールされます。データベースをダウンロードする場合は、ダウングレードの一部としてOracle XML DBがアンインストールされます。Oracle XML DBはOracle Database 12cリリース1 (12.1)以降のリリースでは、デフォルトで組み込まれています。

  • Oracle Database 12cへのアップグレード時に、Database (DB) Controlリポジトリは削除されます。以前のリリースにダウングレードする場合、Database (DB) Controlを再構成してダウングレード後も使用できるようにする必要があります。

  • Oracle Enterprise Managerのダウングレードはサポートされていません。サポートされている以前のリリースにダウングレードする場合、Oracle Enterprise Managerの制御を再構成する必要があります。

注意:

アップグレードを開始する前に、ダウングレードが可能になるように、互換性に関する次の情報を理解しておく必要があります。

  • COMPATIBLE初期化パラメータを12.1.0.2に設定した後は、データベースをダウングレードできません。

  • プラガブル・データベース(PDB)をダウングレードできるのは、互換性が12.1.0.1に設定されている場合のみです。

  • リリース12.1.0.1のPDBを12.1.0.1データベースから切断した後、このPDBをリリース12.1.0.2データベースに接続した場合、このPDBをダウングレードすることはできません。

  • CDBのダウングレード、またはPDBを切断してダウングレードを試行する前に、最新のバンドル・パッチまたはパッチ・セット更新 (BPまたはPSU)をインストールします。My Oracle Supportノート756671.1を参照して、最新のパッチ・セットを取得してください。

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 ASMディスク・グループの互換性の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください

Oracle Databaseのダウングレード前の全体バックアップの実行

サポートされている以前のリリースにダウングレードする前に、新しいOracle Databaseリリースの完全バックアップを実行することをお薦めします。

参照:

RMANバックアップの実行方法は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

Oracle Databaseをダウングレードする前に必要なステップの実行

アップグレード前の以前のリリースにOracle Databaseをダウングレードする前に、ここに説明されている必要な準備ステップを完了します。

ダウングレードを開始する前に、データベース・リリース間の非互換性を解決しておく必要があります。たとえば、状況に応じて、ダウングレードを開始する前に、データベースのコンポーネントを無効化する必要があるかどうかを判断します。

  1. データベースでOracle Database Vaultを有効化している場合は、データベースをダウングレードする前にOracle Database Vaultを無効化します。

    DBA_DV_STATUSを使用して、Oracle Database Vaultが有効になっているかどうかを確認します。

    SQL> SELECT * FROM DBA_DV_STATUS;
    

    出力がTRUEの場合は、Oracle Database Vaultが有効化されているため、無効化する必要があります。

    マルチテナント・アーキテクチャのOracle Databaseシステムで、CDB$ROOTCDB_DV_STATUSを使用して、CDBに接続されているすべてのPDBのOracle Database Vaultステータスを検出します。

    SQL> SELECT * FROM CDB_DV_STATUS;
    
  2. 統合監査が有効化されている場合は、統合監査証跡をバックアップおよび消去できます。

    1. 統合監査レコードが存在するかどうかを確認します。

      SQL> SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL;
      
    2. 既存の監査データを表にバックアップします。次に例を示します。

      SQL> CREATE TABLE UA_DATA AS (SELECT * FROM UNIFIED_AUDIT_TRAIL);
      
    3. 監査証跡をクリーンアップします。

      EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, use_last_arch_timestamp => FALSE);
      
  3. ダウングレードする前に、データベースで使用しているタイム・ゾーン・ファイルのバージョンがダウングレード対象のデータベースのOracleホームに含まれていることを確認します。

    データベースで現在使用されているタイムゾーン・ファイルのバージョンを確認するには、次のコマンドを使用してV$TIMEZONE_FILEを問い合せます。

    SQL> select * from  V$TIMEZONE_FILE;
    

    次に例を示します。

    問合せにより列V$TIMEZONE_FILE.FILENAMEtimezlrg_20.datが返されたら、対象のOracleホームにそのファイルが存在するかどうかを確認します。

    LinuxおよびUnix

    $ORACLE_HOME/oracore/zoneinfo/timezlrg_20.dat
    

    Windows

    %ORACLE_HOME%\oracore\zoneinfo\timezlrg_20.dat

    必要なタイム・ゾーン・ファイルが対象のOracleホームにない場合は次のいずれかを実行します。

    • 現在のバージョンのタイム・ゾーン・ファイルをパッチとしてインストールしており、パッチ番号を覚えている場合は、その同じパッチ番号を使用して、My Oracle Support Webサイトから対象リリースに対応するタイム・ゾーン・ファイルをダウンロードします。

    • My Oracle Support Webサイトのパッチ検索機能を使用して、正しいパッチを見つけてください。入力する検索基準は次のとおりです。「製品」に「Oracle Database」、「リリース」にターゲット・リリース、そして「説明に次を含む」に「DST」

    • My Oracle Support Webサイトでパッチが見つからない場合は、Oracle Supportでサービス・リクエストを記録します。

    必要なパッチを見つけてダウンロードしたら、対象のOracleホームにインストールします。

  4. 固定オブジェクトに基づいてオブジェクトを作成した場合は、これらのオブジェクトを削除して、ORA-00600エラーの発生を回避します。ダウングレード後にこれらのオブジェクトを再作成できます。

  5. データベースにOracle Enterprise Managerが構成されている場合は、Enterprise Managerユーザーを削除します。

    DROP USER sysman CASCADE;

    ノート:

    Enterprise Managerユーザーを削除すると、MGMT*シノニムが無効になる場合があります。ダウングレードしたデータベースでOracle Enterprise Managerの制御を使用するには、Oracle Enterprise Managerを再構成する必要があります。

CDBまたは非CDBのOracle Databaseのダウングレード

catdwgrd.sqlを実行して、サポートされているメジャー・リリースまたは関連するリリース更新にOracle Database 18cデータベースをダウングレードします。

ノート:

Oracle Database 12cリリース1 (12.1)以上では、非CDBアーキテクチャは非推奨です。今後のリリースでサポートが終了する可能性があります。

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

  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. DBA権限があるアカウントを使用して、ダウングレードするデータベースに接続します。

    CONNECT / AS SYSDBA
    
  7. 使用するOracle Databaseインスタンス・タイプに応じて、SQL*Plusで次のコマンドを発行し、ダウングレード・モードでインスタンスを起動します。PFILEオプションを使用して、初期化パラメータ・ファイルの場所を指定するように求められる場合があります。

    非CDBインスタンス:

    SQL> startup downgrade pfile=pfile_name
    

    CDBインスタンス:

    SQL> startup downgrade pfile=pfile_name
    
    SQL> alter pluggable database all open downgrade;

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

    参照:

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

  8. (推奨)非CDBをダウングレードする場合は、結果をログ・ファイルにスプールするようにシステムを設定して、変更および問題を追跡できるようにすることをお薦めします。

    CDBをダウングレードしている場合、次のステップを実行する必要はありません。CDBは自動的に出力をcatcon_logsにスプールします。

    CDB以外の場合は、次のコマンドを入力して結果をログ・ファイルにスプールします(downgrade.logはログ・ファイルの名前です)。

    SQL> SPOOL downgrade.log
    
  9. 構成に応じて、次のコマンドを使用してダウングレードを開始します。

    非CDB:

    SQL> @catdwgrd.sql
    

    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
    

    CDBの例で、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 12cに付属するcatdwgrd.sqlスクリプトのバージョンを使用します。

    • CDBをダウングレードするときには-rパラメータを使用してcatdwgrdを実行する必要があります。

    • Oracle Database 12c環境で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スクリプトを再実行する前に、問題を特定して修正します。

  10. 非CDBの場合のみ、スプールをオンにしていた場合は、スクリプト結果のログ・ファイルへのスプーリングをオフにします。

    SQL> SPOOL OFF
    

    次に、スプール・ファイルを確認して、ダウングレード中にエラーが発生しなかったかどうかを検証します。ステップ8で、スプール・ファイル名をdowngrade.logとしました。このファイルで検出された問題は、すべて修正します。必要に応じて、ダウングレード・スクリプトを再実行します。

    ノート:

    ダウングレード・スクリプトの最初の実行時から結果を保存できます。ダウングレード・スクリプトを再実行する前に、downgrade.logファイルの名前を変更し、スクリプトを再実行したときにファイルが上書きされないようにします。

  11. インスタンスを停止します。

    SQL> SHUTDOWN IMMEDIATE
    
  12. SQL*Plusを終了します。

  13. ご使用のオペレーティング・システムがLinuxまたはUNIXの場合、次の環境変数がダウングレード先のリリースのディレクトリを指定するように変更してください。

    • ORACLE_HOME

    • PATH

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

    参照:

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

  14. ご使用のオペレーティング・システムがWindowsの場合、次のステップを実行します。

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

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

      C:\> NET STOP OracleServiceORCL
      

      参照:

      WindowsでのOracleサービスの停止の詳細は、『Oracle Databaseプラットフォーム・ガイドfor Microsoft Windows』を参照してください

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

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

      C:\> ORADIM -DELETE -SID ORCL
      
    3. コマンド・プロンプトでコマンド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を参照してください

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

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

    SET CLUSTER_DATABASE=FALSE

    ノート:

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

    参照:

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

  16. システム・プロンプトで、ダウンロード先である以前のリリースのOracleホーム・ディレクトリのadminディレクトリに変更します。(ORACLE_HOME/rdbms/adminORACLE_HOMEは以前のリリースのOracleホームのパスです。)

  17. SQL*Plusを開始して、SYSDBA権限を持つユーザーとして、データベース・インスタンスに接続します。

    非CDBの場合:

    SQL> CONNECT / AS SYSDBA
    SQL> STARTUP UPGRADE

    CDBの場合:

    connect / as sysdba
    startup upgrade;
    alter pluggable database all open upgrade;
    
  18. (オプション) 非CDBの場合、変更および問題を追跡するために、結果をログ・ファイルにスプールするようにシステムを設定します。このステップはCDBには必要ありません。

    SQL> SPOOL reload.log
    
  19. 非CDBデータベースでcatrelod.sqlを実行するか、またはcatcon.plを使用してCDBデータベースでutlrp.sqlを実行します。

    非CDBの場合:

    SQL> $ORACLE_HOME/rdbms/admin/catrelod.sql

    CDBの場合:

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

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

  20. 非CDBでスプーリングをオンにした場合、スクリプト結果のログ・ファイルへのスプーリングをオフにします。

    SQL> SPOOL OFF
    

    スプール・ファイルをチェックし、パッケージとプロシージャのコンパイルが成功したかどうかを確認します。このログ・ファイルで見つけた問題を処理し、必要に応じて適切なスクリプトを再実行します。

  21. 通常の操作のために、インスタンスを停止し、再起動します。

    SQL> SHUTDOWN IMMEDIATE
    SQL> STARTUP
    

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

    参照:

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

  22. 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
      
  23. (オプション) 非CDBの場合、変更および問題を追跡するために、結果をログ・ファイルにスプールするようにシステムを設定します。このステップはCDBには必要ありません。例:

    SQL> SPOOL utlrp.log
  24. utlrp.sqlスクリプトを実行して、残りのすべてのストアドPL/SQLおよびJavaコードを再コンパイルします。使用している構成に対応する手順を使用します。

    非CDB:

    SQL> $ORACLE_HOME/rdbms/admin/utlrp.sql 

    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が生成されます。そのログ・ファイルには再コンパイルの結果がリストされます。

  25. utlrp.sqlを実行するときに非CDBのスプーリングをオフにする場合は、ログ・ファイルへのスクリプトの結果のスプールをオフにします。

    SQL> SPOOL OFF
    

    スプール・ファイルをチェックし、パッケージとプロシージャのコンパイルが成功したかどうかを確認します。このログ・ファイルで検出された問題は、すべて修正します。必要に応じて、該当するスクリプトを再実行します。

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

  27. クラスタ・データベースをダウングレードする場合は、次のコマンドを実行してOracle Clusterwareのデータベース構成をダウングレードする必要があります。

    $ srvctl downgrade database -d db-unique-name -o oraclehome -t to_version
    

    この構文例の変数を、お使いのシステム値に置き換えます。

    • db-unique-nameはデータベース名です(インスタンス名ではありません)。

    • oraclehomeはダウングレードしたデータベースの古いOracleホームの場所です。

    • to_versionは、データベースのダウングレード後のデータベース・リリースです。(例: 12.1.0.2.0)

    ノート:

    このコマンドは、データベースのダウングレード後のOracleホームからではなく、現在のOracle Database 12cのOracleホームから実行してください。

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

コンポーネント・ステータスがOPTION OFFの場合のダウングレードと無効なオブジェクトについて

新しいリリースのOracle Database Standard EditionからCDBやPDBを持つ以前のリリースのOracle Database Standard Editionにダウングレードすると、ダウングレード後に新しいリリースの無効なオブジェクトが含まれます。

データベースをダウングレードすると、以前のリリースのOracle Databaseで新しいリリースのオブジェクトがFALSEに設定されるため、ダウングレードされたデータベースで新しいリリースの無効なオブジェクトが検出されることは予期された動作です。

次に例を示します。

Oracle Database 18c Standard Editionリリース18からOracle Database Standard Edition 12cリリース2 (12.2.0.1)へのダウングレード時、OLAPおよびSpatialコンポーネントはFALSEに設定されるものの、18cにアップグレードされます。ダウングレード後、OLAPとSpatialのコンポーネントは依然として使用できませんが、12.2.0.1リリースにリロードされることはありません。その後、この結果はDBAレジストリに表示されます(12.2レジストリに新しいリリース・オブジェクトがリストされます)。

OLAP Analytic Workspace             OPTION OFF   18.1.0
Oracle OLAP API                     OPTION OFF   18.1.0

この結果は、Oracle Database 18cから以前のリリースにダウングレードする場合、予期された動作です。この動作が予期される理由は、Standard Editionデータベースのこれらのオプションのオプション設定がFALSEであるためです。アップグレード時、すべてのオプションはFALSEに設定されるものの、アップグレードされます。catrelod.sqlの実行中には、これらのオブジェクトを以前のリリース・バージョンに置き換える再ロード・スクリプトは実行されません。結果として、Standard Editionへのダウングレードでは、多数のOLAPおよびSpatialのオブジェクトが新しいリリース・バージョンのままになります。

単一のプラガブルOracle Database (PDB)のダウングレード

Oracle Databaseをダウングレードする場合、CDB全体をダウングレードせずに1つのPDBをダウングレードできます。

Oracle Database 12cリリース2 (12.2)より新しいOracle Databaseリリースでは、個々のPDBをダウングレードできます。たとえば、リリース12.2.0.1のCDBからPDBを切断し、それをダウングレードした後、リリース12.1.0.2のCDBに接続するか、そのデータベースをスタンドアロン・データベースに変換することができます。

PDBのダウングレード

この手順では、PDBをリリース12.1.0.2にダウングレードします。

  1. リリース12.2.0.1のPDBをDOWNGRADEモードで起動します。これを行うとき、CDBは標準モードになります。

    SQL> alter pluggable database CDB1_PDB1 open downgrade;
    
  2. catdwgrdを実行してPDBをダウングレードします。この例ではPDB1です。

    次のように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
    

    例では、catdwgrdcatcon.plとともに実行されます。-dパラメータは、catcon.plcatdwgrdの入手先を指定します。-lパラメータは、ログ・ファイルの出力ディレクトリを指定します(rdbms/adminディレクトリに書き込むかわりとなります)。2つのスクリプトを同時に一緒に実行するには、-rパラメータを使用する必要があります。

  3. PDBをクローズします。

PDBのCDBからの切断

このステップでは、ダウングレードされたPDBをリリース12.2.0.1のCDBから切断します。

  1. 12.2.0.1のCDBに接続します。

  2. 切断するPDBをクローズします。

    SQL> alter pluggable database PDB1 close;
    
  3. ダウングレードした12.1.0.2 PDBを切断し、変数pathシステムのパスに置き換えます。

    SQL> alter pluggable database PDB1 unplug into 'path/pdb1.xml';
    

    切断が完了すると、次のレスポンスが表示されます。

    Pluggable database altered

ダウングレードされた12.1.0.2 PDBの接続

このステップでは、ダウングレードされた12.1.0.2のPDBを12.1.0.2のCDBに接続します。これを行うには、このCDBでPDBを作成する必要があります。次の例は、PDB1というプラガブル・データベースの作成方法を示しています。

  1. 12.1.0.2のCDBに接続します。

  2. 12.1.0.2のPDBを接続します。

    SQL> create pluggable database PDB1 using 'path/pdb1.xml';
    

    このコマンドを実行すると、「プラガブル・データベースが作成されました。」が返されます。

  3. PDBをアップグレード・モードで開きます。

    SQL> alter pluggable database PDB1 open upgrade;
    
  4. PDBに接続します。

    SQL> alter session set container=PDB1;
    
  5. PDBでcatrelodを実行します。

    SQL> @$ORACLE_HOME/rdbms/admin/catrelod.sql
    

    catrelod.sqlスクリプトによって、ダウングレードしたデータベース内の各データベース・コンポーネントに該当するバージョンが再ロードされます。

  6. PDBでutlrpを実行します。

    SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
    

    utlrp.sqlスクリプトは、以前INVALID状態だったパッケージ、プロシージャ、型などのすべての既存のPL/SQLモジュールを、再コンパイルします。

Oracle Application Expressが含まれるPDBのダウングレード

このプロシージャを使用すると、Oracle Application Expressが含まれるPDBをダウングレードするときにINVALID OBJECTS OWNED BY APEX_050000エラーを回避できます。

PDBを以前のリリースにダウングレードした後、次のようなSQL文を入力してOracle Application Expressユーザーを削除します。

$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 DatabaseダウングレードでのOracle XML DB認証の推奨事項

12.1より前のリリースからアップグレードすると、ダイジェスト認証が無効になります。

ダイジェスト認証がサポートされていないOracle Database 12cより前のリリースにダウングレードする場合、ダイジェスト認証が無効化され、認証の選択肢として使用できなくなります。これは、Oracle XML DBリポジトリのHTTP認証に影響します。ダイジェスト認証を使用せず、かわりにデフォルトの構成を使用している場合は、これ以上のアクションは必要ありません。

参照:

データベースのインストール、アップグレードおよびダウングレードに対するOracle XML DBを使用した認証の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

ダウングレード後のリリース更新およびその他のパッチの再適用

アップグレード後かつダウングレード前に、元のOracleホームに新しいパッチをインストールしていた場合は、ダウングレードが実行されて、catrelod.sqlが正常に完了したら、インストールしたパッチが適用されていることを確認します。

新しいパッチをインストールした場合、datapatchツールを実行して、ダウングレードしたデータベースにこれらのパッチを適用します。アップグレード後にOracleホームのバイナリおよびファイルを変更しなかった場合、catrelod.sqlを実行した後にdatapatchを実行する必要はありません。

Oracle Databaseのダウングレード後のOracle Database Vaultの再有効化

ダウングレード時にOracle Database Vaultを無効化するよう指示があった場合、これを実行する必要があります。

Oracle Database Vaultを使用している場合は、データベースをダウングレードする前にこれを無効にするように指示されている場合があります。ダウングレード後にOracle Database Vaultを使用するには、これを再有効化する必要があります。

参照:

Oracle Database Vaultを再有効化する手順は、『Oracle Database Vault管理者ガイド』を参照してください

Oracle Clusterwareの構成のリストア

構成をリストアするには、アップグレード前のリリースをリストアする必要があります。

Oracle Clusterware構成をOracle Clusterware 12cリリース2 (12.2)のアップグレード前の状態にリストアできます。Oracle Database 12cのアップグレード処理中またはアップグレード処理後に実行した構成変更は削除され、リカバリできません。

参照:

使用しているプラットフォームに合った『Oracle Grid Infrastructureインストレーションおよびアップグレード・ガイド』を参照してください。

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 -restoreを使用してOracle Enterprise Managerを以前の状態にリストアするには、次の要件を満たす必要があります。

  • アップグレードの前に、Oracle Enterprise Managerの構成ファイルおよびデータのバックアップを保存していること

  • この手順でOracle Database 12cのOracleホームに存在する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)を使用してデータベースを管理します。

このコマンドを使用して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 12cホームからemdwgrdユーティリティを実行します

次の手順は、LinuxおよびUNIX用です。これをWindowsで実行する場合は、emdwgrdemdwgrd.batに置き換えてください。

  1. ORACLE_HOMEを、データベースがアップグレードされる前のOracleホームに設定します。

  2. ORACLE_SIDを、アップグレード後にダウングレードされたデータベースのSIDに設定します。

  3. データベースがアップグレードされる前のOracleホームを指すように、PATHLD_LIBRARY_PATHおよびSHLIB_PATHを設定します。

  4. Oracle Database 12cのOracleホームに移動します。

    cd $ORACLE_HOME/bin
    
  5. 次のいずれかの手順を使用してemdwgrdを実行します。

    1. 単一インスタンス・データベースの場合は、次のコマンドを実行します。SIDはアップグレード後にダウングレードされたデータベースのSIDで、save_directoryは、Database Controlのファイルおよびデータの保存時に選択した記憶域の場所へのパスです。

      emdwgrd -restore -sid SID -path save_directory -tempTablespace TEMP
      
    2. Oracle RACデータベースの場合、クラスタ・ノード間のリモート・コピーが必要です。構成済のリモート・コピーを示す環境変数を定義します。次に例を示します。

      setenv EM_REMCP /usr/bin/scp
      

      その後、次のオプションを使用してemdwgrd -restoreを実行します。

      emdwgrd -restore -tempTablespace TEMP -cluster -sid SID_OldHome -path save_directory
      

      Oracleホームが共有デバイス上にある場合、-sharedemdwgrdコマンドのオプションに追加します。

  6. emdwgrdにより要求された場合は、SYSおよびSYSMANパスワードを入力します。

  7. emdwgrdが終了すると、Oracle Enterprise Manager Database Controlは古いOracleホームにダウングレードされます。

以前のリリースへのOracle Application Expressのリストア

Oracle Databaseのアップグレードと同時にOracle Application Expressもアップグレードした場合、ダウングレード後に以前のリリースのOracle Application Expressに戻すステップを実行する必要があります。

データベースのダウングレード後にOracle Application Expressのダウングレードを完了するには、『Oracle Application Expressインストレーション・ガイド』にリストされたすべてのステップを実行して、お使いのOracle Application Expressのリリースを以前のリリースに戻します。戻すためのステップは、お使いのアーキテクチャが非CDBか、またはマルチテナント・アーキテクチャ(CDB) Oracle Databaseかによって異なります。

ノート:

データベースをアップグレードしたとき、同時にOracle Application Expressをアップグレードした場合、実行する必要があるのはこのステップだけです。

ダウングレード後のディクショナリ統計の収集

ダウンロード後に高いパフォーマンスを保証するためには、次のプロシージャを使用してディクショナリ統計を収集します。

ダウングレードしたリリースのデータ・ディクショナリ表の統計が収集されるように、データベースのダウングレード後にディクショナリ統計を収集することをお薦めします。

  • 非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コマンドそのものは、引用符で囲みます。

Oracle Databaseのダウングレードのトラブルシューティング

このトラブルシューティング情報を使用して、Oracle Databaseのダウングレード時に発生する可能性のある問題に対処します。

この項には、ダウングレード時に発生する可能性のある既知のエラーと、それらのエラーに対処するための回避策が含まれます。

catdwgrd.sqlスクリプトを使用したOracle Databaseコンポーネントのダウングレード中のエラー

この項を使用して、ダウングレード中にcatdwgrd.sqlスクリプトを実行するときに発生するエラー(ORA-20001: ダウングレードを続行できませんなど)のトラブルシューティングを行います。

catdwgrd.sqlスクリプトはOracle Databaseのデータベース内のすべてのコンポーネントを、アップグレード前の当初のメジャー・リリースにダウングレードします。このスクリプトはデータ・ディクショナリをダウングレードする前に実行する必要があります。スクリプトの実行時に何か問題が発生した場合は、問題の原因を修正してからスクリプトを再実行します。

発生する可能性のあるエラーには、「ORA-39709: コンポーネントのダウングレードが不完全です; stringのダウングレードは中断されました」および「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

例6-1 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で統合監査証跡を削除する必要があります。

次に例を示します。
  1. 統合監査証跡の存在を確認します。

    SQL> SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL;
    COUNT(*)
    ----------
          4538
  2. CDB上で監査証跡を削除します。

    たとえば、この場合監査証跡タイプはDBMS_AUDIT.MGMT.AUDITになります。

    EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL DBMS_AUDIT_MGMT.AUDIT
  3. CDB$ROOTcatdwngrd.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
  4. 個々のPDBに接続し、統合監査証跡があるかどうかを確認します。すべてのPDBの統合監査証跡をクリアします。たとえば、PDB1という名前のPDBに統合監査証跡がある場合、次のようになります。

    ALTER SESSION SET container = PDB1;
    
    SQL> SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL;
     COUNT(*)
    ----------
          1330
  5. 統合監査証跡を特定します。

    SQL> CREATE TABLE UA_DATA AS (SELECT * FROM UNIFIED_AUDIT_TRAIL);
  6. 監査証跡を削除します。

    この例では、監査証跡タイプは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;
    /
  7. 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/18.0.0/downgrade_logs -r catdwgrd.sql
  8. CDBおよびPDBでスクリプトが正常に完了してORA-20001エラーがログに表示されなくなるまで、監査証跡を検索して削除するプロセスを繰り返し、catdwgrd.sqlを実行します

Oracle Multimediaのダウングレードおよびimrelod.sqlスクリプトのエラー

ORA-20000: 「レジストリ内のOracle ORDIMコンポーネントのステータスがDOWNGRADEDです」が発生した場合に参照してください。

Oracle Databaseをリリース12.1からリリース11.2.0.2にダウングレードする場合、リリース11.2.0.2に付属するimrelod.sqlスクリプトからエラーが発生する場合があります。

ORA-20000: レジストリ内のOracle ORDIMコンポーネントのステータスがDOWNGRADEDです。Oracle Multimediaをアップグレード、ダウングレードまたはパッチ適用する前にOracle ORDIMをインストールし、有効化しておく必要があります。

  • 原因 imrelod.sqlスクリプトがORDIMのステータスを認識していないために、このエラーが発生します。

  • 処置 処置は必要ありません。このエラーは無視できます。

Oracle Database Vaultおよびdvrelod.sqlスクリプトのエラー

ORA-31011: 「XML解析に失敗しました」が発生した場合に参照してください。

Oracle Databaseをリリース12.1からリリース11.2.0.3にダウングレードする場合に、Oracle Database Vaultを使用するデータベースで、リリース11.2.0.3に付属するdvrelod.sqlスクリプトの結果として次のエラーが発生する場合があります。

ORA-31011: XML parsing failed; Oracle Database Vault downgrade to release 11.2.0.3
  • 原因 dvrelod.sqlスクリプトはXML解析のステータスを認識していません。

    処置 処置は必要ありません。このメッセージは無視できます。

アップグレードの成功または失敗後のOracle Grid Infrastructure (Oracle Restart)のダウングレード

Oracle Restartをダウングレードするには、Oracle Grid Infrastructureを構成解除してから再インストールする必要があります。その後、データベースおよびサービスを戻すことができます。

Oracle ACFSおよびOracle Grid Infrastructureの11gリリース2 (11.2)へのダウングレード

ソフトウェア・スタックの開始を試みる前に、acfsroot installを実行する必要があります。

Oracle ASM Cluster File System (Oracle ACFS)を使用しており、クラスタまたはOracle Restartスタンドアロン・サーバーでOracle Grid Infrastructure 12cにアップグレードし、Oracle Grid Infrastructure 11gリリース2 (11.2)へのダウングレードを選択する場合、リリース11.2のソフトウェア・スタックの開始を試みる前に、リリース11.2のOracle Grid InfrastructureのOracleホーム(Gridホーム)からコマンドacfsroot installを実行する必要があります。

Oracle Database 11gリリース1 (11.1)へのダウングレード後のデータベース・リンク・パスワード

リリース11.2または12.1で作成されたデータベース・リンクのパスワードをリセットします。

Oracle Databaseリリース11.1にダウングレードした後、リリース11.2または12.1で作成されたデータベース・リンクのパスワードをリセットする必要があります。

Oracle Database 11.1リリース1へのダウングレード後のデータベース・リンク・パスワードでのORA-00600エラー

このエラーは、データベース・リンクのパスワードをリセットしない場合に発生する可能性があります。

データベース・リンクのパスワードをリセットしない場合、そのデータベース・リンクの使用を試みると、内部エラーが表示されます。なお、これは、Oracleサーバーがデータベース・リンクのパスワードを取得できないときにOracleトレース・ファイルに記録される内部エラーです。
ORA-00600: [kzdlk_zt2 err], [18446744073709551601]

リリース11.1にダウングレードした後にデータベース・リンクのパスワードをリセットするには、ALTER DATABASE LINKコマンドを使用して元のパスワードをIDENTIFIED BY句に指定することで、パスワードを元のパスワードに戻します。

Oracle Databaseリリース11.2または12.1の実行中に、このパスワードの問題がない新しいデータベース・リンクを作成するには、CREATE DATABASE LINKコマンドのIDENTIFIED BY VALUES句の使用方法についてOracleサポートに問い合せてください。

参照:

ALTER DATABASE LINKの詳細は、『Oracle Database SQL言語リファレンス』を参照してください

データベース・リンクによって確立される接続の制御の詳細は、『Oracle Database管理者ガイド』を参照してください

Oracle Data Pumpのエクスポートを使用した、既存のすべてのデータベース・リンクが含まれるダンプ・ファイルの作成

ダウングレードを実行する前に、このOracle Data Pumpのエクスポート手順を使用して、既存のすべてのデータベース・リンクが含まれるダンプ・ファイルを作成します。

作成するダンプ・ファイルには、新しく作成されたデータベース・リンクがすべて含まれます。この手順では、expdpコマンドでFULL=YおよびINCLUDE=DB_LINKパラメータを使用します。

  1. SQL*Plusにログインします。

    次に例を示します。

    sqlplus system/manager
    
  2. ダンプ・ディレクトリが存在する場合は削除します。

    次に例を示します。

    SQL> DROP DIRECTORY dpump_dir;
    SQL> CREATE DIRECTORY dpump_dir AS '/location_to_write_datapump_dump_file';
    
  3. データベース・リンクをエクスポートします。

    次に例を示します。

    $ expdp system/manager FULL=Y directory=dpump_dir 
      dumpfile=saved_dblinks.dmp INCLUDE=DB_LINK;
    
  4. ダウングレード後に、ダウングレードしたデータベース・リンクのいずれかが正しく機能しない場合は、そうしたリンクを削除し、ダンプ・ファイルからインポートします。

    $ impdp system/manager directory=dpump_dir dumpfile=saved_dblinks.dmp;

    たとえば、リンクが内部エラーORA-00600であると表示された場合は、リンクを削除し、ダンプ・ファイルからインポートすることにより、意図したようにそれらのリンクが機能するようになります。