BeginTrans用于開始一個(gè)事物;RollbackTrans用于回滾事務(wù);CommitTrans用于提交所有的事務(wù)處理結(jié)果,即確認(rèn)事務(wù)的處理

十載專注成都網(wǎng)站制作,成都企業(yè)網(wǎng)站建設(shè),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都企業(yè)網(wǎng)站建設(shè),高端網(wǎng)頁(yè)制作,對(duì)橡塑保溫等多個(gè)領(lǐng)域,擁有多年的網(wǎng)站運(yùn)維經(jīng)驗(yàn)。
BeginTrans和CommitTrans 用于標(biāo)記事務(wù)的開始和結(jié)束,在這兩個(gè)之間的語(yǔ)句,就是作為事務(wù)處理的語(yǔ)句
oracle的事務(wù)是以session開始登錄后的第一條DML語(yǔ)句開始的,然后以DDL(drop,create,alter,rename等),TCL的rollback,commit,DCL(grant,revoke)結(jié)束。
當(dāng)然你也可以手動(dòng)設(shè)置事務(wù)屬性,如只讀事務(wù)或者順序事務(wù):
set transaction read only
set transaction isolation level SERIALIZABLE
一個(gè)事務(wù)是指:由一系列數(shù)據(jù)庫(kù)操作組成的一個(gè)完整的邏輯過(guò)程。例如銀行轉(zhuǎn)帳,從原賬戶扣除金額,以及向目標(biāo)賬戶添加金額,這兩個(gè)數(shù)據(jù)庫(kù)操作的總和,構(gòu)成一個(gè)完整的邏輯過(guò)程,不可拆分。這個(gè)過(guò)程被稱為一個(gè)事務(wù),具有ACID特性。
1:原子性(Atomicity,或稱不可分割性)
2:一致性(Consistency)
3:隔離性(Isolation,又稱獨(dú)立性)
4:持久性(Durability)
oracle使用語(yǔ)句savepoint sp_begintran開啟顯式事務(wù),鎖本身和事務(wù)是沒(méi)有關(guān)系的,只要是數(shù)據(jù)庫(kù)的操作都會(huì)產(chǎn)生鎖。處于事務(wù)中的SQL語(yǔ)句只有這個(gè)事務(wù)提交(commit)之后,事務(wù)中的SQL語(yǔ)句影響的表記錄上的鎖才會(huì)釋放。鎖常見(jiàn)有共享鎖(select語(yǔ)句產(chǎn)生)和排它鎖(DML語(yǔ)句產(chǎn)生),如果一個(gè)表上加載有共享鎖,還可以疊加共享鎖,但不能疊加排它鎖。如果一個(gè)表上加載有排他鎖,就什么鎖都不能加了,也就是說(shuō)如果DML語(yǔ)句占用過(guò)多的時(shí)間,這些數(shù)據(jù)庫(kù)效率就不高,就需要優(yōu)化,當(dāng)然select語(yǔ)句性能低了也不行。
每個(gè)存儲(chǔ)過(guò)程可以不用顯式事務(wù),它本身就為你開啟了一個(gè)隱式事務(wù),如果需要開啟顯示事務(wù),就通過(guò)savepoint sp_begintran開啟,無(wú)論是不是顯式還是隱式事務(wù),你都得通過(guò)commit work提交事務(wù),通過(guò)exception捕捉SQL語(yǔ)句異常,在異常發(fā)生時(shí)需要回滾事務(wù)(rollback work)。
OracleTransaction 類包含多個(gè)屬性,其中的兩個(gè)為 Connection(指定與事務(wù)關(guān)聯(lián)的數(shù)據(jù)庫(kù)連接)和 IsolationLevel(指定事務(wù)隔離級(jí)別);本文稍后將向您介紹更多有關(guān)事務(wù)隔離級(jí)別的內(nèi)容。 OracleTransaction 類包含許多操控事務(wù)的方法。您可以使用 Commit() 方法永久提交 SQL 語(yǔ)句,并可以使用 Rollback() 撤銷這些語(yǔ)句。您還可以使用 Save() 在事務(wù)中設(shè)置一個(gè)保存點(diǎn)。 我現(xiàn)在將帶著您逐步完成兩個(gè)示例程序 ― 一個(gè)用 C# 編寫 (TransExample1.cs),另一個(gè)用 VB.NET 編寫 (TransExample1.vb)。這些程序演示了如何執(zhí)行一個(gè)包含了兩條 INSERT 語(yǔ)句的事務(wù)。第一條 INSERT 語(yǔ)句將在表 product_types 中添加一行,第二條將在表 products 中添加一行。 導(dǎo)入命名空間以下C# 程序語(yǔ)句指定在程序中使用 System 和 Oracle.DataAcess.Client 命名空間: using System; using Oracle.DataAccess.Client;下面是等價(jià)的 VB.NET 語(yǔ)句: Imports System Imports Oracle.DataAccess.ClientOracle.DataAccess.Client 命名空間是 ODP.NET 的一部分,它包含許多類,其中有OracleConnection、OracleCommand 和 OracleTransaction。示例程序用到了這些類。
事務(wù)是為了保證數(shù)據(jù)的完整性而設(shè)置的,在使用事務(wù)時(shí),如果你是使用程序進(jìn)行控制的話,一般都會(huì)自動(dòng)提交事務(wù)的,需要手動(dòng)進(jìn)行事務(wù)的操作的是在進(jìn)行批處理的時(shí)候,為了保證數(shù)據(jù)要么一起成功要么一起失敗,在開始數(shù)據(jù)的插入或者刪除之前,要把事務(wù)的自動(dòng)提交改為false,然后才能執(zhí)行相關(guān)的SQL語(yǔ)句,當(dāng)SQL無(wú)異常全部執(zhí)行完以后,再手動(dòng)提交就可以了
名稱欄目:oracle如何實(shí)現(xiàn)事務(wù),oracle開啟事務(wù)sql
本文來(lái)源:http://chinadenli.net/article24/dseioje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、定制網(wǎng)站、用戶體驗(yàn)、外貿(mào)建站、做網(wǎng)站、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)