Oracle Databaseのアップグレードの再実行

これらのオプションを使用してアップグレードを再実行します。

Oracle Databaseのアップグレードの再実行について

Oracleでは失敗フェーズを含め、Oracle Databaseのアップグレードを再実行または再開始するために、ここにリストされた機能を提供しています。

パラレル・アップグレード・ユーティリティおよび再開始または再起動

Database Upgrade Assistant (DBUA)またはパラレル・アップグレード・ユーティリティ(catctl.pl)スクリプトを使用して、Oracle Databaseアップグレード・フェーズを再実行または再開始できます。また、最初の試行でアップグレードに失敗したPDBにコマンドを実行して、アップグレードを完了することもできます

パラレル・アップグレード・ユーティリティの再開オプション

Oracle Database 12cリリース2 (12.2)には、パラレル・アップグレード・ユーティリティの新しい再開オプションが含まれています。このオプションはCDBと非CDBの両方に使用できます。アップグレードを再実行または再開始する際に、失敗したフェーズや完了しなかったフェーズを特定する必要はありません。再開オプション(-R)を使用してパラレル・アップグレード・ユーティリティを使用する場合は、正常に完了しなかった以前のアップグレードのフェーズを、このユーティリティが自動的に検出します。その後、アップグレードが完了するように、パラレル・アップグレード・ユーティリティは正常に完了しなかったそれらのフェーズだけを再実行または再開始します。すでに正常に完了したステップを飛ばすことによって、アップグレードの再実行にかかる時間を減らします。

再開オプションを使用するには、-Rパラメータを使用してパラレル・アップグレード・ユーティリティを実行します。次に例を示します。

$ORACLE_HOME/perl/bin/perl catctl.pl -L plist.txt -n 4 -N 2 -R -l $ORACLE_HOME/cfgtoollogs catupgrd.sql

アップグレードで失敗したのがどのフェーズであったかにかかわらず、アップグレード全体をいつでも再実行できます。失敗したフェーズだけではなく、アップグレード全体の再実行を計画している場合は、再開(-R)オプションを使用しないでパラレル・アップグレード・ユーティリティを実行します。

アップグレード(catctl.pl)・スクリプトを使用したアップグレードの再実行

アップグレードの問題を修正してから、catctl.plスクリプトまたはdbupgradeシェル・コマンドを使用して、アップグレードを再実行できます。

ノート:

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

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

    SQL> SHUTDOWN IMMEDIATE
    
  2. UPGRADEモードでデータベースを再起動します。

    非CDBの場合:

    SQL> STARTUP UPGRADE
    

    CDBの場合:

    SQL> STARTUP UPGRADE 
    SQL> alter pluggable database all open upgrade;
    
  3. パラレル・アップグレード・ユーティリティ(catctl.pl、またはdbupgradeシェル・コマンド)を再実行します。

    何度でも必要な回数だけパラレル・アップグレード・ユーティリティを再実行できます。

    CDBには再開オプション(-R)を使用して、パラレル・アップグレード・ユーティリティを再実行できます。スクリプトは失敗したフェーズから再開されます。

    次に例を示します。

    $ORACLE_HOME/perl/bin/perl catctl.pl -n 4 -R -l $ORACLE_HOME/cfgtoollogs catupgrd.sql

    また、アップグレード実行する1つ以上の特定のPDBの名前を指定することもできます。

    たとえば、次のコマンドはcdb1_pdb1という名前のPDBに対してアップグレードを再実行します。

    $ORACLE_HOME/perl/bin/perl catctl.pl -n 4 -R -l $ORACLE_HOME/cfgtoollogs -c 'cdb1_pdb1' catupgrd.sql

    同じコマンドを実行するのにdbupgradeシェル・コマンドを使用できます。

    dbupgrade -n 4 -R -l $ORACLE_HOME/diagnostics 
    dbupgrade -n 4 -R -l $ORACLE_HOME/diagnostics -c 'cdb1_pdb1'  
  4. utlu122s.sql (アップグレード後の状態ツール)を実行します(これにより、スプール・ログにアップグレードのステータスのサマリーが表示されます)。utlu122s.sqlは、アップグレードの完了する前または後にいつでも実行できますが、アップグレード中は実行できません。

    非CDBの場合:

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

    CDBの場合:

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

    utlu122s.sqlスクリプトがエラーを返したり、VALIDではないコンポーネントを表示した場合や、最新のリリースではない場合、トラブルシューティングの手順に従って詳細を確認してください。

  5. utlrp.sqlを実行して、残りのすべてのストアドPL/SQLおよびJavaコードを再コンパイルします。

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

    スクリプトによって、ログ・ファイルutlrp0.logが生成され、そこに再コンパイルの結果が示されます。

    次のSQLコマンドを使用して、予期されるすべてのパッケージおよびクラスが有効であることを確認します。

    単一のPDB (この例ではcdb1_pdb1)で、次のように標準モードでPDBを開きます。

    alter pluggable database cdb1_pdb1 open;
    

    catcon.plを実行して、PDB内のutlrp.sqlを起動し、残りのすべてのストアドPL/SQLおよびJavaコードを再コンパイルします。次の構文を使用します。

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

    非CDBの場合:

    SQL> SELECT count(*) FROM dba_invalid_objects;
    SQL> SELECT distinct object_name FROM dba_invalid_objects;
    

    CDB全体の場合:

    SQL> ALTER SESSION SET CONTAINER = "CDB$ROOT"
    SQL> SELECT count(*) FROM dba_invalid_objects;
    SQL> SELECT distinct object_name FROM dba_invalid_objects;
    SQL> ALTER SESSION SET CONTAINER = "PDB$SEED"
    SQL> SELECT count(*) FROM dba_invalid_objects;
    SQL> SELECT distinct object_name FROM dba_invalid_objects;
    SQL> ALTER SESSION SET CONTAINER = "cdb1_pdb1"
    SQL> SELECT count(*) FROM dba_invalid_objects;
    SQL> SELECT distinct object_name FROM dba_invalid_objects;
    
  6. utlu122s.sqlを再度実行して、すべての問題が修正されたことを確認します。

    非CDBの場合:

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

    CDBの場合:

    $ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlu122s -d '''.''' utlu122s.sql
    
  7. SQL*Plusを終了します。

  8. リリース11.2からクラスタ・データベースをアップグレードする場合、次のコマンド構文を使用してOracle Clusterwareのデータベース構成をアップグレードします(db-unique-nameは、(インスタンス名ではなく)割り当てられたデータベース名であり、Oracle_homeは、データベースがアップグレードされるOracleホームの場所です)。

    $ srvctl upgrade database -d db-unique-name -o Oracle_home
    

これで、データベースがOracle Database 12cにアップグレードされました。Oracle Databaseのアップグレード後の作業を完了する準備が整いました。

マルチテナント・データベース(CDB)のアップグレード再実行のオプション

Oracle Database 12cリリース2 (12.2).のマルチテナント・データベース・アーキテクチャ(CDB)でアップグレードを再実行する場合、4つのオプションを使用できます。

CDBのアップグレード全体の再実行

最初のアップグレードの試行中に複数の異なる問題が発生した場合、この手順を使用してアップグレード全体を再実行します。

この例では、最初のアップグレードの試行中に発生した問題(共有プールの不足など)の修正後に、CDB$ROOTPDB$SEEDおよびすべてのPDBでアップグレードを再度実行する方法について示します。

  1. 再度アップグレードを開始します。次に例を示します。

    SQL> startup upgrade;
    alter pluggable database all open upgrade;
    
  2. パラレル・アップグレード・ユーティリティ(catctl.pl、またはdbupgradeシェル・スクリプト)を実行します。次に例を示します。

    cd $ORACLE_HOME/bin/
    ./dbupgrade -d $ORACLE_HOME/rdbms/admin -l $ORACLE_HOME/rdbms/log 

    CDB$ROOTPDB$SEEDおよびCDB内のすべてのPDBを含むすべてのコンテナでアップグレードが再実行されます。

指定したCDBのみのアップグレードの再実行

再開オプション(-R)または除外リスト・オプション(-C)のいずれかを指定してパラレル・アップグレード・ユーティリティを実行することにより、指定したマルチテナント・コンテナでアップグレードを再実行できます。

次の両方の例で、マルチテナント・コンテナ・データベースには5つのPDBが含まれています。CDB1_PDB1CDB1_PDB2はアップグレード・エラーによって失敗しましたが、それ以外のすべてのアップグレードは正常に実行されています。これらの2つのコンテナでアップグレードを実行するには、マルチテナント・データベース全体を停止し、アップグレードするPDBのみを再起動します。

ノート:

パラレル・アップグレード・ユーティリティのパラメータでは大/小文字が区別されます。

例3-41 再開オプションを使用したアップグレードの再実行

パラレル・アップグレード・ユーティリティの再開パラメータ・オプション-Rを使用して、1つ以上のマルチコンテナ(CDB)のみのアップグレードを再実行できます。

次の例で、アップグレード・スクリプトはCDB1_PDB1およびCDB1_PDB2コンテナのみで実行することを検出しています。

  1. マルチテナント・データベースを停止し、データベースをアップグレード・モードで起動してから、アップグレードが完了していないPDBを起動します。次に例を示します。

    SQL> shutdown immediate;
          startup upgrade;
          alter pluggable database CDB1_PDB1 open upgrade;
          alter pluggable database CDB1_PDB2 open upgrade;
    
  2. CDBとPDBのステータスを表示します。

     SQL> show pdbs
     
           CON_ID CON_NAME                       OPEN MODE  RESTRICTED
           ---------- ------------------------------ ---------- ----------
               2 PDB$SEED                       MIGRATE    YES
               3 CDB1_PDB1                      MIGRATE    YES
               4 CDB1_PDB2                      MIGRATE    YES
               5 CDB1_PDB3                      MOUNTED
               6 CDB1_PDB4                      MOUNTED
               7 CDB1_PDB5                      MOUNTED
    
  3. アップグレードを再実行します。アップグレードはCDB$ROOTとPDB$SEEDが正常にアップグレードされたことを、前回のアップグレード・ログから自動的に検出します。アップグレードはCDB$ROOTとPDB$SEEDを無視して、CDB1_PDB1とCDB_PDB2だけで実行されます。次のコマンド例は、Linux/UNIXシステム用です。

    cd $ORACLE_HOME/bin
    ./dbupgrade -d $ORACLE_HOME/rdbms/admin -l $ORACLE_HOME/cfgtoollogs -R

パラレル・アップグレード・ユーティリティはCDB1_PDB1CDB1_PDB2でアップグレードを完了します。

例3-42 除外リストを使用したアップグレードの再実行

除外リストには、アップグレードしないコンテナが含まれています。除外リストでは、パラレル・アップグレード・ユーティリティの-Cパラメータ・オプションを使用します。ディレクトリをOracle_home/rdbms/admin/に変更し、catctl.plを使用してPerlでユーティリティを実行することにより、パラレル・アップグレード・ユーティリティを実行するか、または、ディレクトリをOracle_home/binに変更してコマンドライン・スクリプトdbupgrade -Cを実行することにより、パラレル・アップグレード・ユーティリティを実行します。この方法は、アップグレードを再実行するPDBが多い場合に役立ちます。

次の例では、除外リストを指定して、アップグレードを実行する必要のないコンテナでの実行からアップグレード・スクリプトを除外します。

  1. マルチテナント・データベースを停止し、データベースをアップグレード・モードで起動してから、アップグレードが完了していないPDBを起動します。次に例を示します。

    SQL> shutdown immediate;
          startup upgrade;
          alter pluggable database CDB1_PDB1 open upgrade;
          alter pluggable database CDB1_PDB2 open upgrade;
    
  2. CDBとPDBのステータスを表示します。

     SQL> show pdbs
     
           CON_ID CON_NAME                       OPEN MODE  RESTRICTED
           ---------- ------------------------------ ---------- ----------
               2 PDB$SEED                       MIGRATE    YES
               3 CDB1_PDB1                      MIGRATE    YES
               4 CDB1_PDB2                      MIGRATE    YES
               5 CDB1_PDB3                      MOUNTED
               6 CDB1_PDB4                      MOUNTED
               7 CDB1_PDB5                      MOUNTED
    
  3. 単一引用符で指定するスペース区切りの除外リストでCDB$ROOTPDB$SEEDを除外して、アップグレードを再実行します。次のコマンド例は、Linux/UNIXシステム用です。

    $ORACLE_HOME/bin/dbupgrade -d $ORACLE_HOME/rdbms/admin -l $ORACLE_HOME/rdbms/log -C 'CDB$ROOT PDB$SEED'

アップグレードはCDB1_PDB1およびCDB1_PDB2で再実行し、完了します。

ノート:

Windowsの場合は、二重引用符を使用して除外リストを指定し、-Cオプションの除外リストを指定する必要があります。次に例を示します。

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

他のPDBがオンラインの間にアップグレードを再実行する

パラレル・アップグレード・ユーティリティの再開オプションを使用して、または包含リストか除外リストを使用してオンラインのPDBを明示的に包含または除外して、PDBのアップグレードを再実行できます。

PDBでアップグレードを実行するモデルとして次の例を使用します。ここでは、他のPDBがオープンしている間に一部のPDBでアップグレードを再実行します。

この例で、コンテナCDB1_PDB1およびCDB1_PDB2はアップグレードに失敗していますが、コンテナCDB1_PDB3CDB1_PDB4およびCDB1_PDB5は成功しています。

CDB$ROOTを通常モードで起動します。CDB1_PDB3CDB1_PDB4およびCDB1_PDB5のコンテナがオンラインであることがわかります。CDB1_PDB3CDB1_PDB4およびCDB1_PDB5のアップグレード・ログを確認し、これらのコンテナをオンラインに移行します。

例3-43 再開オプションを使用したPDBでのアップグレードの再実行

次の例はパラレル・アップグレード・ユーティリティの再開オプションを使用して、CDB1_PDB1CDB1_PDB2のアップグレードを実行する方法を示しています。再開オプションにより、すでにアップグレードしたPDBは除外されます。

  1. 標準モードでCDB$ROOTを起動し、アップグレード・モードでCDB1_PDB1およびCDB1_PDB2をオープンします。CDB1_PDB3CDB1_PDB4CDB1_PDB5は標準モードです。次に例を示します。

    SQL> startup;
          alter pluggable database CDB1_PDB1 open upgrade;
          alter pluggable database CDB1_PDB2 open upgrade;
          alter pluggable database cdb1_pdb3 open;
          alter pluggable database cdb1_pdb4 open;
          alter pluggable database cdb1_pdb5 open;
    
  2. SQLコマンドshow pdbsを使用して、PDBのステータスを表示します。次に例を示します。

    SQL> show pdbs
    
            CON_ID CON_NAME                       OPEN MODE  RESTRICTED
            ---------- ------------------------------ ---------- ----------
                 2 PDB$SEED                       READ ONLY  NO
                 3 CDB1_PDB1                      MIGRATE    YES
                 4 CDB1_PDB2                      MIGRATE    YES
                 5 CDB1_PDB3                      READ WRITE NO
                 6 CDB1_PDB4                      READ WRITE NO
                 7 CDB1_PDB5                      READ WRITE NO
    
  3. アップグレードからCDB$ROOTを除外し、パラレル・アップグレード・ユーティリティのコマンドライン・スクリプトdbupgradeを使用して、アップグレードを再実行します。

    cd $ORACLE_HOME/bin
    ./dbupgrade -d $ORACLE_HOME/rdbms/admin/ -l $ORACLE_HOME/cfgtoollogs -R

    再開オプションを使用してアップグレードを実行するため、パラレル・アップグレード・ユーティリティはログをチェックし、CDB1でアップグレードされていないコンテナはCDB1_PDB1CDB1_PDB2の2つのみであることを突き止めます。アップグレード・スクリプトはその2つのPDBでのみ、実行されます。PDB$SEEDCDB$ROOTCDB_PDB3CDB_PDB4およびCDB_PDB5でアップグレードが再実行されることはありません。

例3-44 除外リストを使用したPDBでのアップグレードの再実行

次の例はアップグレード・スクリプトを実行しないPDBを除外するために除外リストを使用して、CDB1_PDB1CDB1_PDB2のアップグレードを実行する方法を示しています。

  1. 標準モードでCDB$ROOTを起動し、アップグレード・モードでCDB1_PDB1およびCDB1_PDB2をオープンします。CDB1_PDB3CDB1_PDB4CDB1_PDB5は標準モードです。次に例を示します。

    SQL> startup;
          alter pluggable database CDB1_PDB1 open upgrade;
          alter pluggable database CDB1_PDB2 open upgrade;
          alter pluggable database cdb1_pdb3 open;
          alter pluggable database cdb1_pdb4 open;
          alter pluggable database cdb1_pdb5 open;
    
  2. SQLコマンドshow pdbsを使用して、PDBのステータスを表示します。次に例を示します。

    SQL> show pdbs
    
            CON_ID CON_NAME                       OPEN MODE  RESTRICTED
            ---------- ------------------------------ ---------- ----------
                 2 PDB$SEED                       READ ONLY  NO
                 3 CDB1_PDB1                      MIGRATE    YES
                 4 CDB1_PDB2                      MIGRATE    YES
                 5 CDB1_PDB3                      READ WRITE NO
                 6 CDB1_PDB4                      READ WRITE NO
                 7 CDB1_PDB5                      READ WRITE NO
    
  3. アップグレードからCDB$ROOTを除外し、パラレル・アップグレード・ユーティリティのコマンドライン・スクリプトdbupgradeを使用して、アップグレードを再実行します。

    cd $ORACLE_HOME/bin
    ./dbupgrade -d $ORACLE_HOME/rdbms/admin -l $ORACLE_HOME/cfgtoollogs -R -C 'CDB$ROOT'

    再開オプション(-R)を指定してパラレル・アップグレード・ユーティリティが実行され、CDB1_PDB1と

    CDB1_PDB2はアップグレードが完了していないことがログからわかります。除外オプション(-C)を指定してパラレル・アップグレード・ユーティリティを実行し、CDB$ROOTが除外されるように指定しているため、アップグレード・スクリプトも明示的にCDB$ROOTでの実行から除外されます。

    Windowsで除外オプション(-C)を付けてパラレル・アップグレード・ユーティリティを実行する場合は、CDB root名とPDBシード名を二重引用符で囲んで-Cオプションのターゲットを指定する必要があります。次に例を示します。

    . . . -C "CDB$ROOT PDB$SEED"
  4. アップグレードはCDB1_PDB1およびCDB1_PDB2で再実行し、完了します。

CDBまたはPDBを指定するための包含リストを使用したアップグレードの再実行

包含リストを使用してPDBでアップグレードを再実行する場合、この例をモデルとして使用してください。

包含リストを使用して、アップグレードを再実行するCDBおよびPDBのリストを指定し、包含リストに存在しないノードを除外できます。包含オプション(-c)の後に、アップグレードするコンテナを単一引用符で囲んだスペース区切りリストを指定して、パラレル・アップグレード・ユーティリティを実行することにより、包含リストを指定します。

この例で、コンテナCDB1_PDB1およびCDB1_PDB2はアップグレードに失敗していますが、コンテナCDB1_PDB3、CDB1_PDB4およびCDB1_PDB5は成功しています。CDB$ROOTを通常モードで起動します。CDB1_PDB3、CDB1_PDB4およびCDB1_PDB5のコンテナがオンラインであることがわかります。CDB1_PDB3、CDB1_PDB4およびCDB1_PDB5のアップグレード・ログを確認し、これらのコンテナをオンラインに移行します。

例3-45 包含リストを使用したPDBでのアップグレードの再実行

次に例を示します。

  1. 標準モードでCDB$ROOTを起動し、アップグレード・モードでCDB1_PDB1およびCDB1_PDB2をオープンします。CDB1_PDB3CDB1_PDB4CDB1_PDB5は標準モードです。次に例を示します。

    SQL> startup;
          alter pluggable database CDB1_PDB1 open upgrade;
          alter pluggable database CDB1_PDB2 open upgrade;
          alter pluggable database cdb1_pdb3 open;
          alter pluggable database cdb1_pdb4 open;
          alter pluggable database cdb1_pdb5 open;
    
  2. SQLコマンドshow pdbsを使用して、PDBのステータスを表示します。次に例を示します。

    SQL> show pdbs
    
            CON_ID CON_NAME                       OPEN MODE  RESTRICTED
            ---------- ------------------------------ ---------- ----------
                 2 PDB$SEED                       READ ONLY  NO
                 3 CDB1_PDB1                      MIGRATE    YES
                 4 CDB1_PDB2                      MIGRATE    YES
                 5 CDB1_PDB3                      READ WRITE NO
                 6 CDB1_PDB4                      READ WRITE NO
                 7 CDB1_PDB5                      READ WRITE NO
    
  3. 包含(-c)オプションの後に、アップグレード対象を単一引用符で囲んで指定したスペース区切りの包含リストを付けて、パラレル・アップグレード・ユーティリティを再実行します。このオプションにより、包含リストで指定したPDBに対してのみアップグレードが実行されます。

    次に例を示します。

    cd $ORACLE_HOME/bin
    ./dbupgrade -d $ORACLE_HOME/rdbms/admin -l ORACLE_HOME/cfgtoollogs -R -c 'CDB1_PDB1 CDB1_PDB2'

    Windowsで包含オプションを付けてパラレル・アップグレード・ユーティリティを実行する場合は、包含リストでアップグレード対象を二重引用符で囲んで-cオプションのターゲットを指定する必要があります。次に例を示します。

    . . . -C "CDB1_PDB1 CDB1_PDB2"
  4. アップグレードはCDB1_PDB1およびCDB1_PDB2で再実行し、完了します。