扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败。在Oracle中,一个事务是从执行第一个数据管理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束。 O\STzh5/
'lo<X
事务的“要么全部完成,要么什么都没完成”的本性会使将错误信息记入数据库表中变得很困难,因为当事务失败重新运行时,用来编写日志条目的INSERT语句还未完成。 juWnimf
ZSc pLC
针对这种困境,Oracle提供了一种便捷的方法,即自治事务。自治事务从当前事务开始,在其自身的语境中执行。它们能独立地被提交或重新运行,而不影响正在运行的事务。正因为这样,它们成了编写错误日志表格的理想形式。在事务中检测到错误时,您可以在错误日志表格中插入一行并提交它,然后在不丢失这次插入的情况下回滚主事务。 666*U2
/kKI"x[}[
因为自治事务是与主事务相分离的,所以它不能检测到被修改过的行的当前状态。这就好像在主事务提交之前,它们一直处于单独的会话里,对自治事务来说,它们是不可用的。然而,反过来情况就不同了:主事务能够检测到已经执行过的自治事务的结果。 \y;uOPs?)q
gg-x\$Dvc
要创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL Server语句都是自治的。 m )2v9k7
}bX% mp
触发无法包含COMMIT语句,除非有PRAGMA AUTONOMOUS_TRANSACTION标记。但是,只有触发中的语句才能被提交,主事务则不行。 gSX`pHJY
v)V~;jT
列表A展示了对一个简单但灵活的错误日志表格所作的CREATE TABLE和CREATE SEQUENCE语句。列表B是一个独立的存储过程,用于更新错误日志表格。该过程接受最多三个数字和三个文本变量,然后将它们和时间戳以及调用过程的用户一起储存在表格中。 列表A: B @&4
a"!(}I
CREATE TABLE errorlog ( #Gc #:m
errorlog_id NUMBER, U3HXHzW&`
logged_on TIMESTAMP DEFAULT SYSTIMESTAMP, >4n688`(5
logged_by VARCHAR2(30) DEFAULT USER, gA'ZNNZ,B7
num1 NUMBER, {a}qhf8(
num2 NUMBER, !PYC:O,B
num3 NUMBER, OpqEh]p
text1 VARCHAR2(1000), qPwg;O4V
text2 VARCHAR2(1000), UDd-[!>]
text3 VARCHAR2(1000) 1}hQX0=y
); MHSF-+JaC
|e6G^Wl`u
CREATE SEQUENCE errorlog_seq T9ue.{p
START WITH 1 K)BtmVK?
INCREMENT BY 1; p bnL#6y
5*z; |X#
Pjd1^"v|
列表B: A,D;XO
CREATE OR REPLACE qr5%5 [s
PROCEDURE log_error ( 1@Ds"_PY
n1 IN NUMBER:=NULL, t1 IN VARCHAR:=NULL, /o?jO7c<
n2 IN NUMBER:=NULL, t2 IN VARCHAR:=NULL, DHV\^Uc7
n3 IN NUMBER:=NULL, t3 IN VARCHAR:=NULL `X$?EkW
) ut#1?9 q
IS =.8XE`]
>S-ccx
PRAGMA AUTONOMOUS_TRANSACTION; `_p$TY\
^5%|2
BEGIN ~|1"`dLX<
'^nK
INSERT INTO errorlog 2:|"B|g&
(errorlog_id, m@V|x
num1, num2, num3, text1, text2, text3) t|'> X4X
VALUES pzv+'=E
(errorlog_seq.NEXTVAL, n1, n2, n3, t1, t2, t3); ;u{.`rRn
3SBM?M] 8
COMMIT; U2I ;D,&
5N%WyRI
END; n|9cqb,
/ ['7LIOcJs,
L>3nr'Mz
要测试这个过程,就要更新(UPDATE)或删除(DELETE)表格中的某些行;这就引发了主事务。然后执行存储过程,将您选择的要记入日志的数据传递给它。最后,重新运行主事务,选择(SELECT)错误日志表格,您的日志条目仍会在那儿。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者