Oracleでテーブルレコードを変更する方法

PHPz
リリース: 2023-04-04 10:27:58
オリジナル
1535 人が閲覧しました

Oracle データベースは、豊富な機能と柔軟な構成を備え、現在世界で最も広く使用されているリレーショナル データベース管理システムです。 Oracle データベースでは、テーブルはデータ ストレージの重要な部分です。テーブルの構造には、列名、列タイプ、制約などが含まれます。テーブル構造の変更は一般的なデータ操作ですが、変更操作はデータの整合性とセキュリティに一定の影響を与える可能性があります。したがって、テーブル構造を変更するときは特別な注意を払う必要があります。

テーブル構造の変更プロセスを記録し、データの整合性とトレーサビリティを確保するために、Oracle データベースではテーブルの変更を記録するためのさまざまな方法が提供されています。この記事では、レコードテーブルを変更する次の方法を紹介します。

  1. Oracle フラッシュバック テーブル
    Oracle フラッシュバック テーブルは、テーブルの履歴状態を復元したり、特定の時点でのデータ変更を元に戻したりできる、Oracle の高度な機能です。フラッシュバック テーブルを使用する前に、Oracle ログがテーブルへの変更を記録できるようにする必要があります。更新または削除操作を実行すると、システムは変更前のデータを UNDO 表スペースに記録します。フラッシュバック テーブルは、この元に戻す情報を使用して、テーブルの状態を変更前と同じ状態にロールバックできます。

フラッシュバック テーブルは Oracle10g バージョンで起動されており、実行するには SYSTEM 権限が必要です。フラッシュバック テーブルを実行する前に、次の文を使用して、データベース内でログが有効になっているテーブルをクエリできます。

SELECT LOG_MODE FROM V$DATABASE;
ログイン後にコピー

クエリ結果が「ARCHIVELOG」の場合、データベースでログが有効になっていることを意味します。

フラッシュバック テーブルを使用する場合は、次の点に注意する必要があります。

  • フラッシュバック テーブルは更新操作と削除操作のみを復元できますが、テーブル構造の変更を復元することはできません。
  • フラッシュバックテーブルはUNDOテーブルスペースを使用しています。UNDOテーブルスペースが不足すると、変更履歴を記録できません。
  • フラッシュバック テーブルは、truncate コマンドによって削除されたデータを回復できません。このコマンドは UNDO テーブル スペースをクリアするためです。
  1. Oracle トリガー
    Oracle トリガーは、テーブルの挿入、更新、または削除の前後に、指定されたアクションをトリガーします。トリガーを作成してテーブル操作の履歴を記録できます。テーブルに挿入前、更新前、削除前トリガーを作成することで、変更前のデータが記録されます。挿入後、更新後、削除後のトリガーでは、変更されたデータが記録されます。

以下は、student テーブルの変更履歴を記録するトリガーの例です。

CREATE TABLE STUDENT_HISTORY (
    ID INT PRIMARY KEY,
    OPERATION_TYPE VARCHAR(10) NOT NULL,
    OPERATE_TIME DATE NOT NULL,
    NAME VARCHAR2(50) NOT NULL,
    AGE INT NOT NULL,
    SEX VARCHAR2(10) NOT NULL,
    GRADE VARCHAR2(20) NOT NULL,
    REMARKS VARCHAR2(100)
);

CREATE OR REPLACE TRIGGER STUDENT_HISTORY_TRG
BEFORE DELETE OR UPDATE OR INSERT ON STUDENT
FOR EACH ROW
BEGIN
    IF DELETING THEN
        INSERT INTO STUDENT_HISTORY (ID, OPERATION_TYPE, OPERATE_TIME, NAME, AGE, SEX, GRADE, REMARKS)
        VALUES (:OLD.ID, 'DELETE', SYSDATE, :OLD.NAME, :OLD.AGE, :OLD.SEX, :OLD.GRADE, :OLD.REMARKS);
    ELSIF UPDATING THEN
        INSERT INTO STUDENT_HISTORY (ID, OPERATION_TYPE, OPERATE_TIME, NAME, AGE, SEX, GRADE, REMARKS)
        VALUES (:OLD.ID, 'UPDATE', SYSDATE, :NEW.NAME, :NEW.AGE, :NEW.SEX, :NEW.GRADE, :NEW.REMARKS);
    ELSIF INSERTING THEN
        INSERT INTO STUDENT_HISTORY (ID, OPERATION_TYPE, OPERATE_TIME, NAME, AGE, SEX, GRADE, REMARKS)
        VALUES (:NEW.ID, 'INSERT', SYSDATE, :NEW.NAME, :NEW.AGE, :NEW.SEX, :NEW.GRADE, :NEW.REMARKS);
    END IF;
END;
ログイン後にコピー

このトリガーは、student テーブルの変更履歴を STUDENT_HISTORY テーブルに記録します。挿入、更新、削除の操作を実行すると、トリガーは操作の種類、操作時間、生徒の名前、年齢、性別、学年、備考を記録します。

トリガーを使用して変更履歴を記録する利点は次のとおりです:

  • トリガーは、挿入、更新、削除などの操作だけでなく、テーブル構造への変更も記録できます。
  • Triggerで記録可能 修正前後のデータをデータ変更過程まで遡ることができ、
  • Triggerでは記録内容や記録方法をカスタマイズできるため、柔軟性が高いです。
ただし、トリガーの使用にはいくつかの欠点もあります:

    トリガーはデータベースのパフォーマンスに影響します;
  • 複雑な PL/SQL コードを記述する必要があります。コードの問題がデータの整合性に影響を与える可能性がある場合。
    Oracle AUDIT
  1. Oracle AUDIT は、データベース ユーザー操作の履歴を記録できるデータベース レベルの監査機能です。 AUDIT 機能には、グローバル監査トレーラーと複数のポリシー オプションが含まれています。ユーザーはポリシー オプションを設定することでログ動作を制御できます。 AUDIT はすでに Oracle データベースに組み込まれているため、追加のインストールは必要ありません。
次は、EMPLOYEES テーブルに対するユーザーの挿入、更新、および削除操作を記録する AUDIT ポリシーです:

AUDIT INSERT, UPDATE, DELETE ON EMPLOYEES BY SESSION;
ログイン後にコピー
このステートメントは、ユーザーの挿入、更新、および削除を記録します。 EMPLOYEES テーブルに対する操作。 BY SESSIONとは、どのセッションで実行された操作を記録することを意味します。次のステートメントを使用して、監査の有効なステータスを確認できます:

SELECT * FROM DBA_OBJ_AUDIT_OPTS WHERE OWNER='HR' AND OBJ_NAME='EMPLOYEES';
ログイン後にコピー
AUDIT を使用してテーブル変更履歴を記録する利点は次のとおりです:

    監査はグローバル ユーザー操作履歴を記録できますテーブル構造の変更、挿入、更新、削除、その他の操作を含むデータベースの操作;
  • 監査データを簡単に抽出して分析できます;
  • 追加のコードを記述する必要はありません。
ただし、AUDIT にはいくつかの制限もあります:

    AUDIT はデータベース レベルで実装されるため、SQL ステートメントの実行プロセスを記録できません。 #AUDIT は記録に役立ちます データ形式は制限されており、十分な柔軟性がありません;
  • AUDIT はデータベースのパフォーマンスに一定の影響を与えます。
  • Oracle Database Change Management Pack
Oracle Database Change Management Pack は、データベースの変更を管理および監査できるプラガブルなデータベース管理ツールです。 Database Change Management Pack は、高品質の変更ドキュメント、監査証跡情報、および変更レポートを生成および保存します。

  1. Database Change Management Pack を使用すると、ユーザーは次のようなデータベース変更ステータスの全体像を把握できます。
    • データベース オブジェクトの変更履歴;
    • データベース オブジェクトを変更した人の身元と操作の日時;
    • 変更されたドキュメントと成果物。

    Database Change Management Pack では、ユーザーは監査が必要なオブジェクトとポリシー オプションを指定し、変更追跡データを生成できます。また、変更ドキュメントとアーティファクトを自動的に生成し、データベースが変更されるたびに監査を実行することもできます。

    Database Change Management Pack を使用する利点は次のとおりです:

    • Database Change Management Pack は、DDL 操作やデータ変更を含むすべてのデータベース変更を記録できます。変更 ドキュメントと監査レポートにより、セキュリティ監査と問題のトラブルシューティングが容易になります。
    • は、データベース変更の標準化と完全性を自動的に検出できます。
    • ただし、Database Change Management Pack にはいくつかの欠点もあります:

    追加購入が必要でコストが高い;
    • 一定の量が必要実行に必要な時間とエネルギー、構成と管理。
    • 概要:
    Oracle は現在世界で最も広く使用されているデータベースであり、フラッシュバック テーブル、トリガー、AUDIT、データベース変更管理パックなど、テーブルの変更履歴を記録するためのさまざまな方法を提供しています。 。これらの方法にはそれぞれ長所と短所があり、ユーザーは状況に応じて選択して使用する必要があります。


    テーブル構造を変更する場合は、データの整合性とセキュリティに影響を与えないよう細心の注意を払う必要があります。重要なデータがデータベースに保存されている場合は、変更する前にデータをバックアップすることをお勧めします。テーブルの変更履歴をタイムリーに記録し、監査を実施することは、データの整合性とセキュリティを確保するのに非常に効果的です。

以上がOracleでテーブルレコードを変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート