[Oracle] 利用自治事务实现审计功能
在一个事务(外层事务)中可以定义一个或几个自治事务。自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback
在一个事务(外层事务)中可以定义一个或几个自治事务。自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback 也对自治事务没有影响。
假设现在有这样一个需求,不能对某个表进行某些操作(如更新),一旦有这类操作,就强制整个回滚,并且在审计日志中记录该次违规操作。现在的问题是当事务回滚之后,日志中的记录也会跟着被回滚,这时就可以利用自治事务来防止这个问题。
首先,,定义日志表,用于审计。
create table error_logs(
id number(10) not null,
log_timestamp timestamp not null,
error_message varchar2(4000)
);
create sequence error_log_seq;
创建一个自治事务的存储过程(关键字PRAGMA AUTONOMOUS_TRANSACTION代表自治事务),用于向审计表插入错误信息
create or replace procedure log_errors(p_error_message IN varchar2) as
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
insert into error_logs (id, log_timestamp, error_message)
values (error_log_seq.NEXTVAL, systimestamp, p_error_message);
commit;
END;
/
创建一个测试表,定义该表的ID字段不为空
create table at_test(
id number(10) not null,
des varchar2(200)
);
定义一个存储过程,尝试向测试表中插入非法数据
create or replace procedure p1 as
BEGIN
insert into at_test (id, des)
values (1, 'desc1');
insert into at_test (id, des)
values (NULL, 'desc2');
EXCEPTION
WHEN OTHERS THEN
log_errors (p_error_message => SQLERRM);
rollback;
END;
/
执行这个存储过程,查看是否审计成功
SQL> exec p1
PL/SQL 过程已成功完成。
SQL> select * from at_test;
未选定行
SQL> select * from error_logs;
ID LOG_TIMESTAMP ERROR_MESSAGE
---------- -------------------------------- -------------------------------------------------------
2 28-5月 -13 03.34.51.210000 下午 ORA-01400: 无法将 NULL 插入 ("TEST"."AT_TEST"."ID")
从上面的结果可以发现,向at_test表插入数据的事务正常回滚,而审计自治事务不回滚。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

In dem Artikel werden mithilfe der Änderungstabelle von MySQL Tabellen, einschließlich Hinzufügen/Löschen von Spalten, Umbenennung von Tabellen/Spalten und Ändern der Spaltendatentypen, erläutert.

In Artikel werden die Konfiguration der SSL/TLS -Verschlüsselung für MySQL, einschließlich der Erzeugung und Überprüfung von Zertifikaten, erläutert. Das Hauptproblem ist die Verwendung der Sicherheitsauswirkungen von selbstsignierten Zertifikaten. [Charakterzahl: 159]

In Artikel werden Strategien zum Umgang mit großen Datensätzen in MySQL erörtert, einschließlich Partitionierung, Sharding, Indexierung und Abfrageoptimierung.

In Artikel werden beliebte MySQL -GUI -Tools wie MySQL Workbench und PhpMyAdmin beschrieben, die ihre Funktionen und ihre Eignung für Anfänger und fortgeschrittene Benutzer vergleichen. [159 Charaktere]

In dem Artikel werden in MySQL die Ablagerung von Tabellen mithilfe der Drop -Tabellenerklärung erörtert, wobei Vorsichtsmaßnahmen und Risiken betont werden. Es wird hervorgehoben, dass die Aktion ohne Backups, die Detaillierung von Wiederherstellungsmethoden und potenzielle Produktionsumfeldgefahren irreversibel ist.

In dem Artikel werden in verschiedenen Datenbanken wie PostgreSQL, MySQL und MongoDB Indizes für JSON -Spalten in verschiedenen Datenbanken erstellt, um die Abfrageleistung zu verbessern. Es erläutert die Syntax und die Vorteile der Indizierung spezifischer JSON -Pfade und listet unterstützte Datenbanksysteme auf.

In Artikeln werden ausländische Schlüssel zur Darstellung von Beziehungen in Datenbanken erörtert, die sich auf Best Practices, Datenintegrität und gemeinsame Fallstricke konzentrieren.

Artikel erläutert die Sicherung von MySQL gegen SQL-Injektions- und Brute-Force-Angriffe unter Verwendung vorbereiteter Aussagen, Eingabevalidierung und starken Kennwortrichtlinien (159 Zeichen).
