成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle數據庫自治事務詳解

數據庫 Oracle
本文我們主要介紹了一些Oracle數據庫自制事務的一些知識,并給出了實際操作的例子,通過例子會使我們更容易理解自制事務的含義,以便于我們的熟練應用,希望能夠對您有所幫助。

Oracle數據庫自治事務是我們本文主要要介紹的內容,接下來就讓我們來一起了解一下它的神秘之處吧。

數據庫事務是一種單元操作,要么是全部操作都成功,要么全部失敗。在Oracle中,一個事務是從執(zhí)行***個數據管理語言(DML)語句開始,直到執(zhí)行一個COMMIT語句,提交保存這個事務,或者執(zhí)行一個ROLLBACK語句,放棄此次操作結束。

事務的“要么全部完成,要么什么都沒完成”的本性會使將錯誤信息記入數據庫表中變得很困難,因為當事務失敗重新運行時,用來編寫日志條目的INSERT語句還未完成。

針對這種困境,Oracle提供了一種便捷的方法,即自治事務。自治事務從當前事務開始,在其自身的語境中執(zhí)行。它們能獨立地被提交或重新運行,而不影響正在運行的事務。正因為這樣,它們成了編寫錯誤日志表格的理想形式。在事務中檢測到錯誤時,您可以在錯誤日志表格中插入一行并提交它,然后在不丟失這次插入的情況下回滾主事務。

因為自治事務是與主事務相分離的,所以它不能檢測到被修改過的行的當前狀態(tài)。這就好像在主事務提交之前,它們一直處于單獨的會話里,對自治事務來說,它們是不可用的。然而,反過來情況就不同了:主事務能夠檢測到已經執(zhí)行過的自治事務的結果。

要創(chuàng)建一個自治事務,您必須在匿名塊的***層或者存儲過程、函數、數據包或觸發(fā)的定義部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION語句。在這樣的模塊或過程中執(zhí)行的SQL語句都是自治的。

觸發(fā)無法包含COMMIT語句,除非有PRAGMA AUTONOMOUS_TRANSACTION標記。但是,只有觸發(fā)中的語句才能被提交,主事務則不行。

自治事務:

  1. create or replace procedure AutoNomouse_Insert is PRAGMA AUTONOMOUS_TRANSACTION;   
  2. begin insert into Msg values('AutoNomouse Insert');   
  3. commit;   
  4. end; 

非自治事務:

  1. CREATE OR REPLACE Procedure NonAutoNomouse_Insert as   
  2. begin insert into Msg Values('NonAutonomouse Insert');   
  3. commit;  
  4. end;  
  1. SQL> begin  
  2. insert into Msg Values('This Main Info');  
  3. NonAutoNomouse_Insert;  
  4. rollback;  
  5. end  
  6. ;  
  7. / PL/SQL procedure successfully completed SQL> select * from msg; MSG This Main Info  
  8. NonAutonomouse Insert 

因為過程中有COMMIT;所以匿名塊中得RULLBACK 是不起作用的; 由此得出:非自治事務中的COMMIT,ROLLBACK 是會影響整個事務的。

下面我們看一個另外一種情況:

  1. SQL> delete msg; 2 rows deleted SQL> 這里沒有COMMIT;   
  2. SQL> begin  
  3. insert into Msg Values('This Main Info');  
  4. rollback; --這里加了ROLLBACK;  
  5. NonAutoNomouse_Insert;  
  6. rollback;  
  7. end  
  8. ;  
  9. / PL/SQL procedure successfully completed SQL> select * from msg; MSG This Main Info  
  10. NonAutonomouse Insert  
  11. NonAutonomouse Insert 

竟然沒有ROLLBACK (DELETE * FROM MSG ;) 為什么?因為過程就是一個新的SESSION,所以前面的SESSION 被正常EXIT,同時被自動提交;

  1. SQL> commit; Commit complete   
  2. SQL> select * from msg; MSG This Main Info  
  3. NonAutonomouse Insert  
  4. NonAutonomouse Insert SQL> commit; Commit complete SQL> select * from msg; MSG This Main Info  
  5. NonAutonomouse Insert  
  6. NonAutonomouse Insert  

因為這里一個新的SESSION 所以是沒有意義的事務控制語句。

  1. SQL> delete msg;   
  2. SQL>3 rows deleted   
  3. SQL> commit;  
  4. SQL>Commit complete   
  5. SQL> select * from msg;   
  6. MSG 

下面看一下自治事務:

  1. SQL> begin  
  2. insert into Msg Values('This Main Info');  
  3. AutoNomouse_Insert;  
  4. rollback;  
  5. end  
  6. ;  
  7. / PL/SQL procedure successfully completed  
  8.  
  9. SQL> select * from msg; MSG AutoNomouse Insert 

我們看到是一行數據,顯然***條SQL INSERT 是被ROLLBACK,證明自治事務是一個獨立于主程序的事務,他不會對主事務的控制產生影響。另外在分布式環(huán)境中我們經常會遇到ORA-02064 ERROR ,就是因為主事務自己有事務控制語句,然而被調用的遠程過程也有自己的事物控制語句,當然就會報錯,我們將被調用的過程聲明為自治事務那就OK了。

關于Oracle數據庫自治事務的知識就介紹到這里了,希望本次的介紹能夠對您有所收獲!

【編輯推薦】

  1. Oracle數據庫consistent gets使用的特例
  2. Oracle數據庫增刪集合元素的Java實現(xiàn)方法
  3. Oracle數據庫中TNSListener無法啟動的解決方案
  4. Oracle數據庫中AWR的組成及工作原理的詳細介紹
  5. Oracle臨時表游標未釋放導致回滾段空間不足的解決方案

 

責任編輯:趙鵬 來源: 火魔網
相關推薦

2013-03-19 10:35:24

Oracle

2010-08-09 17:42:44

DB2 9.7自治事務

2018-10-23 22:04:08

2011-05-19 13:25:14

Oracle數據庫

2010-04-02 13:59:08

Oracle數據庫

2010-04-14 15:14:11

Oracle數據庫

2011-03-29 10:47:49

ORACLE數據庫

2025-04-08 06:00:00

2011-04-11 13:19:41

Oracle數據庫

2011-05-17 15:02:15

ORACLE數據庫備份

2011-08-18 15:49:21

Oracle厲行計劃

2024-02-22 17:22:34

Oracle數據庫AI

2010-04-15 08:57:29

Oracle數據庫

2020-12-17 15:59:16

Oracle自治數據庫

2011-08-15 23:14:34

Oraclerman環(huán)境配置

2010-04-09 16:51:24

Oracle數據庫

2010-10-20 09:41:37

卸載Oracle

2009-09-02 18:52:38

Oracle數據庫并行

2009-02-09 12:52:32

文件加密Oracle數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩视频精品在线 | 久久高清精品 | 成人精品一区二区三区中文字幕 | 日本成人在线免费视频 | 久久毛片网站 | 九七午夜剧场福利写真 | 日韩精品 电影一区 亚洲 | 午夜免费观看网站 | 国产成人高清视频 | 亚洲h视频| 久久综合久色欧美综合狠狠 | 亚洲最大的成人网 | 久久久久久国产精品 | 日本亚洲精品成人欧美一区 | 一级片av | 奇米视频777 | 国产三级精品视频 | www国产成人免费观看视频,深夜成人网 | 国产97在线视频 | 欧美日韩国产不卡 | 成人二区 | 在线免费观看黄a | 亚洲成人播放器 | 免费一区| 狠狠操狠狠| 狠狠干美女 | 99久久99久久精品国产片果冰 | 一区二区三区四区国产精品 | 国产精品久久精品 | 97超碰人人| 韩日一区二区三区 | 99久久久国产精品 | 欧美激情a∨在线视频播放 成人免费共享视频 | 在线视频一区二区三区 | 国产精品看片 | 中文字幕一区二区视频 | 日本久久久影视 | 免费美女网站 | 午夜伦4480yy私人影院 | 视频一二三区 | 99riav3国产精品视频 |