4 ワークフローの構成と監視

Oracle WebLogic ServerでZDTパッチ適用ワークフローを構成して、パッチを適用したOracleホームをロールアウトしたり、新しいJavaバージョンにアップグレードしたり、管理対象サーバー上のアプリケーションを更新したり、これらのタスクの組合せを実行したりします。WLSTを使用して、ワークフローを作成および監視します。

この章では、管理対象サーバーをパッチが適用されたOracleホームに移動、管理対象サーバーのJavaバージョンを更新、管理対象サーバーのアプリケーションを更新、またはこれらの更新タスクを組み合せた、パッチ適用ワークフローの構成と監視方法について説明します。

ノート:

更新プロセスを開始する前に、ダウンタイムなしのパッチ適用の準備に従って、実行中の更新のタイプに応じた適切な準備ステップをすべて完了しておく必要があります。

Windowsベースのドメインの場合、Oracleホームを更新するワークフローを開始する前に、各ノードで、更新されるOracleホームにロックされているディレクトリまたはファイルがないことを確認します。これがあると、指定したバックアップ・ディレクトリにOracleホームを移動できない可能性があるためです。ディレクトリはDOSコマンド・ウィンドウをそのディレクトリで開くという程度の簡単なことでロックできます。ファイルはそのファイルをアプリケーションで開くことによってロックできます。

パッチが適用されたOracleホームのロールアウトの手法

ターゲット・クラスタにロールアウトする前に、パッチが適用されたOracleホームを最初に管理サーバーにロールアウトする必要があります。2つの順次ワークフローを使用して、または1つのワークフローを使用してこれを実行できます。

WLSTを使用して新しいOracleホームをロールアウトする場合、パッチを適用したOracleホームをまず管理サーバーにロールアウトする必要があります。これを行うには2つの方法があります。

  • 1つのワークフローを使用してパッチ適用済Oracleホームを管理サーバーにロールアウトし、次に2つ目のワークフローを使用してパッチ適用済Oracleホームをクラスタにロールアウトします。この手法の使用をお薦めしますが、必須ではありません。

    このシナリオでは、WLSTを使用して、rolloutOracleHomeまたはrolloutUpdateコマンドを実行し、ターゲットとして管理サーバー名を指定します。次にrolloutOracleHomeまたはrolloutUpdateを再度実行し、クラスタ・ターゲットを指定します。

  • 1つのワークフローのみを使用してパッチ適用済Oracleホームをドメイン全体にロールアウトします。ワークフローは、パッチが適用されたOracleホームを、ターゲット・クラスタにロールアウトする前に、まず管理サーバーにロールアウトします。

    このシナリオでは、WLSTを使用して、rolloutOracleHomeまたはrolloutUpdateコマンドのいずれかを実行し、ターゲットとしてドメイン名を指定します。

管理サーバーの起動に関する項

ロールアウト操作を開始する前に、ノード・マネージャを使用して管理サーバーを起動することが重要です。管理サーバーについて構成されたノード・マネージャがない場合は、startWebLogicスクリプトを使用することで管理サーバーを起動できます。

管理サーバーがワークフローに含まれる場合、startWebLogicスクリプトまたはノード・マネージャを使用して管理サーバーを起動できます。ロールアウトのために指定したターゲットがドメインである場合、管理サーバーは、ロールアウト操作の間に自動的に再起動されます。ただし、ロールアウト操作によって管理サーバーが再起動されるときに、WLSTに接続できないと、短いダウンタイムが発生する場合があります。

ロールアウト操作を開始する前に管理サーバーを起動するには、次のいずれかの方法で管理サーバーを起動します。

  • startWebLogicスクリプトの使用

    管理サーバーについて構成されたノード・マネージャがない場合は、startWebLogicスクリプトを使用することで管理サーバーを起動できます。このスクリプトを使用して管理サーバーを起動するには、『Oracle WebLogic Serverサーバーの起動と停止の管理』起動スクリプトによる管理サーバーの起動を参照してください。

  • ノード・マネージャの使用

    ノード・マネージャが管理サーバーのために構成されている場合は、ノード・マネージャを使用して管理サーバーを起動する必要があります。ノード・マネージャを使用して管理サーバーを起動するには、次のステップを実行します。

  1. 管理サーバーが実行中で、ドメイン・ホームでstartWebLogicスクリプトを使用して起動された場合、stopWebLogicコマンドを使用してシャットダウンします。

    UNIX

    cd domain_home/bin
    ./stopWebLogic.sh
    
    

    Windows

    cd domain_home\bin
    stopWebLogic.cmd
    
  2. ノード・マネージャがホストで実行中であることを確認します。
  3. WLSTを起動します。『WebLogic Scripting Toolの理解』WLSTの呼出しに関する項を参照してください。
  4. nmConnectコマンドを使用してノード・マネージャ・セッションを確立します。たとえば、SSLを使用して、/domains/mydomainにあるドメインmydomainに接続するには、次のコマンドを使用します。ここでは、ノード・マネージャ・ポートは5556です。
    wls:/myserver/serverConfig> nmConnect('username', 'password, 'localhost',
    '5556', 'mydomain', '/domains/mydomain','ssl') 
    
  5. 正常に接続されてから、nmStartコマンドを実行します。たとえば、管理サーバーがAdminServerであり、ドメインが/domains/mydomainにある場合は、次のコマンドを使用します。
    nmStart('AdminServer', '/domains/mydomain')
    

『Oracle WebLogic Serverノード・マネージャの管理』ノード・マネージャを使用した管理サーバーの起動に関する項を参照してください。

WLSTを使用したワークフローの起動と監視

WLSTには、パッチが適用されたOracleホーム、新しいJavaバージョンまたは両方の組合せ、あるいは新しいアプリケーション・バージョンをロールアウトするために使用できる一連のZDTパッチ適用コマンドが含まれます。

この項では、ワークフローを起動して管理対象サーバーを更新するのに使用できるWLSTコマンドについて説明し、様々なワークフロー(ロールアウト)シナリオを示すサンプルのWLSTスクリプトを提供します。

ノート:

WLST rolloutOracleHomeまたはrolloutUpdateコマンドを使用して、Windowsベースのドメインの新しいOracleホームのロールアウトを起動する場合、ワークフローの一部として更新されるOracleホームからWLSTを実行することはできません。「ZDTパッチ適用の制限」を参照してください。

次のWLSTコマンドを使用して、サーバーの自動ローリング更新を実行します。これらのコマンドは、ターゲット・ドメインの管理サーバーから実行する必要があります。

  • rolloutOracleHome — パッチが適用されたOracleホームを管理対象サーバーにロールアウトするか、管理対象サーバーを前のOracleホームに回復します。このコマンドで使用するパッチ適用済Oracleホームのアーカイブは、copyBinaryおよびpasteBinaryコマンドを使用して作成されたものである可能性があります。

  • rolloutJavaHome — 新しいJavaバージョンを使用するように管理サーバーを更新します。

  • rolloutUpdate — パッチが適用されたOracleホームと新しいJavaバージョンを使用するように管理サーバーを更新します。このコマンドで使用するパッチ適用済Oracleホームのアーカイブは、copyBinaryおよびpasteBinaryコマンドを使用して作成されたものである可能性があります。

  • rolloutApplications—管理対象サーバーで実行している指定したアプリケーションを更新します。

ノート:

ロールアウトのコマンドでWindowsのパスを指定する場合、スラッシュのかわりにバックスラッシュを使用する必要があります。不要なエラーを避けるため、必ずバックスラッシュをエスケープするようにしてください。(たとえば、C:\\myhome\\files\\apps.json)。詳細は、WebLogic Scripting Toolの理解WLSTコマンドの構文を参照してください。

これらのいずれかのWLSTコマンドを実行するときには、コマンドによって、更新する必要のあるサーバー、およびその順序が決定され、それらを安全に更新するパッチ適用ワークフローが作成されます。このワークフローには、次のことが含まれます。

  • 管理対象サーバーを1つずつ正常にシャットダウン。これには、現在ADMINまたはSTANDBYモードの管理対象サーバーは含まれません。migrationPropertiesオプションがロールアウト・コマンドに含まれている場合、これにはシングルトン・サービスの移行が含まれます。

  • Oracleホーム・ディレクトリの置換(必要な場合)

  • Javaホーム・ディレクトリの置換(必要な場合)

  • アプリケーション・ディレクトリの置換(必要な場合)

  • ノードでのノード・マネージャの再起動

  • ノードでの管理対象サーバーの再起動

表4-1では、WLSTrolloutコマンドで使用可能なパラメータを示します。

表4-1 WLSTロールアウト・コマンドの引数

引数 説明

target

すべてのロールアウト・コマンドに必須です。

更新に含まれる管理対象サーバーを指定します。targetは次のいずれかです。

domain_name — ドメイン内の管理サーバーおよびすべての管理対象サーバーを更新する場合に、ターゲットとしてドメイン名を指定します。

clusters — 特定のクラスタ内のすべての管理対象サーバーを更新し、それ以外のクラスタの管理対象サーバーは更新しない場合、クラスタ名、またはクラスタ名のカンマ区切りリストを指定します。

servers — 該当する管理対象サーバーのみを更新する場合、サーバー名、またはサーバー名のカンマ区切りリストを指定します。指定するサーバーはクラスタの一部である必要があります。クラスタ化されていないサーバーは指定できません。

ノート: 通常、管理サーバーの更新時にのみ、サーバー・ターゲットを指定する必要があります。個々の管理対象サーバーの更新は、セッションが維持されずに、ユーザーの停止時間を回避できない可能性があるため、ほとんどの場合でお薦めできません。ただし、1つ以上の新しい管理対象サーバーを追加してあり、それらがその他の管理対象サーバーと同じJavaバージョンではない場合、安全に管理対象サーバー・ターゲットを指定できます。

rolloutOracleHome

rolloutOracleHomeコマンドに対してのみ適用され、必須です。

ロールアウトするOracleホームのアーカイブ(JARファイル)またはローカルのOracleホーム・ディレクトリを指定し、その結果、既存のOracleホームを置き換えます。

backupOracleHome

rolloutOracleHomeコマンドに対してのみ適用され、必須です。

既存のOracleホームの移動先となるディレクトリのフルパスを指定します。これにより、元のOracleホームの名前が効率的に変更されます。たとえば、元のOracleホームが/u01/Oracle_Homeで、このパラメータに/u01/Oracle_Home_backupを指定すると、/u01/Oracle_Home/u01/Oracle_Home_backupに移動します(名前が変更されます)。

isRollback

オプション。rolloutOracleHomeおよびrolloutUpdateコマンドにのみ適用されます。

javaHome

rolloutJavaHomeコマンドには必須であり、このコマンドに対して適用されます。オプションで、この引数がrolloutUpdateコマンドに必要な場合があります。

使用する新しいJavaホームの場所を指定します。

applicationProperties

rolloutApplicationsコマンドには必須であり、このコマンド対して適用されます。オプションで、この引数がrolloutUpdateコマンドに必要な場合があります。

1つ以上のアプリケーション名、アプリケーション・アーカイブの場所およびアプリケーション・バックアップの場所を定義するJSONファイルへのフルパスを指定します。

options

次のオプションのうち1つ以上をロールアウト・コマンドに含めることができます:

  • isDryRunTRUEの場合、ワークフロー操作は評価されますが実行されません。デフォルトはFALSEです。

  • isAutoRevertOnFailureTRUEの場合、ワークフロー操作は失敗時に自動的に回復されます。FALSEの場合、ワークフロー操作は失敗時に停止し、ユーザーが再開または回復できます。デフォルトはTRUEです。

  • isSessionCompatible—このオプションは、ロールアウトがセッション処理に影響を与えるかどうかにかかわらず、ロールアウト時間に影響するため、すべてのrolloutコマンドに適用されます。

    デフォルトはFALSEで、クラスタ内で最後に更新されるサーバーは、すべての既存のセッションの完了を待機することを意味します。これにより、まだ既存のバージョンで実行されている管理対象サーバーによって処理される必要のあるセッションは、クラスタ内の互換サーバーを使用して処理されることが保証されます。

    TRUEに設定されている場合は、既存バージョンと新規バージョンとの間でサーバーのセッション状態が完全に互換していることを示します。したがって、クラスタ内で更新順序が最後の管理対象サーバーは、既存のセッションがすべて完了するのを待機せずに停止します。

    セッション状態が同一であることが保証されないかぎり、これをFALSEに設定することをお薦めします。これにより、セッション完了の待機が原因でロールアウトに時間がかかる可能性があります。

    ノート: WebLogic Serverにおけるシリアライゼーションおよびデシリアライゼーションは、Javaのシリアライゼーションおよびデシリアライゼーションとは若干異なります。したがって、クラスにフィールドを追加すると、セッションが新しいバージョンのサーバーとの互換性を失い、既存バージョンのサーバーがクラスを処理する必要が生じる場合があります。たとえば、UserクラスにInformationなどのフィールドを追加すると、バージョン間でセッションの互換性が失われます。

  • migrationProperties — ロールアウト中に実行されるシングルトン・サービス移行を定義するJSONファイルへのフルパス。このファイルおよびサービス移行の作成の詳細は、「シングルトン・サービスへの移行の準備」を参照してください

  • shutdownTimeout — WLSTがサーバーの強制的なシャットダウンの前に、正常なシャットダウンを待機する時間(秒)。サーバーの強制的なシャットダウンは、セッション・データや処理中のトランザクションが失われるなどの、好ましくない結果を引き起こす可能性があります。1秒よりも小さい値は無視されます。

    isSessionCompatibleTRUEに設定されている場合、shutdownTimeoutオプションはデフォルトでゼロに設定され、WLSTはサーバーが正常にシャットダウンするのを無期限に待機します。

    isSessionCompatibleFALSEに設定されている場合、ユーザーはshutdownTimeoutオプションの値を指定する必要があります。代表的なアプリケーションに完了のために多くの時間を与える値を指定することをお薦めします。アプリケーションによって動作は様々であるため、この値はユーザーが決定する必要があります。

  • DelayBetweenNodes — このオプションを使用して、あるノードでサーバーがシャットダウンされてからワークフロー内の次のノードでサーバーがシャットダウンされるまでの間の待機秒数を指定します。この遅延によって、次のことが可能になります。

    • 最初のノードのサーバーを再起動してクラスタに参加させる

    • ロード・バランサによりトラフィックを均等に分散する

    • 次のノードでのサーバーのシャットダウンが開始する前に、遅い(遅延)ステートフル・セッションBeanクライアントにリクエストの作成を継続させる

    指定しない場合、この値は60秒にデフォルト設定されます。遅延ステートフル・セッションBeanクライアントについて考慮しなければ、このオプションを含めて、より低い値に設定することができます。

  • coherenceServiceHATarget — サーバーのシャットダウン前に達する必要がある、管理対象Coherenceサーバー上のCoherenceサービスの高可用性(HA)ステータスを指定するには、このオプションを使用します。ZDTワークフローでは、指定したステータスにすべてのCoherenceサービスが達するまで確認および待機します。ロールアウト・ワークフローでは、HAステータスに達するまで待機することで、キャッシュ・データの損失を回避できます。有効な値は、nonemachine-safeおよびnode-safeです。通常は値machine-safeをお薦めします。これは、ロールアウト・プロセスの間のマシン損失によってデータ損失がもたらされないようにします。値node-safeは、単一Coherenceノードに対する損失によってデータ損失がもたらされないようにします。

  • coherenceServiceHAWaitTimeout — ワークフローでのCoherence HAステータスのタスクを待機する時間を指定するには、このオプションを使用します。指定時間内にHAステータスに達した場合、タスクはタイムアウトになります。指定時間内にHAステータスに達するとすぐに、タスクが完了し、管理対象Coherenceサーバーがシャットダウンされます。デフォルト値は60秒です。

  • extension - 拡張jarファイルの場所へのフルパス。オプションで名前と値のペアとして指定したスクリプト・パラメータのカンマ区切りリストが続きます。このオプションを使用してスクリプト・パラメータを指定する場合、これらのパラメータ値は、extensionConfiguration.jsonファイルで指定した値をオーバーライドします。

  • extensionProperties - 1つ以上の拡張jarを指定するために使用するextensionProperties.jsonファイルへのフルパス。extensionProperties.jsonファイルは、通常複数の拡張jarおよび追加の拡張パラメータを指定するために使用されます。

WLSTを使用してワークフローの進行状況を監視することもできます。「ワークフローの進行状況の監視」を参照してください。

新しいOracleホームのロールアウト

次のタスクのいずれかを実行するだけの場合は、rolloutOracleHomeコマンドを使用します。

  • パッチが適用されたOracleホームを使用するように管理サーバーを更新します。

  • パッチが適用されたOracleホームを使用するようにドメイン全体(管理サーバーおよびクラスタ化された管理対象サーバー)を更新します。

  • パッチが適用されたOracleホームを使用するように、クラスタ化された管理対象サーバーを更新します。

  • 以前のパッチ未適用のOracleホームを使用するように管理サーバー、クラスタ化された管理対象サーバーまたはドメインの更新を取り消します。

rolloutOracleHomeの構文は次のとおりです。

rolloutOracleHome(target, rolloutOracleHome, backupOracleHome, [isRollback], [options=options])

このコマンドはisDryRunisAutoRevertOnFailureおよびisSessionCompatibleオプションをサポートします。このコマンドには、1つ以上のオプションのカンマ区切りリストを含めることができます。これらのオプションの詳細は、WLSTを使用したワークフローの起動と監視を参照してください。

次の例では、新しいOracleホームをドメインmydomainにロールアウトする方法を示します。パッチ適用済のOracleホームのJARファイルは、/net/wls/wls_patched.jarにあります。元のOracleホームは/u01/Oracle_Home_backupに移動(名前変更)されます。このプロセスは失敗しても自動的に回復されません。

connect('adminname', 'adminpassword', 't3://hostname:port')
domain='/domains/mydomain'
progress=rolloutOracleHome(domain, '/net/wls/wls_patched.jar', 
'/u01/Oracle_Home_backup', options='isAutoRevertOnFailure=FALSE')

ノート:

新しいOracleホームのロールアウト時は、rolloutOracleHomeコマンドでのローカルOracleホーム・ディレクトリの指定はサポートされていません。「ZDTパッチ適用の制限」を参照してください。

Javaバージョンの更新

次のタスクのいずれかを実行するだけの場合は、rolloutJavaHomeコマンドを使用します。

  • 新しいJavaバージョンを使用するように管理サーバーを更新します。

  • 新しいJavaバージョンを使用するようにドメイン全体(管理サーバーおよび管理対象サーバー)を更新します。

  • 新しいJavaバージョンを使用するように管理対象サーバーを更新します。

  • 以前のJavaバージョンを使用するように管理サーバー、管理対象サーバーまたはドメインを回復します。

rolloutJavaHomeの構文は次のとおりです。

rolloutJavaHome(target, javaHome, [options=options])

このコマンドはisDryRunおよびisAutoRevertOnFailureオプションをサポートします。このコマンドでは、1つ以上のオプションをカンマ区切りリストに含めることができます。これらのオプションの詳細は、WLSTを使用したワークフローの起動と監視を参照してください。

次の例では、新しいJavaホームをクラスタCluster1Cluster2Cluster3にロールアウトする方法を示します。新しいJavaホームの場所は/u01/jdk1.8.0_50です。この例ではisAutoRevertOnFailureオプションは含まれていないため、ワークフローはプロセスが失敗すると自動的に回復します。

connect('adminname', 'adminpassword', 't3://hostname:port')
clusters='Cluster1,Cluster2,Cluster3'
progress=rolloutJavaHome(clusters, '/u01/jdk1.8.0_50')

OracleホームおよびJavaバージョンの両方の更新

次のタスクのいずれかを実行するだけの場合は、rolloutUpdateコマンドを使用します。

  • パッチが適用されたOracleホームと新しいJavaバージョンの両方を使用するように管理サーバーを更新します。

  • パッチが適用されたOracleホームと新しいJavaバージョンの両方を使用するようにドメイン全体(管理サーバーおよびクラスタ化された管理対象サーバー)を更新します。

  • パッチが適用されたOracleホームと新しいJavaバージョンの両方を使用するように管理対象サーバーを更新します。

  • 以前のOracleホームおよび以前のJavaバージョンに管理サーバー、管理対象サーバーまたはドメインを回復します。

rolloutUpdateの構文は次のとおりです。

rolloutUpdate(target, rolloutOracleHome, backupOracleHome, [isRollback], [javaHome], [options=options])

このコマンドはisDryRunisAutoRevertOnFailureおよびisSessionCompatibleオプションをサポートします。このコマンドでは、1つ以上のオプションをカンマ区切りリストに含めることができます。これらのオプションの詳細は、WLSTを使用したワークフローの起動と監視を参照してください。

次の例では、新しいOracleホームおよび新しいJavaホームを管理サーバーにロールアウトする方法を示します。パッチ適用済のOracleホームのJARファイルは、/net/wls/wls_patched.jarにあります。元のOracleホームは/u01/Oracle_Home_backupに移動(名前変更)されます。新しいJavaホームの場所は/u01/jdk1.8.0_50です。この例ではisAutoRevertOnFailureオプションは含まれていないため、ワークフローはプロセスが失敗すると自動的に回復します。

connect('adminname', 'adminpassword', 't3://hostname:port')
server='AdminServer'
progress=rolloutUpdate(server, '/net/wls/wls_patched.jar', 
'/u01/Oracle_Home_backup', '/u01/jdk1.8.0_50')

更新されたアプリケーションのロールアウト

次のタスクのいずれかを実行する場合は、rolloutApplicationsコマンドを使用します。

  • 1つ以上のアプリケーションの新しいバージョンを使用するように管理対象サーバーを更新します

  • 1つ以上のアプリケーションについて以前のバージョンに管理対象サーバーを回復します。

rolloutApplicationsの構文は次のとおりです。

rolloutApplications(target, applicationProperties, [options=options])

このコマンドはisDryRunisAutoRevertOnFailureおよびisSessionCompatibleオプションをサポートします。このコマンドでは、1つ以上のオプションをカンマ区切りリストに含めることができます。これらのオプションの詳細は、WLSTを使用したワークフローの起動と監視を参照してください。

次の例では、JSON形式のアプリケーション・プロパティ・ファイル/u01/scratch/app_update.jsonに定義されたアプリケーションをUNIXシステム上のすべてのクラスタCluster1Cluster2Cluster3にロールアウトする方法を示します。

connect('adminname', 'adminpassword', 't3://hostname:port')
clusters='Cluster1,Cluster2,Cluster3'
progress=rolloutApplications(clusters, '/u01/scratch/app_update.json')

前のOracleホーム、Javaホームまたはアプリケーションへの回復

ロールアウトが正常に完了した後に、前のOracleホーム、Javaホームまたはアプリケーション・バージョンにロールバックする場合は、次の2つのステップを実行してロールバック操作を完了する必要があります。

  • rolloutUpdateコマンドを使用して、前のOracleホームおよびJavaホームにロールバックします。ただし、rolloutUpdateコマンドを実行してロールバックする前に、次の制限事項に留意する必要があります:

    • ロールアウトするOracleホーム・ディレクトリとしてバックアップ済Oracleホームを指定する必要があります。このディレクトリは、前のロールアウトからのバックアップ・ディレクトリである必要があります。

    • ロールバック先のOracleホーム・ディレクトリとしてバックアップ済Oracleホーム・ディレクトリを指定した後は、そのコマンドで新しいJavaホームを指定しないでください。Javaホームは、ロールバック先として指定した前のOracleホームで使用されていた、元のJavaホームに自動的にロールバックされます。

  • rolloutApplicationsコマンドを使用して、jsonファイルで古いアプリケーション・アーカイブを指定することで、前のアプリケーション・バージョンにロールバックします。このコマンドの使用の詳細は、更新されたアプリケーションのロールアウトを参照してください

次の例では、前のOracleホーム、Javaホームおよびアプリケーションにロールバックする方法を示します。この例では、myDomainはロールバック先となるドメインの名前、/pathto/unpatchedOracleHomeBackup/は前のロールアウトからのバックアップOracleホーム・ディレクトリの場所、/pathto/unpatchedOracleHomeBackup1/は既存Oracleホームの移動先となるディレクトリのパスです。ロールバック操作を可能にするには、例で示すように、isRollbackパラメータをtrueに設定する必要があります。

rolloutUpdate('myDomain', '/pathto/unpatchedOracleHomeBackup/', '/pathto/unpatchedOracleHomeBackup1/', 'true')

サーバーのローリング再起動の起動

次のタスクのいずれかを実行する場合は、rollingRestartコマンドを使用します。

  • ドメイン内のすべてのサーバーのローリング再起動の開始

  • 特定のクラスタ(1つまたは複数)内のすべてのサーバーのローリング再起動の開始

rollingRestartの構文は次のとおりです。

rolloutRestart(target, [options=options])

このコマンドでは、1つ以上のオプションをカンマ区切りリストに含めることができます。

次の例では、Cluster1およびCluster2内のすべてのサーバーのローリング再起動を実行する方法を示します。

connect('adminname', 'adminpassword', 't3://hostname:port')
clusters='Cluster1,Cluster2'
progress=rollingRestart(clusters)

ワークフローの進行状況の監視

ロールアウト・コマンドは、ワークフローの現在のステータスをポーリングするのに使用できるWorkFlowTaskRuntimeMBeanを返します。ロールアウトの進行状況を監視するには、rolloutコマンドを次の形式で使用します。

progress=rollout_command

たとえば、新しいOracleホームのロールアウトの場合は、このコマンドを使用します。

progress=rolloutOracleHome(DomainA, '/net/patched/wls1221p.jar', 
'/net/backups/wls1221', options='isAutoRevertOnFailure=FALSE')

次に、WorkflowTaskRuntimeMBeanのメソッドを使用してワークフローに関する情報を返すことができます。Oracle WebLogic Server MBeanリファレンスWorkflowTaskRuntimeMBeanに関する項を参照してください。いくつか例を挙げます。

progress.getWorkflowId()

ワークフローのIDを返します。

progress.getProgressString()
'Workflow wf0011 Running: 13/36'

現在のワークフローの進行状況に関する情報を含む判読可能なメッセージを返します。この例では、ワークフローwf0011が現在実行中であり、36個のワークフロー・コマンドのうち13個が完了しています。

progress.getStatus()
STARTED

ワークフローの現在のステータスを返します。これはSTARTEDSUCCESSRETRYREVERTINGFAILREVERTEDREVERT_FAILCANCELEDまたはREVERT_CANCELEDのいずれかです。

次のPythonスクリプト・セグメントは、進行状況オブジェクトを使用して、ワークフローを監視し、ロールアウト・タスクの進行状況を出力する1つの方法を示します。スクリプト後のサンプルの出力を示します。

# Print the starting information
rolloutName = progress.getName()
startTime = progress.getStartTime()
print "Started rollout task \"" + rolloutName + "\" at " + str(startTime)
 
# Check the state every 2 minutes
domainRuntime()
cd('RolloutService/rollout-service/ActiveWorkflows')
cd(progress.getWorkflowId())
while(get('Running')==1):
  progressString = progress.getProgressString()
  print progressString
  time.sleep(120)
 
# Print the ending information
endTime = progress.getEndTime()
state = progress.getState()
print "rollout \"" + rolloutName + "\" finished with state 


Output
Started rollout task "Domain1Rollout" at 2014-07-22 07:29:06.528971
Running step 1 of 9
Running step 2 of 9
Running step 3 of 9
Running step 4 of 9
Running step 5 of 9
Running step 6 of 9
Running step 7 of 9
Running step 8 of 9
Running step 9 of 9
rollout "Domain1Rollout" finished with state "SUCCESS" at 
2014-07-22 07:47:15.538299

停止したワークフローの実行、元に戻す、再開

ワークフローは次の理由で実行または元に戻す方向で停止することがあります:

  • isAutoRevertOnFailureオプションがFALSEに設定されている状態で、ワークフローが実行中に失敗した。

  • ワークフローが手動でキャンセルされた

  • 回復操作中にリカバリ不能エラーが発生した。

ワークフローが停止した場合は、手動でエラーを解決できます。その後、RolloutServiceRuntimeMBeanで次のメソッドを使用して、実行を継続するか元に戻すようワークフローを設定できます:

メソッド 説明

executeWorkflow(WorkflowTaskRuntimeMBean)

再開できる進行状況オブジェクトを取得し、実行方向で再開します。ワークフローで最後の正常な操作が実行だった場合、実行は次の実行ステップから再開されます。ワークフローで最後の正常な操作が元に戻す操作だった場合、実行はその元に戻すステップを実行することにより再開されます。

revertWorkflow(WorkflowTaskRuntimeMBean)

再開できる進行状況オブジェクトを取得し、回復方向で再開します。ワークフローで最後の正常な操作が実行だった場合、回復はそのステップから再開されます。ワークフローで最後の正常な操作が回復だった場合、回復は回復シーケンスでその次のステップを回復することにより再開されます。

canResume(WorkflowTaskRuntimeMBean)

ワークフローが完了する前に停止し、いずれの方向にも現在実行中ではない場合、trueを返します。この状態のワークフローは、実行または回復のいずれの方向にも再開できます。

ワークフローに役立つWLSTコマンド

この項では、役に立つ可能性のあるWLSTコマンドをいくつか説明します。

  • 完了したワークフローのリストを取得するには:

    wls:/domain_name/domainRuntime/RolloutService/rollout-service> completeWfs=
    cmo.getCompleteWorkflows()
    
    
  • アクティブなワークフローのリストを取得するには:

    wls:/domain_name/domainRuntime/RolloutService/rollout-service> activeWfs = 
    cmo.getActiveWorkflows()
    
    
  • IDでワークフローを検索しその状態を取得するには:

    wls:/domain_name/domainRuntime/RolloutService/rollout-service> 
     progress=cmo.getWorkflowTask('workflow_id')
    wls:/Domain1221/domainRuntime/RolloutService/rollout-service> progress.getStatus()
    
    
  • 実行中のワークフローを取り消すには:

    wls:/domain_name/domainRuntime/RolloutService/rollout-service>
     progress=cmo.getWorkflowTask('workflow_id')
    wls:/domain_name/domainRuntime/RolloutService/rollout-service> progress.cancel()
    
    
  • 完了したワークフローを削除するには:

    wls:/domain_name/domainRuntime/RolloutService/rollout-service> cmo.deleteWorkflow('workflow_id')

サンプルのWLSTスクリプト

この項には、1つのサービス移行でcluster1という名前のクラスタ内のすべてのサーバーのローリング再起動を実行する方法を示すサンプルのWLSTスクリプトが含まれます。このスクリプトでは、次の引数が定義されています。

  • username — WebLogic Server管理者のユーザー名

  • password — WebLogic Server管理者のパスワード

  • adminURL — ドメインの管理サーバーのホスト名とポート番号。

  • target — 操作のターゲット。表4-1を参照してください。

  • options — 操作のロールアウト・オプション。表4-1を参照してください。

次の例では、ロールアウト操作のためのサンプルWLSTスクリプトを示します。

import sys, socket
import os
import time
from java.util import Date
from java.text import SimpleDateFormat
 
argUsername = sys.argv[1]
argPassword = sys.argv[2]
argAdminURL = sys.argv[3]
argTarget = sys.argv[4]
argOptions = sys.argv[5]

try:
   connect(argUsername, argPassword, argAdminURL)
   progress = rollingRestart(argTarget, argOptions)
   lastProgressString = ""
 
   progressString=progress.getProgressString()
   # for testing progressString="12 / 12"
   steps=progressString.split('/')
 
 
   while not (steps[0].strip() == steps[1].strip()):
     if not (progressString == lastProgressString):
       print "Completed step " + steps[0].strip() + " of " + steps[1].strip()
       lastProgressString = progressString
 
     java.lang.Thread.sleep(1000)
 
     progressString=progress.getProgressString()
     steps=progressString.split('/')
     if(len(steps) == 1):
       print steps[0]
       break;
 
   if(len(steps) == 2):
     print "Completed step " + steps[0].strip() + " of " + steps[1].strip()
 
   t = Date()
   endTime=SimpleDateFormat("hh:mm:ss").format(t)
 
   print ""
   print "RolloutDirectory task finished at " + endTime
   print ""
 
   state = progress.getStatus()
   error = progress.getError()

   stateString = '%s' % state   
   if stateString != 'SUCCESS':
     #msg = 'State is %s and error is: %s' % (state,error)
     msg = "State is: " + state
     raise(msg)
   elif error is not None:
     msg = "Error not null for state: " + state
     print msg
     #raise("Error not null for state: %s and error is: %s" + (state,error))
     raise(error)  
except Exception, e:
  e.printStackTrace()
  dumpStack()
  raise("Rollout failed")
 
exit()

このスクリプトを実行するには、Python (.py)ファイルとして保存してから、次のようなコマンドを入力します。WindowsでWLSTを実行している場合は、WindowsでのWLSTの使用に関する重要な情報について、ZDTパッチ適用の制限を参照してください。

$ORACLE_HOME/oracle_common/common/bin/wlst.sh 
/u01/scripts/rollout/RollingRestart.py username password 
t3://hostname:port cluster1 "migrationProperties=/u01/json/mig.txt"