Oracle Databaseのアップグレードの再実行
これらのオプションを使用してアップグレードを再実行します。
- Oracle Databaseのアップグレードの再実行について
Oracle Databaseのアップグレードを再実行または再開始するために、Oracleでは失敗フェーズを含め、ここにリストされた機能を提供しています。 - アップグレード・スクリプト(catctl.pl)を使用したアップグレードの再実行
アップグレードの問題を修正してから、catctl.pl
スクリプトまたはdbupgrade
シェル・コマンドを使用して、アップグレードを再実行できます。 - マルチテナント・データベース(CDB)のアップグレード再実行のオプション
Oracle Database 12cリリース2 (12.2)のマルチテナント・データベース・アーキテクチャ(CDB)でアップグレードを再実行する場合、4つのオプションを使用できます。 - -pを使用して失敗したアップグレードを特定のフェーズから再開する
このオプションを使用して、エラーの修正後にアップグレードを完了します。
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
)オプションを使用しないでパラレル・アップグレード・ユーティリティを実行します。
親トピック: Oracle Databaseのアップグレードの再実行
アップグレード(catctl.pl)・スクリプトを使用したアップグレードの再実行
アップグレードの問題を修正してから、catctl.pl
スクリプトまたはdbupgrade
シェル・コマンドを使用して、アップグレードを再実行できます。
ノート:
Oracle Database 12c,リリース1 (12.1)以降では、非CDBアーキテクチャは非推奨です。今後のリリースでサポートが終了する可能性があります。
-
データベースを停止します。非CDBとCDBでは、構文は同じです。
SQL> SHUTDOWN IMMEDIATE
-
UPGRADE
モードでデータベースを再起動します。非CDBの場合:
SQL> STARTUP UPGRADE
CDBの場合:
SQL> STARTUP UPGRADE SQL> alter pluggable database all open upgrade;
-
パラレル・アップグレード・ユーティリティ(
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'
-
utlusts.sql
(アップグレード後の状態ツール)を実行します(これにより、スプール・ログにアップグレードのステータスのサマリーが表示されます)。utlusts.sql
は、アップグレードの完了する前または後にいつでも実行できますが、アップグレード中は実行できません。非CDBの場合:
SQL> @$ORACLE_HOME/rdbms/admin/utlusts.sql
CDBの場合:
$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlu122s -d '''.''' utlusts.sql
utlusts.sql
スクリプトがエラーを返したり、VALID
ではないコンポーネントを表示した場合や、最新のリリースではない場合、トラブルシューティングの手順に従って詳細を確認してください。 -
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;
-
utlusts.sql
を再度実行して、すべての問題が修正されたことを確認します。非CDBの場合:
SQL> @$ORACLE_HOME/rdbms/admin/utlusts.sql
CDBの場合:
$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlu122s -d '''.''' utlusts.sql
-
SQL*Plusを終了します。
-
リリース11.2からクラスタ・データベースをアップグレードする場合、次のコマンド構文を使用してOracle Clusterwareのデータベース構成をアップグレードします(
db-unique-name
は、(インスタンス名ではなく)割り当てられたデータベース名であり、Oracle_home
は、データベースがアップグレードされるOracleホームの場所です)。$ srvctl upgrade database -d db-unique-name -o Oracle_home
これで、データベースがアップグレードされました。Oracle Databaseのアップグレード後の作業を完了する準備が整いました。
マルチテナント・データベース(CDB)のアップグレード再実行のオプション
Oracle Database 12cリリース2 (12.2).のマルチテナント・データベース・アーキテクチャ(CDB)でアップグレードを再実行する場合、4つのオプションを使用できます。
- CDBのアップグレード全体の再実行
最初のアップグレードの試行中に複数の異なる問題が発生した場合、この手順を使用してアップグレード全体を再実行します。 - 指定したPDBのみのアップグレードの再実行
「再開」オプション(-R
)または「除外リスト」オプション(-C
)のいずれかを指定してパラレル・アップグレード・ユーティリティを実行することにより、指定したマルチテナント・コンテナでアップグレードを再実行できます。 - 他のPDBがオンラインの間にアップグレードを再実行する
パラレル・アップグレード・ユーティリティの再開オプションを使用して、または包含リストか除外リストを使用してオンラインのPDBを明示的に包含または除外して、PDBのアップグレードを再実行できます。 - CDBまたはPDBを指定するための包含リストを使用したアップグレードの再実行
包含リストを使用してPDBでアップグレードを再実行する場合、この例をモデルとして使用してください。
親トピック: Oracle Databaseのアップグレードの再実行
CDBのアップグレード全体の再実行
最初のアップグレードの試行中に複数の異なる問題が発生した場合、この手順を使用してアップグレード全体を再実行します。
この例では、最初のアップグレードの試行中に発生した問題(共有プールの不足など)の修正後に、CDB$ROOT
、PDB$SEED
およびすべてのPDBでアップグレードを再度実行する方法について示します。
-
再度アップグレードを開始します。たとえば:
SQL> startup upgrade; alter pluggable database all open upgrade;
-
パラレル・アップグレード・ユーティリティ(
catctl.pl
、またはdbupgrade
シェル・スクリプト)を実行します。たとえば:cd $ORACLE_HOME/bin/ ./dbupgrade -d $ORACLE_HOME/rdbms/admin -l $ORACLE_HOME/rdbms/log
CDB$ROOT
、PDB$SEED
およびCDB内のすべてのPDBを含むすべてのコンテナでアップグレードが再実行されます。
指定したPDBでのみのアップグレードの再実行
再開オプション(-R
)または除外リスト・オプション(-C
)のいずれかを指定してパラレル・アップグレード・ユーティリティを実行することにより、指定したマルチテナント・コンテナでアップグレードを再実行できます。
次の両方の例で、マルチテナント・コンテナ・データベースには5つのPDBが含まれています。CDB1_PDB1
とCDB1_PDB2
はアップグレード・エラーによって失敗しましたが、それ以外のすべてのアップグレードは正常に実行されています。これらの2つのコンテナでアップグレードを実行するには、マルチテナント・データベース全体を停止し、アップグレードするPDBのみを再起動します。
ノート:
パラレル・アップグレード・ユーティリティのパラメータでは大/小文字が区別されます。
例4-28 再開オプションを使用したアップグレードの再実行
パラレル・アップグレード・ユーティリティの再開パラメータ・オプション-R
を使用して、1つ以上のマルチコンテナ(CDB)のみのアップグレードを再実行できます。
次の例で、アップグレード・スクリプトはCDB1_PDB1
およびCDB1_PDB2
コンテナのみで実行することを検出しています。
-
マルチテナント・データベースを停止し、データベースをアップグレード・モードで起動してから、アップグレードが完了していないPDBを起動します。たとえば:
SQL> shutdown immediate; startup upgrade; alter pluggable database CDB1_PDB1 open upgrade; alter pluggable database CDB1_PDB2 open upgrade;
-
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
-
アップグレードを再実行します。アップグレードは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_PDB1
とCDB1_PDB2
でアップグレードを完了します。
例4-29 除外リストを使用したアップグレードの再実行
除外リストには、アップグレードしないコンテナが含まれています。除外リストでは、パラレル・アップグレード・ユーティリティの-C
パラメータ・オプションを使用します。ディレクトリをOracle_home/rdbms/admin/
に変更し、catctl.pl
を使用してPerlでユーティリティを実行することにより、パラレル・アップグレード・ユーティリティを実行するか、または、ディレクトリをOracle_home/bin
に変更してコマンドライン・スクリプトdbupgrade -C
を実行することにより、パラレル・アップグレード・ユーティリティを実行します。この方法は、アップグレードを再実行するPDBが多い場合に役立ちます。
次の例では、除外リストを指定して、アップグレードを実行する必要のないコンテナでの実行からアップグレード・スクリプトを除外します。
-
マルチテナント・データベースを停止し、データベースをアップグレード・モードで起動してから、アップグレードが完了していないPDBを起動します。たとえば:
SQL> shutdown immediate; startup upgrade; alter pluggable database CDB1_PDB1 open upgrade; alter pluggable database CDB1_PDB2 open upgrade;
-
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
-
単一引用符で指定するスペース区切りの除外リストで
CDB$ROOT
とPDB$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_PDB3
、CDB1_PDB4
およびCDB1_PDB5
は成功しています。
CDB$ROOT
を通常モードで起動します。CDB1_PDB3
、CDB1_PDB4
およびCDB1_PDB5
のコンテナがオンラインであることがわかります。CDB1_PDB3
、CDB1_PDB4
およびCDB1_PDB5
のアップグレード・ログを確認し、これらのコンテナをオンラインに移行します。
例4-30 再開オプションを使用したPDBでのアップグレードの再実行
次の例はパラレル・アップグレード・ユーティリティの再開オプションを使用して、CDB1_PDB1
とCDB1_PDB2
のアップグレードを実行する方法を示しています。再開オプションにより、すでにアップグレードしたPDBは除外されます。
-
標準モードで
CDB$ROOT
を起動し、アップグレード・モードでCDB1_PDB1
およびCDB1_PDB2
をオープンします。CDB1_PDB3
、CDB1_PDB4
、CDB1_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;
-
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
-
アップグレードから
CDB$ROOT
を除外し、パラレル・アップグレード・ユーティリティのコマンドライン・スクリプトdbupgrade
を使用して、アップグレードを再実行します。cd $ORACLE_HOME/bin ./dbupgrade -d $ORACLE_HOME/rdbms/admin/ -l $ORACLE_HOME/cfgtoollogs -R
再開オプションを使用してアップグレードを実行するため、パラレル・アップグレード・ユーティリティはログをチェックし、
CDB1
でアップグレードされていないコンテナはCDB1_PDB1
とCDB1_PDB2
の2つのみであることを突き止めます。アップグレード・スクリプトはその2つのPDBでのみ、実行されます。PDB$SEED
、CDB$ROOT
、CDB_PDB3
、CDB_PDB4
およびCDB_PDB5
でアップグレードが再実行されることはありません。
例4-31 除外リストを使用したPDBでのアップグレードの再実行
次の例はアップグレード・スクリプトを実行しないPDBを除外するために除外リストを使用して、CDB1_PDB1
とCDB1_PDB2
のアップグレードを実行する方法を示しています。
-
標準モードで
CDB$ROOT
を起動し、アップグレード・モードでCDB1_PDB1
およびCDB1_PDB2
をオープンします。CDB1_PDB3
、CDB1_PDB4
、CDB1_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;
-
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
-
アップグレードから
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"
-
アップグレードは
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のアップグレード・ログを確認し、これらのコンテナをオンラインに移行します。
例4-32 包含リストを使用したPDBでのアップグレードの再実行
たとえば:
-
標準モードで
CDB$ROOT
を起動し、アップグレード・モードでCDB1_PDB1
およびCDB1_PDB2
をオープンします。CDB1_PDB3
、CDB1_PDB4
、CDB1_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;
-
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
-
包含(-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"
-
アップグレードは
CDB1_PDB1
およびCDB1_PDB2
で再実行し、完了します。