色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

Oracle數(shù)據(jù)庫事務(wù)的開啟與結(jié)束詳解

瀏覽:96日期:2023-03-12 15:24:57
目錄
  • 前言
  • commit
  • Truncate – DDL
  • select xxx for update
  • select…for update使用方法
  • 失敗的DML 和 exit
  • DCL
  • 總結(jié)

前言

Oracle的事務(wù)開始于一個DML語句。

當以下情況發(fā)生時,事務(wù)結(jié)束:

1、COMMIT/ROLLBACK

2、執(zhí)行了DDL/DCL語句

3、客戶端主動斷開數(shù)據(jù)庫的連接(DISCONNECT)

4、數(shù)據(jù)庫關(guān)閉(宕機)

另外,一個DDL/DCL語句實際上就是一個事務(wù),其中隱含了COMMIT。

Oracle不需要特別的去指定事務(wù)的開始和結(jié)束。一個事務(wù)的結(jié)束就是下一個事務(wù)的開始。

事務(wù)是用來分割數(shù)據(jù)庫活動的邏輯工作單元。事務(wù)既有起點,也有終點:當發(fā)生下列事件時,事務(wù)就開始了:

1.連接到數(shù)據(jù)庫上,并執(zhí)行第一條DML語句

2.前一個事務(wù)結(jié)束后,又輸入另外一條DML語句

在下列事件之一發(fā)生時,事務(wù)就結(jié)束了:

1.執(zhí)行Commit或者RollBack語句

2.執(zhí)行一條DDL語句,例如Create Table語句;在這種情況下,會自動執(zhí)行Commit語句

3.執(zhí)行一條DCL語句,例如Grant語句;在這種情況下,會自動執(zhí)行Commit語句

4.斷開與數(shù)據(jù)庫鏈接。在退出SQLPlus事,通常會輸入EXit命令,此時會自動執(zhí)行Commit語句。如果SQLPlus被意外終止(例如運行SQL*Plus的計算機崩潰)那么就會執(zhí)行RollBack語句

事務(wù)完成后,如果不顯式的提交或者回滾事務(wù),都被認為是不好的編程習慣,因此確保在每個事物后面都要執(zhí)行Commit或者RollBack語句。

事務(wù)中任何地方都可以設(shè)置一個保存點(savepoint),這樣可以將修改回滾到保存點處。

commit

create table  transaction_table8 as select * from dba_objects;insert into transaction_table8 select * from transaction_table8;

select xid, status from v$transaction;

Truncate – DDL


select xxx for update

select * from transaction_table8 where rownum=1 for update;

select…for update使用方法

作用:

select for update 是為了在查詢時,避免其他用戶以該表進行插入,修改或刪除等操作,造成表的不一致性.

給你舉幾個例子:

select * from t for update 會等待行鎖釋放之后,返回查詢結(jié)果。
select * from t for update nowait 不等待行鎖釋放,提示鎖沖突,不返回結(jié)果
select * from t for update wait 5 等待5秒,若行鎖仍未釋放,則提示鎖沖突,不返回結(jié)果
select * from t for update skip locked 查詢返回查詢結(jié)果,但忽略有行鎖的記錄

SELECT...FOR UPDATE 語句的語法如下:

  SELECT ... FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED];

其中:

  OF 子句用于指定即將更新的列,即鎖定行上的特定列。

  WAIT 子句指定等待其他用戶釋放鎖的秒數(shù),防止無限期的等待。

“使用FOR UPDATE WAIT”子句的優(yōu)點如下:

  1防止無限期地等待被鎖定的行;

  2允許應(yīng)用程序中對鎖的等待時間進行更多的控制。

  3對于交互式應(yīng)用程序非常有用,因為這些用戶不能等待不確定

  4 若使用了skip locked,則可以越過鎖定的行,不會報告由wait n 引發(fā)的‘資源忙’異常報告

補充幾點:

分成兩類:加鎖范圍子句和加鎖行為子句

加鎖范圍子句:在select…for update之后,可以使用of子句選擇對select的特定數(shù)據(jù)表進行加鎖操作。默認情況下,不使用of子句表示在select所有的數(shù)據(jù)表中加鎖

加鎖行為子句:當我們進行for update的操作時,與普通select存在很大不同。一般select是不需要考慮數(shù)據(jù)是否被鎖定,最多根據(jù)多版本一致讀的特性讀取之前的版本。加入for update之后,Oracle就要求啟動一個新事務(wù),嘗試對數(shù)據(jù)進行加鎖。如果當前已經(jīng)被加鎖,默認的行為必然是block等待。使用nowait子句的作用就是避免進行等待,當發(fā)現(xiàn)請求加鎖資源被鎖定未釋放的時候,直接報錯返回。

在日常中,我們對for update的使用還是比較普遍的,特別是在如pl/sql developer中手工修改數(shù)據(jù)。此時只是覺得方便,而對for update真正的含義缺乏理解。

For update是Oracle提供的手工提高鎖級別和范圍的特例語句。Oracle的鎖機制是目前各類型數(shù)據(jù)庫鎖機制中比較優(yōu)秀的。所以,Oracle認為一般不需要用戶和應(yīng)用直接進行鎖的控制和提升。甚至認為死鎖這類鎖相關(guān)問題的出現(xiàn)場景,大都與手工提升鎖有關(guān)。

所以,Oracle并不推薦使用for update作為日常開發(fā)使用。而且,在平時開發(fā)和運維中,使用了for update卻忘記提交,會引起很多鎖表故障。 那么,什么時候需要使用for update?就是那些需要業(yè)務(wù)層面數(shù)據(jù)獨占時,可以考慮使用for update。場景上,比如火車票訂票,在屏幕上顯示郵票,而真正進行出票時,需要重新確定一下這個數(shù)據(jù)沒有被其他客戶端修改。所以,在這個確認過程中,可以使用for update。這是統(tǒng)一的解決方案方案問題,需要前期有所準備。

失敗的DML 和 exit

DCL

總結(jié)

到此這篇關(guān)于Oracle數(shù)據(jù)庫事務(wù)的開啟與結(jié)束的文章就介紹到這了,更多相關(guān)Oracle事務(wù)開啟與結(jié)束內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標簽: Oracle
主站蜘蛛池模板: 日b毛片| 国产激情一区二区三区成人91 | 日韩a一级欧美一级在线播放 | 一区二区三区高清视频在线观看 | 免费观看亚洲视频 | 黄色网址视频在线观看 | 中文字幕日韩精品中文区 | 亚洲精品综合欧美一区二区三区 | 亚洲成人黄色网 | 亚洲一区 中文字幕 久久 | 日本三级一区 | 538prom精品视频在放免费 | 欧美成人午夜不卡在线视频 | 久久99精品久久久久久秒播 | 亚洲精品成人网久久久久久 | 亚洲一区二区三区免费在线观看 | 全球成人网 | 欧美a大片欧美片 | 美国美女一级毛片免费全 | 成人国产一区 | 精品国产90后在线观看 | 成人在线免费 | 国产高清在线不卡 | 亚洲香蕉久久一区二区三区四区 | 成人毛片视频免费网站观看 | 日韩特级毛片免费观看视频 | 久久精品国产精品亚洲精品 | 91视频国产一区 | 有码视频在线观看 | 久久综合给会久久狠狠狠 | 久久黄网站 | 特级欧美午夜aa毛片 | 亚洲第一中文字幕 | 欧美亚洲日本视频 | 毛片在线视频在线播放 | 成人三级做爰在线视频 | 久草草视频在线观看免费高清 | 日韩视频国产 | 亚洲六月丁香六月婷婷蜜芽 | 亚洲精品综合欧美一区二区三区 | 亚洲天堂日韩在线 |