マルチテナント・アーキテクチャのOracle Databaseの手動アップグレード・シナリオ

手動アップグレードの準備のために、マルチテナント・アーキテクチャでデプロイされたOracle Databaseの手動アップグレード・シナリオおよび手順を参照してください。

Oracle Database 12c以上では、マルチテナント・アーキテクチャによって、プラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)を使用したOracle Databaseデプロイメントが可能になります。Oracle Database 12cリリース1 (12.1.0.1)より前のすべてのOracle Databaseリリースでは、非CDBアーキテクチャを使用します。

注意:

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

アップグレードを開始する前およびダウングレードを開始する前に、ソース・データベースとターゲット・データベースを最新のバンドル・パッチ・セット更新(BP、PSU)にアップグレードすることを強くお薦めします。

参照:

マルチテナント・アーキテクチャの概要については、『Oracle Database概要』を参照してください。

CDBの作成と構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

Oracle Multitenant Oracle Databaseのアップグレードについて

マルチテナント・アーキテクチャにインストールされたOracle Databaseをパラレルに、または順番にアップグレードできます。

Oracle Database 12cリリース1 (12.1)以上では、コンテナ・データベース(CDB)のプラガブル・データベース(PDB)の作成および管理ができるマルチテナント・アーキテクチャが提供されます。マルチテナント・アーキテクチャ・システムをアップグレードするには、Oracle Database Upgrade Assistant (DBUA)を使用するか、またはパラレル・アップグレード・ユーティリティを使用して手動アップグレードを実行します。

マルチテナント・アーキテクチャを使用するOracle Databaseをアップグレードする場合、次の2つの方法があります。

  • 並行。この方法では、CDBをアップグレードする1つのアップグレード操作を実行してから、複数のPDBをパラレルにアップグレードします。

  • 順次。この方法では、新しいリリースのCDBをインストールし、PDBを準備して以前のリリースのCDBから切断し、新しいリリースのCDBに接続して、各PDBのアップグレードを完了します。

次の項では、各アップグレード方法の概要について説明します。

Oracle Multitenantのパラレル・アップグレード

パラレルの方法では、パラレル処理と可用性の程度を設定するパラメータを使用して、パラレル・アップグレード・ユーティリティ(catctl.pl)で最初にCDB$ROOTをアップグレードします。

  • -nパラメータは、アップグレードを実行するパラレル処理の数を定義します(最大8)。

  • -Mパラメータは、アップグレード全体を通じてCDB$ROOTをUPGRADEモードのままにするか、CDBのアップグレードの完了後にアクセス可能にするかを指定します。-Mパラメータを使用してアップグレードを実行しない場合、CDB$ROOTのアップグレードが完了すると、PDBは、各PDBのアップグレードが完了すると同時にアクセスできるようになります。-Mパラメータを使用してアップグレードを実行する場合、CDB$ROOTはUPGRADEモードのままとなり、PDBは、すべてのPDBのアップグレードが完了するまで使用できません。

Oracle Multitenantの順次アップグレード

順次の方法では、新しいリリースのマルチテナント・アーキテクチャCDBをインストールします。次に、以前のリリースのマルチテナント・アーキテクチャCDBで、SQLコマンドを発行してアップグレード前スクリプトを実行し、アップグレードする1つ以上のPDBを準備してからそれらを停止します。その後、PDBを切断し、それらを新しいリリースのマルチテナント・アーキテクチャCDBに接続して、PDBごとに順番にアップグレードを完了します。

マルチテナント・アップグレードを使用したプロキシPDBのアップグレードの調整

プロキシPDBとPDBターゲットのバージョンが同じになるようにCDBのアップグレードを調整します。

アップグレード時には、プロキシPDBをアップグレードしても、それに対応するターゲットPDBはアップグレードされません。ターゲットPDBのアップグレードは個別に実行する必要があります。

マルチテナント・コンテナOracle Database (CDB)の手動でのアップグレード

この項のステップでは、コマンドライン・プロシージャを使用してCDBを手動でアップグレードするためのステップを示します。

この手順を使用する前に、次のステップを完了しておく必要があります。

  • 新しいリリースのOracle Databaseソフトウェアのインストール

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

  • アップグレード前情報ツールの実行

Oracle Database 12cでは、Oracle Databaseをプラガブル・データベースを含むマルチテナント・コンテナ・データベース(CDB)として機能させることができるマルチテナント・アーキテクチャが導入されています。DBUAを使用してCDBをアップグレードできますが、その処理で、CDBに連結されているすべてのプラガブル・データベースを同時にアップグレードします。または、Oracle Databaseのソフトウェアをインストールして新しいOracleホームを準備した後に、手動のコマンドライン・アップグレードに進むことができます。

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

  2. ソース・データベースをバックアップします。

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

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

    ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;

    CLUSTER_DATABASEパラメータを変更した後にデータベースを再起動します。

  5. データベースを停止します。(構文は、非CDBとCDBで同じです。)

    SQL> SHUTDOWN IMMEDIATE
    

    ノート:

    PDBを閉じるには、CDBルートから次のように指定できます: alter pluggable database PDBname close

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

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

      C:\> NET STOP OracleServiceORCL
    2. コマンド・プロンプトで、ORADIMを使用してOracleサービスを削除します。

      自分のSIDORCLの場合、SIDを自分のSIDに置き換えて次のコマンドを入力します。

      C:\> ORADIM -DELETE -SID ORCL
      
    3. コマンド・プロンプトで新しいOracle DatabaseリリースのORADIMコマンドを使用して、新しいリリースのOracle Databaseのサービスを作成します。

      次に例を示します。

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

      ほとんどのOracle Databaseサービスは、Oracleホーム・ユーザーの権限を使用してシステムにログオンします。サービスは、このユーザーの権限を使用して実行されます。ORADIMコマンドは、このユーザー・アカウントのパスワードを要求します。ORADIMを使用して、他のオプションを指定できます。

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

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

      ORADIMによって、ORACLE_HOME\databaseディレクトリにログが書き込まれます。ログ・ファイルには、マルチテナント・データベース内のPDBの名前が含まれています。

  7. ご使用のオペレーティング・システムがLinuxまたはUNIXの場合は、次の内容を確認します。

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

    2. oratabファイルがOracle Database 12cのOracleホームを指していること。

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

      • ORACLE_HOME

      • PATH

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

    ノート:

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

    参照:

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

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

  9. 新しいOracleホームのパスOracle_home/rdbms/adminディレクトリからSQL*Plusを起動します。

    次に例を示します。

    $ cd $ORACLE_HOME/rdbms/admin
    $ pwd
    /u01/app/oracle/product/18.0.0/dbhome_1/rdbms/admin
    $ sqlplus

    Windowsプラットフォームでは、SQL*Plusにアクセスするには、ディレクトリを%ORACLE_HOME%/binに変更します

  10. SYSDBA権限を持つアカウントを使用して、アップグレードするデータベースに接続します。

    SQL> CONNECT / AS SYSDBA
    
  11. アップグレード・モードでCDBを開始します。

    SQL> startup upgrade
  12. SQL*Plusで次のコマンドを発行して、インスタンスを起動します。

    SQL> alter pluggable database all open upgrade;
    

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

    ノート:

    UPGRADEモードでデータベースを起動すると、次のことが実行されます。

    • 新しいバージョンのOracle Databaseインスタンスを使用してデータベースが起動されます

    • ログインがSYSDBAに限定されます

    • システム・トリガーが無効になります

    • アップグレード用にデータベースを準備する追加操作が実行されます

  13. SQL*Plusを終了したら、次のステップに進みます。

    次に例を示します。

    SQL> EXIT
  14. CDB全体をアップグレードするには、パラレル・アップグレード・ユーティリティ(catctl.pl)を新しいOracleホームから実行します。パラレル・アップグレード・ユーティリティでは、停止時間を短縮するパラレル・アップグレード・オプションが提供されます。コマンドライン・スクリプトdbupgradeを使用して、新しいOracleホームからコマンドを実行できます。

    次に例を示します。

    Linuxの場合:

    cd $ORACLE_HOME/bin
    ./dbupgrade 
    

    Windowsの場合:

    cd %ORACLE_HOME%\bin
    dbupgrade 
    

    ノート:

    • -dオプションを使用して、処理対象のファイルが含まれるディレクトリを指定します。-lオプションを使用して、スプール・ログ・ファイルに使用するディレクトリを指定します。

    • CDB全体をアップグレードしており、CDB$ROOTにエラーがある場合、アップグレードは強制終了されます。

  15. CDB内のPDBのサブセットをアップグレードするために、包含リストまたは除外リストのいずれかを指定します。

    • LinuxまたはUNIXシステム用の次の例では、包含リストを使用してPDB1のみをアップグレードします。

      cd $ORACLE_HOME/bin
      ./dbupgrade -c 'PDB1' 
      
    • Windowsシステム用の次の例では、除外リストを使用してPDB1を除くCDB内のすべてをアップグレードします。

      cd $ORACLE_HOME\bin
      dbupgrade -C "PDB1" 

    ノート:

    個別のPDBは、以前のリリースのCDBから切断し、それよりも新しいリリースのCDBに接続することによりアップグレードできます。

    Windowsの場合、包含オプション(-c)または除外オプション(-C)を指定してdbupgradeコマンドを実行するときに、CDBルート名およびPDBシード名を引用符で囲んでオプションを指定する必要があります。

    次に例を示します。

    ... -C "CDB$ROOT PDB$SEED"

  16. CDBでは、SYSDBAとしてCDBにログインし、コマンドalter pluggable database all openを実行してデータベースでコードを再コンパイルできるようにします。次に例を示します。

    $ sqlplus / as sysdba
    
    SQL> alter pluggable database all open;
  17. catcon.plを実行します。このコマンドはutlrp.sqlを起動し、残っているストアドPL/SQLおよびJavaコードを再コンパイルします。

    次に例を示します。

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

    -b utlrp0を使用してコマンドを実行しているため、ログ・ファイルutlrp0.logは再コンパイルの結果が付いて生成されます。

  18. postupgrade_fixups.sqlを実行します。

    次に例を示します。

    $ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b postupgrade_fixups -d '''.''' postupgrade_fixups.sql
  19. utlu122s.sqlを実行します。このコマンドは、すべての問題が修正されたことを検証します。

    たとえば、CDBでは次のようになります。

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

    -b utlu122sを使用してコマンドを実行しているため、ログ・ファイルutlu122s0.logはアップグレードの結果が付いて生成されます。upg_summary.logファイルを確認して、アップグレード・レポートを確認できます。

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

  20. DBMS_DST PL/SQLパッケージを使用してタイムゾーン・ファイルをアップグレードし、タイムゾーン・データファイルを最新の状態にします。アップグレード後にタイム・ゾーンを更新することもできます。タイムゾーンを更新する場合は、CDB$ROOTとPDBの両方でタイムゾーンを更新する必要があります。

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

    次に例を示します。

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

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

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

これで、データベースがアップグレードされました。アップグレード後の手順を完了する準備が整いました。

注意:

古いOracleソフトウェアを保持している場合、古いソフトウェアを使用してアップグレードしたデータベースを起動しないでください。必ず新しいOracle Databaseホームで起動コマンドを使用してOracle Databaseを起動します。

古いOracle環境を削除する前に、その環境のデータファイルをすべて新しいOracle Database環境に再配置してください。

参照:

データファイルの再配置の詳細は、『Oracle Database管理者ガイド』を参照してください

優先度リスト付きのパラレル・アップグレード・ユーティリティを使用したPDBのアップグレードについて

Oracle Database 12.2以降では、あるPDBのセットを他のPDBより先にアップグレードするように優先度リストを使用してPDBをアップグレードできます(このアップグレード優先度は変更できます)。

優先度リストにより、その優先度に従ってPDBをグループ化してアップグレードできます。優先度リストは、アップグレード優先度の順序(数値の優先度グループ別のPDB)を定義するカンマ区切りリストが含まれたテキスト・ファイルです。優先度リストを使用してアップグレードを実行し、アップグレード実行時にそのリストを呼び出すには、-Lオプションを使用してパラレル・アップグレード・ユーティリティ(dbupgradedbupgrade.cmdまたはcatctl.pl)を実行します。

次の書式を使用してリストを作成します。この書式例で、変数numeralは数値で、pdbxはPDBの名前です。

Number, Pdb
    numeral,pdb1,pdb2,pdb3
    numeral,pdb4
    numeral,pdb5,pdb6,pdb7,pdb8
    .
    .
    .

数値はPDBの優先度を表します。

PDBの優先度は次のとおりです。

  1. CDB$ROOT: 優先度1。コンテナ・データベースを最初にアップグレードすることは、必須の優先度です。コンテナ・データベースのアップグレードの優先度を変更することはできません。CDB$ROOTは、常に最初に処理されます。

  2. PDB$SEED: 優先度1。PDBシード・データベースをアップグレードすることは、必須の優先度です。PDBシードのアップグレードの優先度を変更することはできません。PDB$SEEDは、常にCDB$ROOTの後に、PDBアップグレードの最初のバッチとともにアップグレードされます。

  3. 優先度リスト1のPDB: 優先度1は、ユーザー選択による最高の優先度です。これらのPDBは、CDB$ROOTの後で、PDB$SEED PDBがアップグレードされるバッチで2番目にアップグレードされます。

  4. 優先度リスト2のPDB: 優先度2は、2番目に高い優先度のPDBセットです。これらのPDBは、優先度1のPDBの後にアップグレードされます。

  5. 優先度リスト3のPDB: 優先度3は、3番目に高い優先度のPDBセットです。これらのPDBは、優先度2のPDBの後にアップグレードされます。

  6. 優先度リスト4のPDB: 優先度4は、4番目に高い優先度のPDBセットです。これらのPDBは、優先度3のPDBの後にアップグレードされます。

  7. 優先度リスト5のPDB: 優先度5は、5番目に高い優先度のPDBセットです。これらのPDBは、優先度4のPDBの後にアップグレードされます。

  8. 優先度リスト6のPDB: 優先度6は、6番目に高い優先度のPDBセットです。これらのPDBは、優先度7のPDBの後にアップグレードされます。

パラレル・アップグレード・ユーティリティを実行する場合、次の処理ルールが適用されます。

  • CDB$ROOTおよびPDB$SEEDは、優先度リストに存在しない場合でも、常に最初に処理されます。

  • 優先度リストに含まれるすべてのPDBは、優先度の順序で処理されます

  • 優先度リストに指定されていないPDBは、優先度リストに指定されているPDBの後に処理されます。

次に例を示します。

Number,Pdb
1,sales1,region2,receivables1
2,sales2
3,dss1,region3,region2,dss2,dss3

優先度リストを使用してパラレル・アップグレード・ユーティリティを実行するには、次の構文を使用します。

dbupgrade -L priority_list_name

たとえば、パラレル・アップグレード・ユーティリティのバッチ・コマンドとMy122Upgradeという名前の優先度リストを使用して、Windowsシステムでパラレル・アップグレード・ユーティリティを実行するには、次のコマンドを入力します。

C:>\u01\app\18.1.0\db_home1\rdbms\admin\dbupgrade -L MyUpgrade 

アップグレード優先度を設定する優先度リストを使用したアップグレードを完了した後、それらのPDB優先度の状態は、各PDB用にCDBで維持されます。次回のアップグレードでは、以前のアップグレードでPDB用に設定された優先度が考慮されます。

PDBのアップグレード優先度の状態を変更するには、次のSQLコマンド構文を使用します(PDBNameは変更するアップグレード優先度が設定されたPDBの名前で、PDBPriorityNumberは割り当てる新しい優先度の値です)。

SQL> alter session set container = CDB$ROOT
SQL> alter pluggable database PDBName upgrade priorityPDBPriorityNumber 

次に例を示します。

SQL> alter session set container = CDB$ROOT
SQL> alter pluggable database region2 upgrade priority 2

この例によって、前の例でアップグレード優先度1に設定されたregion 2という名前のPDBは、アップグレード優先度2に変更されます。

優先度リスト、包含リストおよび除外リストを使用したPDBのアップグレードについて

Oracle Database 12cリリース2 (12.2)以上では、優先度リスト付きの包含リストおよび除外リストを使用して、PDBのアップグレード方法を制御できます。

アップグレード処理およびリスト

次の用語は、アップグレードのリスト処理のタイプを示します。

  • 優先度リスト: リスト内のPDBのアップグレード優先度を指定するカンマ区切りリスト。

  • 包含リスト: アップグレードするPDBを指定するカンマ区切りリスト。これらのリストのPDBは、優先度リストに指定されたPDBの後にアップグレードされます。

  • 除外リスト: アップグレードしないPDBを指定するカンマ区切りリスト。

包含リストと除外リストは、次のように使用できます。

  • アップグレードで独自にPDBのセットを含めたり除外することができます

  • 優先度リストと組み合せて、PDBのアップグレード順やアップグレードから除外するPDBを詳細に指定できます。

    包含リストを優先度リストと組み合せて使用すると、包含リストに指定されたPDBは、優先度リストで割り当てられている優先度の値に従ってアップグレードされます。包含リストに指定されているが、優先度リストに指定されていないPDBは、優先度リストのすべてのPDBがアップグレードされた後にアップグレードされます。

    除外リストを優先度リストと組み合せて使用すると、除外リストに指定されたPDBは、アップグレードされません。

ノート:

LinuxやUNIXのviやWindowsのメモ帳などのプレーン・テキスト・エディタを使用して優先度リストを作成します。

このトピックの例では、cpu_countの値は2です。

デフォルト処理を使用するアップグレード優先度

デフォルト処理は、リストを使用してCDB内のPDBをアップグレードする方法を指定しない場合に実行されるアップグレード処理です。

デフォルト処理では、CDB$ROOTがアップグレードされ、次にPDB$SEEDがアップグレードされます。設定した並列度に応じて、1つ以上のPDBをPDB$SEEDとパラレルに更新できます。アップグレードが完了し、アップグレード・プロセッサが使用可能になると同時にPDBがアップグレードされます。

後続の例では、CDBおよびPDBで次のマルチテナント構成を使用します。

CDB$ROOT
PDB$SEED
CDB1_PDB1
CDB1_PDB2
CDB1_PDB3
CDB1_PDB4
CDB1_PDB5

デフォルト処理では、アップグレードするPDBやアップグレードから除外するPDBのプリファレンスは指定しません。デフォルト処理では、CDB$ROOTが最初にアップグレードされ、アップグレードされるPDBの最初のグループでPDB$SEEDが更新されます。

例3-30 完全なPDBアップグレード優先度の指定

次の優先度リストの例では、すべてのPDBの優先度がリストで設定されます。


1,CDB$ROOT
1,PDB$SEED
1,CDB1_PDB1
1,CDB1_PDB2
2,CDB1_PDB3
2,CDB1_PDB4
3,CDB1_PDB5

次に、優先度順にPDBをグループ化する同じリストの別の記述方法を示します。

1,CDB$ROOT
1,PDB$SEED
1,CDB1_PDB1,CDB1_PDB2
2,CDB1_PDB3,CDB1_PDB4
3,CDB1_PDB5

前述の例で、優先度1にリストされているPDBは、CDB1_PDB1およびCDB1_PDB2です。これらのPDBは、CDB1_PDB3およびCDB1_PDB4より先にアップグレードされます。

次に、コンテナIDの値(CON_ID)を使用して優先度順を設定する同じリストの別の記述方法を示します。

1,CDB$ROOT
1,PDB$SEED
1,3,4
2,5,6
3,7

前述の例で、優先度1にリストされているPDBは、CDB1_PDB1 (CON_ID 3で指定)およびCDB1_PDB2 (CON_ID 4で指定)です。これらのPDBは、CDB1_PDB3 (CON_ID 5)およびCDB1_PDB4 (CON_ID 6)より先にアップグレードされます。

CON_IDを使用して優先度を指定する場合、最初の数値で、PDBのグループの優先度を指定します。2番目の数値で、その優先度グループに含まれるPDB (CON_IDで指定)の数値を指定します。CDB$ROOTは、常に最初に更新され、PDB$SEEDは、常に最初のアップグレード優先度グループで更新されます。

これらの例は、すべて次の特性を持つ優先度リストのアップグレードを示します。

  • 除外処理: なし

  • 包含処理: なし

  • デフォルト処理: なし

アップグレード順序は、次の順番で実行されます。

  1. CDB$ROOT

  2. PDB$SEED、CDB1_PDB1

  3. CDB1_PDB2、CDB1_PDB3

  4. CDB1_PDB4、CDB1_PDB5

例3-31 PDBの優先度サブセットの指定およびデフォルト処理による他のPDBのアップグレード

次の例では、アップグレード用にPDBのサブセットを指定するpriority.lstという優先度リストを指定します。

catctl -L priority.lst catupgrd.sql
1,CDB$ROOT
1,PDB$SEED
1,CDB1_PDB1,CDB1_PDB2

この例は、次の特性を持つ優先度リストのアップグレードを示します。

  • 除外処理: なし

  • 包含処理: なし

  • デフォルト処理: CDB1_PDB3、CDB1_PDB4、CDB1_PDB5

アップグレード順序は、次の順番で実行されます。

  1. CDB$ROOT

  2. PDB$SEED、CDB1_PDB1

  3. CDB1_PDB2、CDB1_PDB3

  4. CDB1_PDB4、CDB1_PDB5

例3-32 PDBの優先度サブセットの指定および包含リストによる他のPDBのアップグレード

次の例では、アップグレード用にPDBの優先度サブセットを指定するpriority.lstという優先度リストを指定します:

catctl -L priority.lst -c 'CDB1_PDB2 CDB1_PDB4 CDB1_PDB5' catupgrd.sql

このコマンドは、次の優先度リストを参照します。

1,CDB$ROOT
1,PDB$SEED
1,CDB1_PDB2,CDB1_PDB4
2.CDB1_PDB5

この例は、次の特性を持つ優先度リストのアップグレードを示します。

  • 除外処理: なし

  • 包含処理: CDB1_PDB2 CDB1_PDB4 CDB1_PDB5

  • デフォルト処理: なし

アップグレード順序は、次の順番で実行されます。

  1. CDB1_PDB2、CDB1_PDB4

  2. CDB1_PDB5

パラレル・アップグレード・ユーティリティは包含リストにあるPDBだけを、優先度リストの順に処理します。

例3-33 PDBの優先度サブセットの指定および除外リストによるCDB$ROOTの除外

次の例では、priority.lstという優先度リストを使用してcatctlを実行します。このコマンドを-Cオプション付きで実行するため、アップグレードからCDB$ROOTが除外されます。

catctl -L priority.lst -C 'CDB$ROOT' catupgrd.sql

優先度リストは次のとおりです。

1,CDB$ROOT
1,PDB$SEED
1,CDB1_PDB1,CDB1_PDB2
2,CDB1_PDB3,CDB1_PDB4
3,CDB1_PDB5

アップグレードは、アップグレード優先度を指定する優先度リストを使用して処理されます。

  • 包含処理: なし

  • 除外処理: CDB$ROOT

  • 優先度処理: PDB$SEED、CDB1_PDB1、CDB1_PDB2、CDB1_PDB3、CDB1_PDB4、CDB1_PDB5

CDB$ROOTは除外されるため、優先度処理はシフトします。アップグレード順序は、次の順番で実行されます。

  1. PDB$SEED、CDB_PDB1

  2. CDB_PDB2、CDB_PDB3

  3. CDB1_PDB4、CDB1_PDB5

例3-34 CATCTL_LISTONLYを使用した除外リストの指定

次の例では、アップグレード用にPDBのサブセットを指定するpriority.lstという優先度リストを指定します。CATCTL_LISTONLYオプションによって、優先度リストに含まれないPDBは、アップグレードから除外されます。

catctl -L priority.lst -C 'CATCTL_LISTONLY' catupgrd.sql

優先度リスト:

1,CDB$ROOT
1,PDB$SEED
1,CDB1_PDB1,CDB1_PDB2
2,CDB1_PDB3
3,CDB1_PDB5
  • 除外処理: CATCTL_LISTONLY (包含優先度リストのみを処理)

  • 包含処理: なし

  • デフォルト処理: なし

アップグレード順序は、次の順番で実行されます。

  1. CDB$ROOT

  2. PDB$SEED、CDB1_PDB1、CDB1_PDB2

  3. CDB1_PDB3、CDB1_PDB5

ノート:

除外リストにキーワードCATCTL_LISTONLYを指定することで、優先度リストは包含優先度リストになります。リストのPDBのみが処理されます。このシナリオではデフォルト処理は発生しないため、この例ではCDB1_PDB4は処理されません。

例3-35 CON_ID値を使用した優先度リストの指定

次の例では、アップグレード用にPDBのサブセットを指定するpriority.lstという優先度リストを指定します。

catctl -L priority.lst -C 'CATCTL_LISTONLY' catupgrd.sql

アップグレード順序は、優先度リストの優先度値によって決まります。-Lパラメータによってコールされるリスト(priority.lst)で、アップグレード優先度値に続く数値は、PDB名に関連付けられたCON_ID値です。

1,3,4
2,5,CDB1_PDB4
3,7

前述のリスト例で、CON_ID値とPDB名を混在させて使用できることに注意してください。

優先度3にリストされているPDBは、CDB1_PDB1 (CON_ID 3で指定)およびCDB1_PDB2 (CON_ID 4で指定)です。これらのPDBは、CDB1_PDB3 (CON_ID 5)、CDB1_PDB4 (名前で指定)およびCDB1_PDB5 (CON_ID 7)より先にアップグレードされます。

  • 除外処理: -C CATCTL_LISTONLY (包含優先度リストのPDBのみを処理)

  • 除外処理: なし

  • 包含処理: priority.lstで指定

  • デフォルト処理: CDB$ROOT、PDB$SEED

アップグレード順序は、PDBに関連付けられたCON_ID値を使用する優先度リストによって決まります。

  1. CDB$ROOT

  2. PDB$SEED、CDB1_PDB1

  3. CDB1_PDB2、CDB1_PDB3

  4. CDB1_PDB4、CDB1_PDB5

ノート:

この例は、CON_IDを使用してPDBを指定する方法を示しており、優先度リストからCDB$ROOTおよびPDB$SEEDを省略しています。CDB$ROOTとPDB$SEEDは、デフォルト処理を使用して処理されます。

マルチテナント・アーキテクチャのパラレル・アップグレード

この方法を使用して、コンテナ・データベース(CDB)をアップグレードしてから複数のプラガブル・データベース(PDB)をパラレルにアップグレードして、マルチテナント・アーキテクチャOracle Databaseリリース(Oracle Database 12cリリース1 (12.1.0.1)以降)をアップグレードします。

プラガブル・データベース(PDB)のパラレル・アップグレードについて

パラレルの方法を使用して、CDBをアップグレードしてからすぐにパラレルSQLプロセッサを使用してPDBをアップグレードできます。

コンテナ・データベース(CDB)には、0 (ゼロ)、1またはそれ以上のプラガブル・データベース(PDB)を含めることができます。デフォルトでは、パラレル・アップグレード・ユーティリティ(catctl.pl)により、CDBおよび同じアップグレード・ウィンドウ内のそのすべてのPDBが更新されます。パラレル・アップグレード・ユーティリティでは、コンピュータ処理装置(CPU)の数を使用して、同時にアップグレードするPDBの最大数を決定します。パラレルにアップグレードするPDBの数は、パラレルSQLプロセス数(-nオプション)をPDBのパラレルSQLプロセス数(-Nオプション)で割ることにより決定されます。

ノート:

CDBの各PDBが提供するすべてのデータベース・サービスの一般的な停止時間に対応できるアップグレード・ウィンドウを計画する必要があります。

プラガブル・データベースのアップグレード構文

dbupgrade [-M] -n [-N]

  • -Mでは、CDB$ROOTをアップグレード・モードで維持するかどうか、またはそれをアップグレードの完了時に使用可能にするかどうかを指定します。

    • -Mパラメータを使用してパラレル・アップグレード・ユーティリティを実行する場合、アップグレードでは、CDB$ROOTとそのすべてのPDBがアップグレード・モードになり、合計アップグレード時間を短縮できます。ただし、CDBとそのすべてのPDBがアップグレードされるまで、どのPDBも起動できません。

    • -Mパラメータを使用してパラレル・アップグレード・ユーティリティを実行しない場合、CDB$ROOTがアップグレードされて標準モードで再起動され、標準のバックグラウンド・プロセスが起動されます。アップグレードが成功した後、CDB$ROOTのみが読取り/書込みモードでオープンされます。PDBはすべてMOUNTモードのままになります。それぞれのPDBのアップグレード中に、他のPDBのアップグレードが進行中でも各PDBをオンラインにできます。

  • -nでは、PDBのパラレル・アップグレード・プロセッサの数を指定します。

    -nの値を指定しない場合、-nのデフォルトはCPU_COUNT値になります。

    -nの値を指定する場合、その値を使用してパラレルSQLプロセスの数が決定されます。最大値の制限はありません。最小値は4です。

  • -Nでは、PDBのアップグレード時に使用するSQLプロセッサの数を指定します。最大値は8です。最小値は1です。-Nの値を指定しない場合、デフォルト値は2になります。

  • 同時実行されるPDBアップグレードの最大数は、-Nの値で割られた-nの値になります。

次に、PDBのパラレル・アップグレードの方法で使用する手順の概要を示します。

  1. バックアップ計画が完了していることを確認します。

  2. アップグレード前ツールを実行します。レポートされた問題をすべて修正します。アップグレード前ツール(preupgrade.jar)は、新しいOracle Databaseリリースに同梱されています。

  3. パラレル・アップグレード・ユーティリティを実行します。次のアップグレードが順番に実行されます。

    1. サイクル1: CDB$ROOTが新しいOracleリリースにアップグレードされます

    2. サイクル2からサイクルx: -nを使用して指定したパラメータ設定により決定されるアップグレードのサイクル数で、PDB$SEEDおよびPDBがパラレルにアップグレードされます。

  4. アップグレード後のステップを完了します。

例3-36 デフォルトを使用したマルチテナント・アーキテクチャのアップグレードの例(パラメータ・セットなし)

このシナリオでは、CPU_COUNT値は24です。-nオプションを使用してパラレルPDBプロセッサの値を指定しない場合、パラレルPDBプロセッサ(-n)のデフォルト値は24になります。-Nの値を指定しない場合、SQLプロセッサの数(-N)のデフォルト値は2です。

結果:

12個のPDBがパラレルにアップグレードされます(CPU_COUNTを2で割るか、24を2で割る)。PDBごとに2個のパラレルSQLプロセスが割り当てられます。

例3-37 64個のPDBのパラレル・アップグレード・プロセッサおよび4個のパラレルSQLプロセスを使用したマルチテナント・アーキテクチャのアップグレードの例

このシナリオでは、オプション-n 64を指定して、パラレルPDBアップグレード・プロセッサの値を64に設定します。オプション-N 4を指定して、パラレルSQLプロセッサの値を4に指定します。

結果:

16個のPDBがパラレルにアップグレードされます(64を4で割る)。PDBごとに4個のパラレルSQLプロセスが存在します。

例3-38 20個のPDBのパラレル・アップグレード・プロセッサおよび2個のパラレルSQLプロセスを使用したマルチテナント・アーキテクチャのアップグレードの例

このシナリオでは、オプション-n 20を指定して、パラレルPDBアップグレード・プロセッサの値を20に設定します。オプション-N 2を指定して、パラレルSQLプロセッサの値を2に指定します。

結果:

10個のPDBがパラレルにアップグレードされます(20を2で割る)。PDBごとに2個のパラレルSQLプロセスが存在します。

例3-39 10個のPDBのパラレル・アップグレード・プロセッサおよび4個のパラレルSQLプロセスを使用したマルチテナント・アーキテクチャのアップグレードの例

このシナリオでは、オプション-n 10を指定して、パラレルPDBアップグレード・プロセッサの値を10に設定します。オプション-N 4を指定して、パラレルSQLプロセッサの値を2に指定します。

結果:

2個のPDBがパラレルにアップグレードされます(10を4で割る)。PDBごとに4個のパラレルSQLプロセスが存在します。

マルチテナント・コンテナ・データベースのパラレル・アップグレード

この方法を使用して、1回のアップグレード操作でCDB$ROOT、PDB$SEED、およびCDB内のすべてのPDBをアップグレードします。

これはアップグレードの直接的な手順であり、メンテナンスが簡単になるため、停止時間をスケジュールできる場合はこのアプローチを使用することをお薦めします。この手順を使用すると、サーバーの使用可能なプロセッサ(CPU)に応じてマルチテナント・アーキテクチャ・コンテナ・データベースのすべてのPDBがパラレルにアップグレードされます。

ノート:

パラレル・アップグレード方式を使用してコンテナ全体をアップグレードする場合は、すべてのPDBを停止する必要があります。すべてのPDBを停止できるように、アップグレードはスケジュールされたアップグレード期間に実行します。

注意:

  • 構成の変更を開始する前に、既存のデータベースのバックアップを必ず作成してください。

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

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

  1. 適切なバックアップ計画が準備されていることを確認します。
  2. すべてのPDBをオープンします。

    次に例を示します。

    SQL> alter pluggable database all open;
    
  3. 次の構文を使用してアップグレード前情報ツール(preupgrade.jar)を実行します。
    /java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar [TERMINAL|FILE|DIR outputdir] [TEXT|XML] [-c InclusionListOfPDBs] [-C ExclusionListOfPDBs]

    リストはスペースで区切ります。LinuxとUNIXでは、リスト項目を単一引用符 'で囲んでリストを定義します。Windowsシステムでは、リスト項目を二重引用符 "で囲んでリストを定義します。

    たとえば、次のコマンドを実行してPDBのPDB1からPDB25までにアップグレード前情報ツールを実行します(Oracle DatabaseのOracleホームの環境変数$ORACLE_HOME_12.1/u01/app/oracle/product/12.1.0/dbhome_1/に設定し、新しいOracle DatabaseのOracleホームの環境変数$ORACLE_HOME_18.1/u01/app/oracle/product/18.1.0/dbhome_1/に設定している場合)。

    LinuxおよびUNIX:

    java -jar $ORACLE_HOME_18.1/rdbms/admin/preupgrade.jar \
    -c 'pdb1 pdb2 pdb3 pdb4 pdb5 pdb6 pdb7 pdb8 pdb9 pdb10 pdb11 pdb12 pdb13\
    pdb14 pdb15 pdb16 pdb17 pdb18 pdb19 pdb20 pdb21 pdb22 pdb23 pdb24 pdb25'

    Windowsの場合:

    java -jar %ORACLE_HOME_18.1%/rdbms/admin/preupgrade.jar \
    -c "pdb1 pdb2 pdb3 pdb4 pdb5 pdb6 pdb7 pdb8 pdb9 pdb10 pdb11 pdb12 pdb13\
    pdb14 pdb15 pdb16 pdb17 pdb18 pdb19 pdb20 pdb21 pdb22 pdb23 pdb24 pdb25"

    ノート:

    アップグレード前情報ツールを実行するには、Java 1.5以上を使用する必要があります。デフォルトでは、直接アップグレード可能なOracle DatabaseリリースのJavaリリースでは、このツールがサポートされます。

  4. 生成された修正スクリプトおよびログ・ファイルを確認します。

    ORACLE_BASEが定義されている場合はデフォルトで、修正ファイルが次のいずれかのパスに配置されます。

    • LinuxおよびUNIX:

      $ORACLE_BASE/cfgtoollogs/db_unique_name/preupgrade

    • Windows

      %ORACLE_BASE%\cfgtoollogs\db_unique_name\preupgrade

    ORACLE_BASEが定義されていない場合は、修正ファイルが次のいずれかのパスに配置されます。

    • LinuxおよびUNIX:

      $ORACLE_HOME/cfgtoollogs/db_unique_name/preupgrade

    • Windowsの場合:

      %ORACLE_HOME\cfgtoollogs\db_unique_name\preupgrade

    マルチテナント・アーキテクチャOracle Databaseでは、アップグレード前情報ツールは統合されたpreupgrade_fixups.sqlスクリプトも作成します。統合された修正スクリプトはcatcon.plを使用して実行できます。統合された修正スクリプトは、preupgrade.jarコマンドを実行したときにオープンされた各コンテナで実行されます。

  5. preupgrade_fixupsスクリプト、または個別のPDBスクリプトを実行します。preupgrade_fixups SQLスクリプトは、preupgradeスクリプトによってレポートされたいくつかの問題を解決します。

    マルチテナント環境のOracle Databaseデプロイメントでは、ソース・データベースでpreupgrade_fixupspdb-name.sqlスクリプトを実行できます(pdb-nameはPDBの名前です)。PDBの修正スクリプトを生成する場合は、PDBの名前が修正ファイル名に付加されます。

    個々のPDB修正スクリプトに加え、catcon.plを使用して、統合されたpreupgrade_fixups.sqlスクリプトを実行できます。統合スクリプトは、preupgrade.jarを実行したときにオープンされた各コンテナで実行されます。

    ノート:

    $はオペレーティング・システムで予約された記号であるため、PDB$SEEDの修正スクリプトは、preupgrade_fixups_pdb_seed.sqlになります。

    アップグレード前情報ツールによって特定された他のアップグレード前の作業をすべて完了します。

  6. (条件付き) Oracle RACデータベースの場合は、クラスタ・データベース初期化パラメータをfalseに設定します。

    次に例を示します。

    ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
  7. 古いOracleホームのデータベースを停止します。

    たとえば、db_unique_nameはデータベース名です。

    $ srvctl stop database -d db_unique_name
  8. PFILEまたはSPFILEを古いOracleホームから新しいOracleホームにコピーします
  9. SQL*Plusと接続:
    sqlplus / as sysdba
  10. CDB$ROOTインスタンスをアップグレード・モードに移行します。
    STARTUP UPGRADE
  11. すべてのPDBをアップグレード・モードに移行します。
    ALTER PLUGGABLE DATABASE ALL OPEN UPGRADE;
  12. PDBのステータスをチェックし、アップグレードの準備が完了していることを確認します。
    SHOW PDBS
    すべてのPDBについて、ステータスがMIGRATEに設定されていることを確認します。
  13. SQL*Plusを終了して、ディレクトリを新しいOracleホームの$ORACLE_HOME/rdbms/adminに変更します。
    SQL> EXIT
    $ ORACLE_HOME/bin 
  14. パラレル・アップグレード・ユーティリティ(catctl.pl、シェル・コマンドdbupgradeを使用)を実行し、アップグレードを開始します(-dでディレクトリの場所を指定します)。
    dbupgrade -d $ORACLE_HOME/rdbms/admin

    パラメータを指定しない場合、パラレル・アップグレード・ユーティリティは、CPUの数を2で割った数に等しい数のPDBに対してパラレル・アップグレードを実行します。64個のCPUを持つサーバーでは、64を2で割った数に等しい32のPDBが、PDBごとに2つのSQLプロセッサを使用してパラレルにアップグレードされます。CDB$ROOTは、アップグレードの継続中はNORMALモードのままです。

  15. upg_summary.logを表示してアップグレードが成功したことを確認し、必要に応じて他のログも表示します。
  16. データベースを再コンパイルできるように、すべてのPDBをオープンします。
    ALTER PLUGGABLE DATABASE ALL OPEN;
  17. SQL*Plusを終了して、ディレクトリを新しいOracleホーム・パスの$ORACLE_HOME/rdbms/adminに変更します。
    SQL> EXIT
    cd $ORACLE_HOME/rdbms/admin
  18. catcon.plスクリプトと、新しいリリースのOracle Databaseに付属するpostupgrade_fixups.sqlスクリプトを実行します。

    次の例は、catcon.plを実行するためのコマンド文字列を示しており、PDBごとに1つのパラレル・プロセッサを指定する-nパラメータ、実行するアップグレード前スクリプトが存在するパスを指定する-dパラメータ、スクリプトでログ・ファイルを配置する場所を指定する-lパラメータ、およびpostupgrade_fixups.sqlスクリプトのログ・ファイル接頭辞を指定する-bフラグを使用しています。

    $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -d \
    $ORACLE_HOME/cfgtoollogs/cdbupgr/preupgrade -l /home/oracle/upgrdDBA -b \
    postupgrade_fixups postupgrade_fixups.sql
  19. postupgrade_fixups.sqlを実行します。

    非CDB:

    SQL> @rdbms/admin/postupgrade_fixups.sql

    CDB:

    $ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b postupgradefixups -d '''.''' postupgradefixups.sql
  20. utlu122s.sqlを実行して、アップグレードに関する問題がないことを確認します。

    非CDB:

    SQL> @rdbms/admin/utlu122s.sql
    

    CDB:

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

    catcon.plを使用してutlu122s.sqlを実行する場合、ログ・ファイルutlu122s0.logが生成されます。このログ・ファイルにはアップグレードの結果が含まれます。アップグレード・レポートのupg_summary.logを確認することもできます。

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

  21. (条件付き) Oracle RAC環境の場合のみ、次のコマンドを入力してCLUSTER_DATABASEの初期化パラメータ値をTRUEに設定し、Oracle RACデータベースを起動します(dbnameは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管理者ガイド』を参照してください

切断/接続を使用したマルチテナント・アーキテクチャの順次アップグレード

以前のリリースのマルチテナント・コンテナ・データベース(CDB) (Oracle Databaseリリース12c (12.1.0.1)以降)に存在するプラガブル・データベース(PDB)をアップグレードするには、以前のリリースのCDBからPDBを切断し、PDBを新しいリリースのCDBに接続できます。

プラガブル・データベース(PDB)の順次アップグレードについて

PDBをアップグレードするには、以前のリリースのCDBからPDBを切断し、そのPDBを新しいリリースのCDBに接続してから新しいリリースにアップグレードします。

CDBには、0 (ゼロ)、1またはそれ以上のプラガブル・データベース(PDB)を含めることができます。新しいOracle Databaseリリースをインストールするか、またはCDB (CDB$ROOT)をアップグレードした後に、CDB上のすべてのPDBをアップグレードせずに1つ以上のPDBをアップグレードできます。

サービス・デリバリのニーズを満たすアップグレード計画を選択できます。たとえば、Oracle Database Upgrade Assistant (DBUA)を使用してPDBのセットをアップグレードしたり、手動アップグレードを使用してPDBを個別にアップグレードしたり、包含リストまたは除外リストを使用できます。CDBとすべてのPDBをアップグレードすることも(パラレル手動アップグレード)、CDBをアップグレードしてから包含リストや除外リストを使用して個別にまたはセットでPDBを順次アップグレードすることもできます。

次に、PDBの順次アップグレードに必要なステップの概要を示します。

  1. 以前のリリースのPDBを以前のリリースのCDBから切断します。

  2. CDBからPDBを削除します。

  3. 以前のリリースのPDBを新しいリリースのCDBに接続します。

  4. 以前のリリースのPDBを新しいリリースにアップグレードします。

Oracle Database 12cリリース2 (12.2)以降では、パラレル・アップグレード・ユーティリティにリストを指定してPDBをアップグレードできるようになりました。
  • 優先度リスト: PDBのアップグレード順序を設定します

  • 包含リスト: 優先度リストに指定されたPDBがアップグレードされた後にアップグレードするPDBのセットを指定できます

  • 除外リスト: アップグレードしないPDBのセットを指定できます

ノート:

PDBは、バックアップしないとリカバリできません。CDBを作成してPDBに接続する方法でアップグレードした後は、必ずPDBをバックアップしてください。

以前のリリースのPDBの以前のリリースのCDBからの切断

PDBのアップグレードを準備するには、この手順を使用して以前のリリースのCDBからPDBを切断します。

  1. PDBでアップグレード前情報ツールを実行します

    たとえば、salespdbという名前のPDBが$ORACLE_HOME_12.2のCDBで実行されている場合:

    $ORACLE_HOME_12.2/jdk/bin/java -jar 
    $ORACLE_HOME_18/rdbms/admin/preupgrade.jar dir /tmp -c salespdb
  2. ソース・データベースでpreupgrade_fixups.sqlを実行します。

    次に例を示します。

    CONNECT / AS SYSDBA
    SQL> ALTER SESSION SET CONTAINER=salespdb;
    
    SQL> @/tmp/preupgrade_fixups_salespdb.sql
  3. preupgrade.logにリストされているすべての推奨事項に従います。

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

    たとえば、PDB salespdbをクローズするには、次のコマンドを使用します。

    SQL> ALTER PLUGGABLE DATABASE salespdb CLOSE;
    
  5. もう一度CDB$ROOTにログインします。
    CONNECT / AS SYSDBA
    SQL> ALTER SESSION SET CONTAINER=CDB$ROOT;
    
  6. 次のSQLコマンド構文を使用して以前のリリースのPDBを切断します(pdbはPDBの名前で、pathはPDB XMLファイルの場所です)。

    ALTER PLUGGABLE DATABASE pdb UNPLUG INTO 'path/pdb.xml';

    たとえば、pdbの名前がsalespdbで、パスが/home/oracle/salespdb.xmlの場合:

    SQL> ALTER PLUGGABLE DATABASE salespdb UNPLUG INTO '/home/oracle/salespdb.xml';
    

    コマンドが完了すると、次のレスポンスが表示されます。

    Pluggable database altered
  7. プラガブル・データベースsalespdbは削除しますが、データ・ファイルは保持します。

    CDBビューに残っている情報をクリーン・アップし、将来の問題を回避するために、この手順の後にsalespdbを削除することをお薦めします。ベスト・プラクティス・ガイドラインとして、まず対象CDBのPDBをバックアップし、その後にソースでDROPコマンドを発行します。

    注意:

    DROPコマンドによりバックアップ・ファイルが削除されるため、元のCDBからPDBを削除した後は、先に行ったバックアップを使用して元に戻すことはできません。

    プラガブル・データベースを削除するには、次のコマンドを入力します。

    SQL> DROP PLUGGABLE DATABASE salespdb KEEP DATAFILES; 
  8. 終了します。

以前のリリースのPDBの新しいリリースのCDBへの接続

以前のリリースのCDBから新しいリリースのCDBにPDBを接続するには、CREATE PLUGGABLE DATABASEコマンドを使用します。

次の手順例では、Oracle管理ファイルを使用しているときのPDBへの接続方法を示しています。PDBの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。

  1. 新しいリリースのCDBに接続します。

  2. 次のSQLコマンドを使用して以前のリリースのPDBに接続します(pdbはPDBの名前で、pathはPDB XMLファイルが存在するパスです)。

    CREATE PLUGGABLE DATABASE pdb USING 'path/pdb.xml';

    次に例を示します。

    SQL> CREATE PLUGGABLE DATABASE salespdb USING '/home/oracle/salespdb.xml';
    

    コマンドが完了すると、次のレスポンスが表示されます。

    Pluggable database created.

ノート:

以前のリリースのPDBに接続するときには、PDBは制限モードです。アップグレードの場合にのみ、PDBをオープンできます。

以前のリリースのPDBの新しいリリースへのアップグレード

UPGRADEモードでのPDBのオープンでは、パラレル・アップグレード・ユーティリティを使用して、以前のリリースのPDBをCDBのリリース・レベルにアップグレードします。

  1. 必要に応じて、アップグレードするPDBに切り替えます。たとえば、PDB salespdbに切り替えるには、次のコマンドを入力します。

    SQL> ALTER SESSION SET CONTAINER=salespdb;
  2. PDBをUPGRADEモードで開きます。

    SQL> ALTER PLUGGABLE DATABASE OPEN UPGRADE;
    
  3. パラレル・アップグレード・ユーティリティ・コマンド(catctl.pl、またはシェル・ユーティリティdbupgrade)を使用してPDBをアップグレードします。

    PDBをアップグレードする場合、パラレル・アップグレード・ユーティリティで通常使用するコマンドを使用します。ただし、アップグレードするPDBを指定するためにオプション-c PDBnameも追加します。salespdbという名前のPDBを使用する次の例に示すとおり、PDBの名前を大文字にします。

    $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catctl.pl -d  \
    $ORACLE_HOME/rdbms/admin -c 'salespdb' -l $ORACLE_BASE catupgrd.sql
  4. 結果を確認します。

    ログのデフォルトのファイル・パスはOracle_base/cfgtoollogs/dbname/upgradedatetimeです。Oracle_baseはOracleベース・パス、dbnameはデータベース名、upgradedatetimeはアップグレードの日時です。日時の文字列の書式はYYYYMMDDHHMMSCで、YYYYは年、MMは月、DDは日、HHは時間、MMは分、SCは秒を表します。

    次に例を示します。

    $ORACLE_BASE/cfgtoollogs/salespdb/upgrade20160815120001/upg_summary.log
    
  5. SQL*Plusにログインし、PDBをオープンしてアップグレード後修正を実行してから、データベースのINVALIDオブジェクトを再コンパイルします。

    SQL> STARTUP;
    SQL> ALTER SESSION SET CONTAINER=salespdb;
    
  6. ユーティリティcatcon.plを使用してスクリプトpostupgrade_fixups.sqlを実行します。

    $ORACLE_HOME/perl/bin/perl catcon.pl –c 'salespdb' -n 1 -e -b postfixups -d '''.''' /tmp/cfgtoollogs/salespdb/preupgrade/postupgrade_fixups.sql
  7. $ORACLE_HOME/rdbms/adminディレクトリから、ユーティリティcatcon.plを使用してutlrp.sqlを実行します。

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

    このスクリプトは、データベース内のINVALIDオブジェクトを再コンパイルし、現在のディレクトリにcomp0.logという名前のログ・ファイルを配置します。

PDBのアップグレードに包含リストまたは除外リストを使用する

以前のリリースのPDBのサブセットをアップグレードする場合は、包含リストまたは除外リストを使用して、新しいリリース・レベルのCDBまたはPDBを再度アップグレードしないようにします。

アップグレードするコンテナを記録し、包含リストまたは除外リストを使用して、これらのコンテナが連続バルク・アップグレードから除外されるようにします。アップグレードしたコンテナを連続バルク・アップグレードから除外することで、アップグレードが必要なPDBでのみアップグレードが実行されることが保証されます。再アップグレードを回避することでアップグレード時間全体が短縮され、不要なダウン時間を避けることになります。

たとえば、Oracle Database 12cリリース12.2.0.1をインストールした場合は、コンテナCDB$ROOTPDB$SEED、およびCDBが作成されたときに作成された他のPDBは、新しいリリースのマルチテナント・アーキテクチャの一部です。CDBおよび、同時に一連のPDBをリリース12.2.0.1にアップグレードした場合は、CDBコンテナも、アップグレードしたPDBも再度アップグレードする必要はありません。

どちらの場合でも、以前のリリースのPDBに接続し、それらをアップグレードするときに、除外リストか包含リストを使用してPDBをアップグレードします。
  • アップグレードするPDBセットだけを指定するには、包含リストを使用します。

  • すでにアップグレードしたCDBおよびPDBを除外するには、除外リストを使用します。

アップグレード範囲を制限するための包含リストも除外リストも使用しない場合、パラレル・アップグレード・ユーティリティ(catctl.pl)は、アップグレードが必要なPDBだけではなく、CDB全体をアップグレードしようとします。アップグレード処理中、システムには不要なダウンタイムがあります。包含リスト・オプションと除外リスト・オプションは相互に排他的です。