非CDB Oracle Databaseのアップグレード・シナリオ

非CDB Oracle Databaseのアップグレード・シナリオおよび手順を理解するには、これらのトピックを参照してください

ノート:

Oracle Database 12cリリース1 (12.1)以上では、非CDBアーキテクチャは非推奨です。今後のリリースでサポートが終了する可能性があります。マルチテナント・アーキテクチャを使用してデプロイされたOracle Databaseは、デフォルトの構成オプションです。Oracle Database 12cリリース1 (12.1.0.1)より前のすべてのOracle Databaseリリースでは、非CDBアーキテクチャを使用します。

注意:

COMPATIBLE初期化パラメータを12.1.0.2に設定した後は、データベースをダウングレードできません。プラガブル・データベース(PDB)のダウングレードは、互換性が12.1.0.1に設定されている場合にのみ可能です。ダウングレードには、追加の制限事項があります。

アップグレードまたはダウングレードを開始する前に、ソース・データベースとターゲット・データベースを最新の四半期リリース更新(Update)、リリース更新リビジョン(Revision)、バンドル・パッチまたはパッチ・セット更新(BPまたはPSU)にアップグレードすることをお薦めします。

最新のAutoUpgradeユーティリティのダウンロード

スムーズなアップグレードを確実にするためにチェックに対する最新の更新を取得するには、最新のAutoUpgradeユーティリティをダウンロードします。

AutoUpgradeユーティリティは、最初のソフトウェア・リリース後も引き続き開発されています。My Oracle Supportノート2485457.1から最新バージョンを常にダウンロードすることをお薦めします。

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スクリプトを使用してデータディクショナリが変換されるまで使用できません。

図4-1 DBMS_PDB.DESCRIBEプロシージャを使用した非CDBの接続

図4-1の説明が続きます
「図4-1 DBMS_PDB.DESCRIBEプロシージャを使用した非CDBの接続」の説明

アプリケーション・コンテナに新しいアプリケーションPDBを作成するのと同じ手法を使用できます。

PDBとしての非CDBの適用

DBMS_PDB.DESCRIBEプロシージャを使用して非CDBをPDBに適用(移動)できます。

この手順により、非CDBのOracle DatabaseをCDB上のPDBに更新できます。この手順を使用するには、最初にCDBを使用して新しいOracle Databaseリリースをインストールする必要があります。
  1. CDBが存在しない場合は作成します。

  2. 非CDBがトランザクション上一貫した状態にあることを確認してください。

  3. 非CDBを読取り専用モードにします。

  4. 非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に接続できます。

  5. 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と互換性があることを確認します。

  6. 非CDBを停止します。

  7. 非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を作成できます。

  8. ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sqlスクリプトを実行します。このスクリプトは、PDBを初めてオープンする前に実行する必要があります。

    PDBが非CDBでない場合、noncdb_to_pdb.sqlスクリプトを実行する必要はありません。noncdb_to_pdb.sqlスクリプトを実行するには、次のステップを実行します。

    1. PDBにアクセスします。

      現在のユーザーにはSYSDBA管理権限が必要であり、その権限は共通で付与されているか、またはPDBでローカルに付与されている必要があります。ユーザーは、接続時にAS SYSDBAを使用して権限を行使する必要があります。

    2. noncdb_to_pdb.sqlスクリプトを次のように実行します。

      @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
      

    スクリプトによって、PDBのオープン、変更の実行、および変更の完了時にPDBのクローズが行われます。

  9. 新しいPDBを読取り/書込みモードでオープンします。

    Oracle Databaseで新しいPDBをCDBに統合するには、PDBを読取り/書込みモードでオープンする必要があります。PDBを読取り専用モードでオープンしようとすると、エラーが返されます。PDBが読取り/書込みモードでオープンされると、そのステータスはNORMALになります。

  10. PDBをバックアップします。

    PDBは、バックアップしないとリカバリできません。

    ノート:

    PDBの作成中にエラーが返される場合は、作成されるPDBがUNUSABLE状態である可能性があります。PDBの状態を確認するには、CDB_PDBSまたはDBA_PDBSビューを問い合せます。PDB作成のエラーについてさらに学習するには、アラート・ログを確認してください。使用できないPDBは削除するしかありません。使用できないPDBが作成される可能性があるので、同じ名前のPDBを作成しようとする前に、使用できないPDBを削除する必要があります。

マルチテナント環境におけるOracle Label Security統合

Oracle Label Securityは、マルチテナント環境で使用できます。

マルチテナント環境では、プラガブル・データベース(PDB)をマルチテナント・コンテナ・データベース(CDB)やアプリケーション・コンテナにプラグインしたり、これらからプラグアウトできます。

次の点に注意してください。

  • 各PDBには、ポリシー、ラベル、ユーザー認証などの独自のOracle Label Securityメタデータがあります。LBACSYSスキーマは共通ユーザー・スキーマです。

  • PDBをCDBに接続する前に、データベースにOracle Label Securityがインストールされていない場合は、データベースに対して$ORACLE_HOME/rdbms/admin/catols.sqlスクリプトを実行して、ラベルベースのフレームワーク、データ・ディクショナリ、データ型およびパッケージをインストールします。このスクリプトは、LBACSYSアカウントを作成します。

  • Oracle Label Securityのポリシーは個々のPDBに格納されるので、PDBごとに個別のポリシーを作成できます。PDBに対して定義されたポリシーは、PDBに含まれるローカル表およびスキーマ・オブジェクトに対して強制できます。

  • 単一のCDBに、それぞれOracle Label Securityで構成されている複数のPDBがある場合があります。

  • Oracle Label SecurityポリシーをCDBルートやアプリケーション・ルートに作成することはできません。

  • ローカルのOracle Label Securityポリシーを共通のCDBオブジェクトまたは共通のアプリケーション・オブジェクトに対して強制することはできません。

  • Oracle Label Securityポリシー・ラベルおよび権限を、プラガブル・データベース内の共通のユーザーおよびアプリケーション共通ユーザーに割り当てることはできません。

  • Oracle Label Securityの権限を、プラガブル・データベース内の共通のプロシージャまたはファンクション、およびアプリケーション共通のプロシージャまたはファンクションに割り当てることはできません。

  • Oracle Label SecurityをOracle Internet Directoryを使用して構成する場合は、CDBに含まれるすべてのPDBで同じ構成を使用する必要があります。PDBからDBA_OLS_STATUSデータ・ディクショナリ・ビューを次のように問い合せて、データベースがOracle Internet Directoryに対して構成されているかどうかを判断できます。

    SELECT STATUS FROM DBA_OLS_STATUS WHERE NAME = 'OLS_DIRECTORY_STATUS';
    

    TRUEが返される場合、Oracle Label Securityではインターネット・ディレクトリが有効になっています。それ以外の場合はFALSEを返します。

非CDBアーキテクチャのOracle Databaseの手動アップグレード

この手順では、非CDBアーキテクチャのOracle Databaseをアップグレードするためのステップを示します。

ノート:

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

この手順を使用する前に、次のステップを実行してください。

  • Oracle Databaseソフトウェアをインストールします

  • 新しいOracleホームを準備します。

  • preupgradeパラメータを指定してAutoUpgradeを実行します。

ステップ:

  1. アップグレード前情報ツールをまだ実行していない場合、実行します。次に進む前に、アップグレード前情報ツールの出力を確認して、出力に記載されているすべての問題を修正します。

    たとえば、LinuxまたはUnixシステムで次のように指定します。

     $ORACLE_HOME/jdk/bin/java -jar /opt/oracle/product/19.0.0/rdbms/admin/preupgrade.jar FILE TEXT
  2. 適切なバックアップ計画が準備されていることを確認します。

  3. 新しいOracleホームをまだ準備していない場合、準備します。

  4. (条件付き) Oracle RAC環境の場合のみ、次のコマンドを入力して、CLUSTER_DATABASEの初期化パラメータ値をFALSEに設定します。

    ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;
  5. データベースを停止します。たとえば:
    SQL> SHUTDOWN IMMEDIATE
    
  6. ご使用のオペレーティング・システムがWindowsの場合、次のステップを実行します。

    1. アップグレードするデータベースのOracleサービスOracleServiceSIDを停止します(SIDはインスタンスの名前です)。たとえば、SIDORCLの場合、コマンド・プロンプトで次のように入力します。

      C:\> NET STOP OracleServiceORCL
      
    2. コマンド・プロンプトで、ORADIMを使用してOracleサービスを削除します。ORADIMの構文およびコマンドの完全なリストは、ご使用のプラットフォームのガイドを参照してください。

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

      C:\> ORADIM -DELETE -SID ORCL
      
    3. コマンド・プロンプトで新しい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を使用して、他のオプションを指定できます。

      次の例で、SIDORCLpassword (SYSPWD)がTWxy5791、ユーザーの最大数(MAXUSERS)が10、およびOracleホーム・パスがC:\ORACLE\PRODUCT\19.0.0\DBの場合、次のコマンドを入力します。

      C:\> ORADIM -NEW -SID ORCL -SYSPWD TWxy5791 -MAXUSERS 10
      -STARTMODE AUTO -PFILE C:\ORACLE\PRODUCT\19.0.0\DB\DATABASE\INITORCL.ORA
      

      ORADIMによって、ORACLE_HOME\databaseディレクトリにログが書き込まれます。

      ノート:

      Oracleホームのユーザー・アカウントを使用してOracleホームを所有する場合、ORADIMコマンドによって、そのユーザーの名前とパスワードを求められます。
  7. ご使用のオペレーティング・システムがLinuxまたはUNIXの場合は、次の内容を確認します。

    1. ORACLE_SIDが正しく設定されていること。

    2. oratabファイルが新しいOracleホームを指していること

    3. 次の環境変数が新しいOracle Databaseディレクトリを指していること

      • ORACLE_HOME

      • PATH

    4. クライアントで$ORACLE_HOME環境変数を設定するために使用するどのスクリプトも、新しいOracleホームを指している必要があります。

    ノート:

    Oracle Real Application Clustersデータベースをアップグレードする場合、Oracle Real Application Clustersデータベースでインスタンスが構成されているすべてのOracle Grid Infrastructureノードでこれらのチェックを実行してください。

  8. 新しいOracle DatabaseリリースのOracleインストール所有者としてシステムにログインします。

  9. 新しいOracleホーム・ディレクトリのadminディレクトリから、新しいOracleホームでSQL*Plusを起動します。

    たとえば:

    $ cd $ORACLE_HOME/rdbms/admin
    $ pwd
    /u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin
    $ sqlplus
  10. SPFILE.ORAまたはINIT.ORAファイルを古いOracleホームから新しいOracleホームにコピーします。

  11. SYSDBA権限を持つアカウントを使用して、アップグレードするデータベースに接続します。
    SQL> connect / as sysdba
    
  12. アップグレード・モードで非CDB Oracle Databaseを起動します。

    SQL> startup upgrade

    サポートが終了した初期化パラメータを示すエラーが表示された場合は、そのサポートが終了した初期化パラメータをノートにとり、アップグレードを継続します。次回、データベースを停止したときに、そのサポートが終了した初期化パラメータを削除します。

    ノート:

    UPGRADEモードでデータベースを起動すると、以前のOracle Databaseリリースに基づいてデータベースがオープンされます。また、AS SYSDBAセッションへのログインの制限、システム・トリガーの無効化、およびアップグレードの環境を準備するその他の操作も実行されます。

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

    たとえば:

    SQL> EXIT
  14. アップグレードに必要なアップグレード・オプションを使用して、パラレル・アップグレード・ユーティリティ(catctl.pl)スクリプトを実行します。

    Oracle_home/binにあるdbupgradeシェル・コマンドを使用し、パラレル・アップグレード・ユーティリティをコマンドライン・シェル・コマンドとして実行できます。PATH環境変数を設定してOracle_home/binを含めると、コマンドを直接コマンドラインから実行できます。たとえば:

    $ dbupgrade 

    ノート:

    • パラレル・アップグレード・ユーティリティ・コマンドを実行する際に、-lオプションを使用して、スプール・ログ・ファイルに使用するディレクトリを指定できます。

  15. アップグレードが成功した後、データベースは停止します。インスタンスを再起動して、通常の操作用にシステム・パラメータを再初期化します。たとえば:

    SQL> STARTUP
    

    このようにデータベースが停止してから再起動することで、すべてのキャッシュがフラッシュされ、バッファがクリアされて、その他のハウスキーピング・アクティビティが実行されます。これらの操作は、アップグレードしたOracle Databaseソフトウェアの整合性と一貫性を保証するための重要な最終ステップです。

    ノート:

    データベースを起動したときに、サポートが終了した初期化パラメータがリストされているメッセージが表示された場合は、再起動の前にサポートが終了した初期化パラメータをパラメータ・ファイルから削除します。ファイルを編集してパラメータを削除するために、必要に応じてSPFILEPFILEに変換します。

  16. catcon.plを実行してutlrp.sqlを起動し、残りの無効なオブジェクトをすべて再コンパイルします。

    たとえば:

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

    -b utlrpを使用してコマンドを実行しているため、ログ・ファイルutlrp0.logはスクリプトが実行されるときに生成されます。ログ・ファイルには再コンパイルの結果が含まれています。

  17. postupgrade_fixups.sqlを実行します。たとえば:

    SQL> @postupgrade_fixups.sql

    ノート:

    スクリプトを別の場所に配置するように指定しなかった場合、スクリプトはデフォルトのパスOracle_base/cfgtoollogs/SID/preupgradeに配置されます。Oracle_baseはOracleベースのホーム・パスで、SIDは一意のデータベース名です。

  18. utlusts.sqlを実行します。スクリプトは、すべての問題が修正されたことを検証します。

    たとえば:

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

    スクリプトを実行すると、アップグレードの結果を示すログ・ファイルutlrp0.logが生成されます。upg_summary.logでアップグレード・レポートを確認することもできます

    データベースの状態に関する情報を確認するには、アップグレードの完了後、いつでも必要な回数だけutlusts.sqlを実行します。utlusts.sqlスクリプトがエラーを返したり、ステータスがVALIDではないコンポーネントを表示した場合や、コンポーネントに対してリストされたバージョンが最新のリリースではない場合、このガイドのトラブルシューティングに関する項を参照してください。

  19. DBMS_DST PL/SQLパッケージを使用してタイムゾーン・ファイルをアップグレードし、タイムゾーン・データファイルを最新の状態にします。アップグレード後にタイムゾーン・データ・ファイルを調整することもできます。

  20. SQL*Plusを終了します

    たとえば:

    SQL> EXIT
    
  21. (条件付き) Oracle Real Application Clustersデータベースをアップグレードする場合、次のコマンド構文を使用して、Oracle Clusterwareのデータベース構成をアップグレードします。

    srvctl upgrade database -db db-unique-name -oraclehome oraclehome

    この構文例で、db-unique-nameは(インスタンス名ではなく)データベース名であり、oraclehomeは、データベースがアップグレードされるOracleホームの場所です。SRVCTLユーティリティでは、以前のリリースで使用される短いコマンドライン・インタフェース(CLI)オプションに加えて、GNUスタイルの長いオプションがサポートされています。

  22. (条件付き) 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リリースをアップグレードする方法を理解してください。

  1. 新しいOracle Databaseリリースをインストールします。

  2. 標準運用環境(SOE)の仕様に合わせてデータベースへのパッチ適用、テスト、構成を行います。

  3. SOEリリースOracle Databaseホームからフリート・パッチ適用およびプロビジョニングのゴールド・イメージを作成します。

  4. アップグレード対象のデータベースがあるサーバー上で新しいOracle Grid Infrastructureリリースへのアップグレードを実行します。このアップグレードはフリート・パッチ適用およびプロビジョニングを使用して実行できます。(ノート: ご使用のOracle Grid Infrastrauctureソフトウェアは常にOracle Databaseソフトウェアと同じか、それより新しいリリースである必要があります。)

  5. アップグレード対象の以前のリリースのOracle Databaseがあるサーバーに新しいリリースのOracle Databaseフリート・パッチ適用およびプロビジョニングのゴールド・イメージのコピーをデプロイします。

  6. フリート・パッチ適用およびプロビジョニング・コマンドrhpctl upgrade databaseを実行します。このコマンドは、新しいリリースのフリート・パッチ適用およびプロビジョニングのゴールド・イメージを使用して、以前のリリースのデータベースをアップグレードします。新しいリリースのOracle Databaseゴールド・イメージを使用してプロビジョニングされたサーバー上の1つ、複数、またはすべての以前のリリースのOracle Databaseインスタンスをアップグレードできます。