sql >> データベース >  >> RDS >> Oracle

R12.2でカットオーバーフェーズが失敗した後にパッチをロールバックする方法

    カットオーバーフェーズが失敗した場合のシナリオが存在する可能性があります。データベースでフラッシュバックデータベースが有効になっているか、カットオーバーの前に完全バックアップを取得している場合は、カットオーバーの以前の状態に戻る(パッチをロールバックする)ことができます

    パッチをロールバックするためのデータベースフラッシュバックに関して説明します

    ここでは、データベースでフラッシュバックが有効になっていると想定しています。コマンドを使用して確認できます

    SQL>select FLASHBACK_ON from v$database;
    FLASHBACK_ON
    ------------
    Yes

    フラッシュバックデータベースの詳細については、以下のリンクをご覧ください

    Oracleデータベースのフラッシュバック
    データガードがある場合にフラッシュバックする方法

    オンラインパッチのカットオーバーフェーズは、オンライントランザクションが少なく、バッチ処理が最小限の時間にスケジュールすることをお勧めします。重要な同時リクエストがカットオーバー中に実行されていないことを確認する必要があります。また、カットオーバーを実行する前に、スケジュールされた同時リクエストを保留にすることを検討する必要があります。そうしないと、カットオーバーフェーズでプログラムが完了するのを待ち、フラッシュバックの場合はトランザクションデータが失われます

    問題のケースを見てみましょう

    ケース1

    オンラインパッチ適用サイクルを実行しています:

    $ adop phase=prepare
    $ adop phase=apply patches=99999999
    $ adop phase=finalize
    $ adop phase=cutover

    カットオーバーは失敗し、カットオーバーフェーズを実行する前にシステムの状態に戻る必要があります。

    カットオーバーフェーズを実行していなかった場合は、adopabortフェーズを実行することでパッチ適用プロセスをロールバックできたはずです。ただし、カットオーバーが実行されると、これは不可能になります。

    パッチをロールバックする主な部分は2つあります。
    (1)データベースの復元 :フラッシュバックデータベースは、データベースの変更をロールバックして特定の時点に戻すための最速の方法です。データベース復元技術も使用できますが、これには非常に時間がかかります

    データベースのフラッシュバック
    a)。まず、データベースをシャットダウンしてから、マウント状態で起動します。

    SQL>shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL>startup mount
    ORACLE instance started.

    b)。指定した時間にフラッシュバックを復元します。

    SQL>flashback database to time to_data(<time before teh cutover>;
    Flashback complete.

    c)。データベースを読み取り専用モードで起動します:

    SQL>alter database open read only;
    Database altered.
    
    Check all looks as expected.

    d)。データベースをシャットダウンし、マウント状態で起動してから、resetlogsオプションを使用して開きます。

    SQL>shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL>startup mount
    ORACLE instance started.
    Database mounted.
    SQL>alter database open resetlogs;
    Database altered.


    2)ファイルシステムの復元 :カットオーバーが失敗した時期によっては、アプリケーション層のファイルシステムを復元する必要がある場合もあります

    ファイルシステムの復元

    この手順を実行する必要があるかどうかは、ファイルシステムが切り替わる前にカットオーバーが失敗したかどうかに応じて条件付きです。 $ NE_BASE / EBSapps / log / adop / / cutover_ /の現在のセッションIDのカットオーバーログを参照することで、これらのケースのどれが当てはまるかを特定できます。

    ケース1–ファイルシステムが切り替わる前にカットオーバーが失敗したことをログメッセージが示している場合は、実行中のサービスをすべてクリーンシャットダウンします。次に、通常の起動スクリプトを使用してすべてのサービスを再起動します。

    ケース2–ファイルシステムの切り替え後にカットオーバーが失敗したことをログメッセージが示している場合は、以下の手順に従ってファイルシステムを元に戻します。

    (a)新しい実行ファイルシステムから開始されたサービスをシャットダウンします

    1。新しい実行ファイルシステムで環境を調達します。
    2.$ ADMIN_SCRIPTS_HOMEから、すべてのサービスをシャットダウンします(adstpallを使用) UNIXの場合は.sh)。

    (b)マルチノード環境では、すべてのノードで前の2つの手順を繰り返し、すべてのスレーブノードが終了するまで管理ノードを残します。

    (c)ファイルシステムを元に戻す
    ファイルシステムが切り替えられたすべてのノードで、次のコマンドを実行してファイルシステムを元に戻します。

    $ perl $AD_TOP/patch/115/bin/txkADOPCutOverPhaseCtrlScript.pl \
    -action=ctxupdate \
    -contextfile=<full path to new run context file> \
    -patchcontextfile=<full path to new patch file system context file> \
    -outdir=<full path to out directory>

    (d)古い実行ファイルシステムからすべてのサービスを起動します(UNIXではadstrtal.shを使用)。
    (e)マルチノード環境では、管理ノードから始めて、すべてのノードで前の2つの手順を繰り返します。次に、スレーブノードに進みます

    結論

    復元が完了したら、続行するための2つの基本的なオプションがあります。
    (a)復元が必要な問題の原因が適用しようとしたパッチである場合は、現在のパッチ適用サイクルを中止します。

    オンラインパッチ適用サイクルを中止する手順は次のとおりです

    パッチ適用サイクルが失敗し、問題を迅速に解決できない場合は、パッチ適用サイクルを中止して、通常のランタイム操作に戻ることができます。パッチエディションは削除されます。

    次のコマンドを実行して、(パッチを適用せずに)パッチ適用サイクルを中止できます。
    $ adop phase =abort

    パッチ適用サイクルを中止すると、パッチエディションが削除されますが、新しいパッチ適用サイクルを開始する前に、クリーンアップフェーズとfs_cloneフェーズを実行する必要があります。クリーンアップは完全なクリーンアップである必要があります。

    For example:
    $ adop phase=prepare
    $ adop phase=apply patches=9999999
    $ adop phase=abort
    $ adop phase=cleanup cleanup_mode=full
    $ adop phase=fs_clone

    オプションで、次のように中止コマンドとクリーンアップコマンドを組み合わせることができます。

    $ adop phase=abort,cleanup cleanup_mode=full

    (b)現在のパッチ適用サイクルで他の問題を特定して修正し、パッチ適用を続行します。


    1. T-SQLは、2つの日付の間の稼働日数を取得します

    2. SQL Server REPLACE()とTRANSLATE():違いは何ですか?

    3. Ubuntu16.10でPostgreSQLを9.6から10.0にアップグレードします

    4. Oracleで非稼働時間をなくす方法