久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Oracle中使用自治事務(wù)保存日志表?xiàng)l目

瀏覽:6日期:2023-11-12 14:17:48
數(shù)據(jù)庫(kù)事務(wù)是一種單元操作,要么是全部操作都成功,要么全部失敗。在Oracle中,一個(gè)事務(wù)是從執(zhí)行第一個(gè)數(shù)據(jù)治理語(yǔ)言(DML)語(yǔ)句開(kāi)始,直到執(zhí)行一個(gè)COMMIT語(yǔ)句,提交保存這個(gè)事務(wù),或者執(zhí)行一個(gè)ROLLBACK語(yǔ)句,放棄此次操作結(jié)束。 事務(wù)的“要么全部完成,要么什么都沒(méi)完成”的本性會(huì)使將錯(cuò)誤信息記入數(shù)據(jù)庫(kù)表中變得很困難,因?yàn)楫?dāng)事務(wù)失敗重新運(yùn)行時(shí),用來(lái)編寫(xiě)日志條目的INSERT語(yǔ)句還未完成。 針對(duì)這種困境,Oracle提供了一種便捷的方法,即自治事務(wù)。自治事務(wù)從當(dāng)前事務(wù)開(kāi)始,在其自身的語(yǔ)境中執(zhí)行。它們能獨(dú)立地被提交或重新運(yùn)行,而不影響正在運(yùn)行的事務(wù)。正因?yàn)檫@樣,它們成了編寫(xiě)錯(cuò)誤日志表格的理想形式。在事務(wù)中檢測(cè)到錯(cuò)誤時(shí),您可以在錯(cuò)誤日志表格中插入一行并提交它,然后在不丟失這次插入的情況下回滾主事務(wù)。 因?yàn)樽灾问聞?wù)是與主事務(wù)相分離的,所以它不能檢測(cè)到被修改過(guò)的行的當(dāng)前狀態(tài)。這就似乎在主事務(wù)提交之前,它們一直處于單獨(dú)的會(huì)話里,對(duì)自治事務(wù)來(lái)說(shuō),它們是不可用的。然而,反過(guò)來(lái)情況就不同了:主事務(wù)能夠檢測(cè)到已經(jīng)執(zhí)行過(guò)的自治事務(wù)的結(jié)果。 要?jiǎng)?chuàng)建一個(gè)自治事務(wù),您必須在匿名塊的最高層或者存儲(chǔ)過(guò)程、函數(shù)、數(shù)據(jù)包或觸發(fā)的定義部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION語(yǔ)句。在這樣的模塊或過(guò)程中執(zhí)行的SQL Server語(yǔ)句都是自治的。 觸發(fā)無(wú)法包含COMMIT語(yǔ)句,除非有PRAGMA AUTONOMOUS_TRANSACTION標(biāo)記。但是,只有觸發(fā)中的語(yǔ)句才能被提交,主事務(wù)則不行。 列表A展示了對(duì)一個(gè)簡(jiǎn)單但靈活的錯(cuò)誤日志表格所作的CREATE TABLE和CREATE SEQUENCE語(yǔ)句。 CREATE TABLE errorlog ( errorlog_id NUMBER, logged_on TIMESTAMP DEFAULT SYSTIMESTAMP, logged_by VARCHAR2(30) DEFAULT USER, num1NUMBER, num2NUMBER, num3NUMBER, text1 VARCHAR2(1000), text2 VARCHAR2(1000), text3 VARCHAR2(1000) );CREATE SEQUENCE errorlog_seq START WITH 1 INCREMENT BY 1;列表B是一個(gè)獨(dú)立的存儲(chǔ)過(guò)程,用于更新錯(cuò)誤日志表格。 CREATE OR REPLACEPROCEDURE log_error ( n1 IN NUMBER:=NULL, t1 IN VARCHAR:=NULL, n2 IN NUMBER:=NULL, t2 IN VARCHAR:=NULL, n3 IN NUMBER:=NULL, t3 IN VARCHAR:=NULL )IS PRAGMA AUTONOMOUS_TRANSACTION;BEGIN INSERT INTO errorlog (errorlog_id, num1, num2, num3, text1, text2, text3) VALUES (errorlog_seq.NEXTVAL, n1, n2, n3, t1, t2, t3); COMMIT;END;該過(guò)程接受最多三個(gè)數(shù)字和三個(gè)文本變量,然后將它們和時(shí)間戳以及調(diào)用過(guò)程的用戶一起儲(chǔ)存在表格中。 要測(cè)試這個(gè)過(guò)程,就要更新(UPDATE)或刪除(DELETE)表格中的某些行;這就引發(fā)了主事務(wù)。然后執(zhí)行存儲(chǔ)過(guò)程,將您選擇的要記入日志的數(shù)據(jù)傳遞給它。最后,重新運(yùn)行主事務(wù),選擇(SELECT)錯(cuò)誤日志表格,您的日志條目仍會(huì)在那兒。
主站蜘蛛池模板: 四子王旗| 东兴市| 屯昌县| 元朗区| 清丰县| 边坝县| 三都| 洮南市| 炉霍县| 丁青县| 绍兴县| 柘城县| 淅川县| 措美县| 固始县| 三原县| 德昌县| 邳州市| 临江市| 黎川县| 宝山区| 鲁甸县| 曲沃县| 景德镇市| 营山县| 闽清县| 赫章县| 乌兰县| 蒙城县| 贵定县| 沧源| 西藏| 土默特右旗| 丽水市| 清镇市| 浪卡子县| 万年县| 凌源市| 海门市| 赞皇县| 屯留县|