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

REDOロググループとファイルとメンバーの理解

    このOracleチュートリアルでは、REDOロググループとファイルとメンバーを簡単に理解する方法について説明します。

    今日は、OracleのREDOログバッファの概念を学習します。ここでは、REDOログバッファとは何か、どのように機能するか、Oracleアーキテクチャでのその役割は何かを知ることができます。

    Oracleアーキテクチャを理解したい場合は、REDOログバッファの動作を理解することが非常に重要です。以下の記事は、面接の質問にも取り組むのに役立ちます。

    REDOロググループとファイルとメンバーの理解

    REDOログバッファとは何ですか?

    これは、通常、デフォルトで約14MBの小さなメモリ割り当てです。循環バッファです。いっぱいになると、再び上から書き込みを開始し、いっぱいになるとデータを上書きします。

    REDOエントリと変更ベクターとは何ですか?

    Oracleデータベースインスタンスは、すべてのDML/DDLトランザクションをREDOエントリの形式でSGAのREDOログバッファに記録します。トランザクション内の個々のステートメントは、1つまたは複数のREDOエントリになります。これらのすべてのREDOエントリは、まとめて変更ベクトルまたはREDOベクトルと呼ばれます。

    各REDOエントリは、たとえば次のようにREDOステートメントとUNDOステートメントで構成されます。

    テーブルEMP
    エンプノ 名前

    部門
    ジョン トニー ローラ タイガー スコット
    1 10
    2 20
    3 50
    4 10
    5 10
    sql>delete empno from emp where deptno=10;

    上記の例では、empテーブルにはdeptno=10の3つのレコードがあります。したがって、Oracleは上記のステートメントに対して3つのREDOエントリを作成し、これらのエントリはREDOログバッファに記録されます。これらの3つのREDOエントリは、まとめて変更ベクトルまたはREDOベクトルと呼ばれます。

    変更ベクトルは、1回の操作で影響を受ける行の数に他なりません。 REDOログバッファは、ユーザーのトランザクションをキャプチャし、そのトランザクションの無効化効果(undoステートメント)もキャプチャします。

    LGWRプロセスの動作

    REDOログバッファのサイズは小さく、動的に拡張できないため、これらの記録されたREDOエントリは、定期的にディスクにオンラインREDOログファイルに書き込む必要があります。これは、REDOログバッファのフラッシュと呼ばれることが多く、これらのREDOエントリをディスクに書き込むジョブはLGWRプロセスによって実行されます。

    LGWRがREDOエントリをディスクに書き込むのはいつですか?

    LGWRは、これらのエントリをディスクに書き込むことに非常に積極的です。以下は、LGWRがREDOエントリをディスクに書き込むときのイベントです。

    • バッファサイズが1/3フルの場合
    • 書き込みが保留されているREDOログバッファに1MBの変更ベクトルが使用可能な場合
    • 3秒ごと
    • チェックポイントが発生するたび
    • ユーザーがトランザクションをコミットしたとき

    REDOログバッファのサイズを設定するパラメータ

    log_buffer=xバイト
    REDOログバッファの構造

    REDOアーキテクチャは3つの要素で構成されています

    1. スレッドのやり直し(論理)
    2. Redologグループ(論理)
    3. Redologメンバーファイル(物理)

    1。 REDOログスレッドとは何ですか?

    • 制御ファイルの作成中は、「MAXINSTANCES」パラメータで指定されます。
    • REDOスレッドはREDOグループで構成されています。 REDOスレッドを有効にするには、有効にする必要があります。
    • RAC環境では、init.oraパラメータ「thread」を使用してREDOスレッドを特定のインスタンスにバインドできます。

    非RACデータベースでは、ほとんどの場合1つのスレッドがあります(スレッド=1)

    2。 REDOロググループとそのステータスを理解していますか?

    -制御ファイルの作成中に、「MAXLOGFILES」パラメーターとして指定されます。
    -REDOロググループは、同一のREDOログメンバーファイルのコレクションです。
    -ただし、フォールトトレランスを向上させるために、各REDOロググループに2つのREDOログメンバーファイルを保持するのが一般的です。
    -紛失しても影響はありません。 REDOログメンバーファイルは同一です(ミラーコピー)
    LGWRは、特定のREDOロググループのすべてのメンバーに並行して書き込みます
    任意の時点で、LGWRプロセスは1つのREDOロググループにのみ書き込みます。 REDOロググループが固定されているということは、REDOログメンバーファイルを動的に拡張できないことを意味します。
    LGWRプロセスが現在書き込んでいるREDOロググループは、ステータス「current」で表示されます。
    REDOロググループがいっぱいになると、LGWRプロセスは次のREDOロググループを切り替えます。
    前のグループはステータス「ACTIVE」を表示し、しばらくするとステータスは「INACTIVE」になります
    CURRENT=>アクティブ=>非アクティブ=>電流=>アクティブ=>非アクティブ…………………………………
    現在 statusは、Oracleが現在このバッファに書き込んでいることを意味します
    アクティブ このバッファのREDOエントリのチェックポイントは保留中です
    非アクティブ ステータスは、REDOログがチェックポイントされており、すぐに上書きできることを意味します。
    一度作成したREDOロググループのサイズを変更することはできませんが、常に異なるサイズのREDOロググループを削除して再作成します。ステータスが「CURRENT」または「ACTIVE」のREDOロググループを削除することはできません。

    REDOロググループを切り替える方法は?

    通常、LGWRはREDOロググループを自動的に切り替えますが、コマンドを使用して、あるREDOロググループから別のREDOロググループに手動で切り替えることができます。

    sql>alter system switch logfile ;

    LGWRが新しいREDOロググループを取得し、「ログシーケンス番号」または「シーケンス番号」と呼ばれる単調に増加する番号をそのREDOロググループに割り当てるたびに。ビューを使用してREDOロググループのメタデータを照会できます。-v$logREDOロググループは、物理ディスクのブロックサイズ(512バイトのセクター)を使用して書き込まれます

    新しいREDOロググループを追加する方法

    sql>alter database add logfile group 3 ('/path/to/member1.log', '/path/to/member2.log') size 100m reuse;

    ここでの再利用の意味は、ファイルmember1.logまたはmember2.logファイルが同じパスにすでに存在する場合は再利用することを意味します。

    REDOロググループを削除する方法

    ステータスがCURRENTまたはACTIVEでない場合は、REDOロググループを削除できます。また、このコマンドを適用した後、使用可能なREDOロググループの数は2以上になるはずです。

    sql>alter database drop logfile groups 3;

    3。ログメンバーファイルのやり直し(物理)

    制御ファイルの作成中は、「MAXLOGMEMBERS」パラメーターによって指定されます。 REDOログメンバーファイルは、OSレベルで物理的に利用できます。ファイルのサイズは、REDOロググループの作成時に固定されます。

    ファイルを動的に拡張することはできません。 LGWRは、特定のREDOロググループのすべてのメンバーに並行して書き込みます。
    REDOロググループのメンバーファイルは同一です。ビューv$logfile

    からステータス情報を照会できます。

    既存のグループに新しいメンバーを追加するにはどうすればよいですか?

    sql>alter database add logfile member '/path/to/new/member1.log' to group 3;

    メンバーが1人残っていて、グループのステータスが最新でない場合は、グループからメンバーを削除できます

    sql>alter database drop logfile member '/path/to/member_to_be_deleted.log';

    REDOログの切り替えの詳細を照会するには
    v $ log-history

    をクエリできます
    sql>select count(*), trunc(first_time) from v$log_history;

    REDOエントリを上書きするグループ

    alert.logに「チェックポイントが完了していません」と表示される理由

    LGWRがREDOロググループに到着してREDOエントリを上書きし、その時点までにそのグループのチェックポイントが保留中の場合、アラートログに「チェックポイントが完了していません」というメッセージが表示されます。このため、LGWRはREDOロググループをすぐに上書きできません。

    したがって、Oracleは「チェックポイント」をトリガーし、ディスクへのREDOエントリによって引き起こされたダーティバッファをフラッシュします。この後、LGWRはREDOバッファに上書きできます。これは、LGWRがしばらく待たなければならないことを意味しますが、これは良くありません。克服するには、REDOロググループを追加するか、REDOロググループのサイズを増やします。

    上記の詳細が、REDOログバッファの理解を深めるのに役立つことを願っています。

    これでチュートリアルは終了です。REDOロググループとファイルとメンバーについて理解しています。


    1. OracleにGUIDを保存するにはどうすればよいですか?

    2. SQLServerで値に少なくとも1つの数値が含まれているかどうかを検出する方法

    3. MySQLの各グループで最後のレコードを取得する方法

    4. java.library.pathにocijdbc9がありません