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

Oracleデータベースでの元に戻すとやり直しとは

    多くの人が私に質問をすることがよくあります

    Oracleデータベースでの元に戻すとやり直しとは ?何を使用していますか?

    私はここの投稿でそれについてのすべての疑問を解決しようとしています

    OracleのUndoとは何ですか?

    Undoは、データベースのUndoテーブルスペースに保存されます。挿入、更新、または削除ステートメント(DML操作)を発行するたびに、変更されたデータブロックのbefore値が保存されます。 DMLステートメントを発行すると、変更されたブロックはバッファキャッシュに保存され、変更されたブロックのbefore値はUNDOセグメントに保存されます。 ROLLBACKコマンドを発行するたびに、undoセグメントを使用して前の値にロールバックします。

    メモ帳やMicrosoftWordで元に戻すのと同じです

    削除の取り消しは、挿入の取り消しよりも重要です。これは、削除の取り消しが実際には行全体の再挿入であるためです。そのため、削除を「元に戻す」ことができるように、行の各列の値が保持されます。
    逆に、挿入の元に戻すは、ROWIDによる行の削除です。これは保持する必要はありません。削除される値。

    Undoは、トランザクションがコミットされるまで前の値しか表示できないため、ユーザーに読み取りの一貫性も提供します。説明のために、1つの例を示します

    ユーザーAは、時間tにテーブル上で選択カーソルを開始します。カーソルはしばらくの間実行されます

    ユーザーBは、時刻t’に同じテーブルの更新を開始します。

    これで、ユーザーAは時刻tに読み取り整合性のあるバージョンのテーブルを取得する必要があります。ただし、ブロックはしばらくするとユーザーBによって更新されます。

    そのため、OracleはUndoセグメントを使用して、Undoセグメントからそれらのブロックの更新前のイメージを復元し、読み取りの一貫性のあるビューを取得します

    元に戻すは、読み取り整合メカニズムで使用されるため、コミットまたはロールバックの直後に破棄されることはありません。

    また、フラッシュバッククエリで使用され、元に戻す復元を使用してコミットされた古いデータを確認します。

    元に戻すデータがデータベースに保存される期間はどれくらいですか?
    Oracleは、undo_retentionパラメータを使用して、元に戻すデータを保存する期間の柔軟性を提供します。 oracleがundo保持を管理するためにundo_managementパラメーターをautomaticに設定するか(デフォルト)、この値を手動で設定することもできます。この値は、データベースで最も長く実行されているクエリにかかる時間よりも大きくする必要があります。11g以降、Oracleはこのパラメーターを自動的に調整しました。 UNDO表領域のサイズに応じて

    トランザクションとは
    トランザクションは、論理ユニットとして扱われるSQLデータ操作言語(DML)ステートメントのコレクションです。
    ステートメントが失敗すると、トランザクションは「取り消され」ます。すべてのステートメントが処理される場合、SQLPlusまたはプログラミングアプリケーションはCOMMITを発行して、データベースの変更を永続的にします。ユーザーがOracleから正常に切断すると、トランザクションは暗黙的にコミットされます。
    異常な切断はトランザクションのロールバックになります。コマンドROLLBACKは、トランザクションをキャンセルする(コミットしない)ために使用されます。進捗状況。

    OracleのREDOとは何ですか?

    REDOは、実行された作業を記録することを意味します。これにより、作業が失われることはありません。REDOログはリカバリで使用されます。データベースに挿入するときはいつでも、次のことを行います

    1. 行をバッファーに挿入します
    2. バッファで元に戻るを生成します
    3. REDOの変更を書き込みます。つまり、REDOログに行を挿入します
    4. 元にできるセグメントのやり直しの変更をREDOログに書き込みます

    したがって、データベースで実行されたすべてのDML操作は、リカバリの目的でREDOログに記録されます

    REDOは、最初にSGAのREDOログバッファに書き込まれます。ログライター(LGWR)プロセスは、これらの変更を「redoログバッファ」からディスクのREDOログファイルに書き込みます

    REDOログは、人為的ミス、OS障害、ハードディスク障害によるデータ損失の復元に役立ちます。

    REDOログは、フォールトトレランスを提供するため、データベースの運用にとって重要です。

    データファイル内のテーブルに変更を書き込む前に、OracleはまずREDOバッファをREDOログファイルに書き込みます。

    REDOバッファを生成しない特定の操作では、ログを記録しないオプションがあります。

    REDOログの仕組み
    Oracleサーバーは、データベースに加えられたすべての変更をREDOログバッファに順番に記録します。 REDOエントリは、LGWRプロセスによって、REDOログバッファから現在のオンラインREDOロググループと呼ばれるオンラインREDOロググループの1つに書き込まれます。 LGWRは、
    次の状況で書き込みます。
    •トランザクションがコミットしたとき
    •REDOログバッファが3分の1いっぱいになったとき
    •変更されたレコードが1メガバイトを超える場合REDOログバッファ内
    •DBWnがデータベースバッファキャッシュ内の変更されたブロックをデータファイルに書き込む前に
    ReDOログは循環的に使用されます。各REDOログファイルグループは、ログが再利用されるたびに上書きされるログシーケンス番号によって識別されます。 LGWRは、オンラインREDOログファイルに順番に書き込みます。現在のオンラインREDOロググループがいっぱいになると、LGWRは次のグループへの書き込みを開始します。これはログスイッチと呼ばれます。最後に使用可能なオンラインREDOログファイルがいっぱいになると、LGWRは最初のオンラインREDO
    ロググループに戻り、書き込みを再開します。

    関連記事

    大量のREDOを生成するセッションを見つける方法
    システムスイッチログファイルを変更するv/sアーカイブログを現在
    OracleデータベースにREDOログファイルを再作成する
    Oracleデータベースのシニアインタビューの質問


    1. 壊れたUTF-8エンコーディングの修正

    2. MySQLの出力ファイルへのエクスポート:CSVエスケープ文字

    3. MySQLデータベース内のすべてのテーブルのレコード数を取得します

    4. MySQLトリガーからのPHPスクリプトの呼び出し