1. 程式人生 > >事務(Transaction) 之分散式事務TransactionScope,原子性

事務(Transaction) 之分散式事務TransactionScope,原子性

事物(Transaction)是訪問並可能更新資料庫中各種資料項的一個程式執行單元(unit)。事物通常由高階資料庫操縱語言或程式語言(如SQL,C++或Java)書寫的使用者程式的執行所引起,並用形如begin transaction和commit transaction

或 rollback transaction語句(或回撥函式)來界定。事物由事務開始(begin transaction)和事務結束(committransaction或 rollback transaction)之間執行的全體操作組成。SQL Server中事務語句開始或結束時transaction可簡寫為tran.

應該具有4個屬性:原子性、一致性、隔離性、持續性。這四個屬性通常稱為ACID特性.

原子性(atomicity):     一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。

一致性(consistency): 事物必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。 隔離性(isolation):       一個事物的執行不能被其他事務干擾。即一個事物內部的操作及使用的資料對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾。 永續性(durability):     持續性也稱永久性(permanence),指一個事物一旦提交,它對資料庫中資料的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

啟動服務
Distributed Transaction Coordinator(TrkWks)

新增引用
System.Transactions

引入名稱空間
using System.Transactions;

編寫程式碼

static void Main(string[] args)
        {
            //分散式事務(原子性,要麼全部成功,要麼全部失敗(回滾 →sql完成))
            using (TransactionScope ts = new TransactionScope())
            {
                //第一步
                string sql = "select top 1 loginId from dbo.sys_user where 
[email protected]
;"; SqlParameter[] param = { new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "12" } }; Console.WriteLine(SqlHelper.ExecuteScalar(sql, param).ToString()); //第二步 string _sql = "select top 1 loginId from dbo.sys_user where [email protected];"; SqlParameter[] _param = { new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "1" } }; Console.WriteLine(SqlHelper.ExecuteScalar(_sql, _param).ToString()); //完成 ts.Complete(); } Console.ReadKey(); }
ts.Complete();事物完成

相關推薦

事務(Transaction) 分散式事務TransactionScope,原子

事物(Transaction)是訪問並可能更新資料庫中各種資料項的一個程式執行單元(unit)。事物通常由高階資料庫操縱語言或程式語言(如SQL,C++或Java)書寫的使用者程式的執行所引起,並用形如begin transaction和commit transaction

RocketMQ實戰(四)分散式事務

一:Queue in Topic 對於RocketMQ而言,Topic只是一個邏輯上的概念,真正的訊息儲存其實是在Topic中的Queue中。想一想,為什麼RocketMQ要這要設計呢?其實是為了訊息的順序消費,後文中將為大家介紹。   二:初步識別Rocke

分散式系統下資料一致性解決分散式事務

一、定義 參考百度百科定義: 分散式事務是指事務的參與者、支援事務的伺服器、資源伺服器以及事務管理器分別位於不同的分散式系統的不同節點之上。 二、分散式事務的理論 2.1 CAP理論 CAP 是指在一個分散式系統下, 包含三個要素:Consistency(一致性)、

叢集與負載均衡系列(7)——訊息佇列分散式事務

         XA協議:                為了解決分散式事務,各大廠家資料庫都提供了xa協議介面。什麼是XA協議,就是通過多階段提交,確保資料一致性。以兩階段提交為例                                  第一階段為準備階段,

SQL Server分散式事務

分散式事務的參與伺服器是需要相互訪問的,發起查詢的伺服器要根據機器名或ip查詢遠端伺服器的,同樣遠端伺服器也要查詢發起伺服器,遠端伺服器通過發起伺服器的機器名查詢伺服器,所以要保證遠端伺服器能夠通過發起伺服器的機器名訪問到發起伺服器。一般的,兩個伺服器在同一網段機器名能就行很好的解析,但是也不保證都能很好的解

《我想進大廠》分散式事務

對於分散式事務,相信所有人都應該很瞭解,為什麼會有分散式事務?無論是資料量導致的分庫,還是現在微服務盛行的場景都是他出現的原因。 這一篇內容還是避免不了俗套,主要的範圍無非是XA、2PC、3PC、TCC,再最後到Seata。 但是,我認為這東西,只是適用於面試和理論的瞭解,你真要說這些方案實際生產中有人用嗎?

億級流量架構分散式事務思路及方法

分散式事務以及分散式鎖是分散式中難點,分散式事務一篇文章可能寫不完,我的習慣時從基本概念出發,一步一步開始介紹,前面會先梳理事務中一些基本概念,對基本概念十分清楚的話可以直接看"一致性討論"以及後面的部分。予己方便總結回顧、與他交流分享。 ## 什麼是分散式事務 在日常生活中,很多事要麼全部做,要麼全

億級流量架構分散式事務解決方案對比

上一篇文章( [億級流量架構之分散式事務思路及方法](https://www.cnblogs.com/Courage129/p/14433462.html))中梳理事務到分散式事務的演變過程, 以及分散式事務的處理思路,這篇文章主要從應用的角度對比目前較為流行的一些分散式事務方案,以及一些商業應用。 想讓資

啟發:從MNS事務訊息談分散式事務(轉)

啟發:從MNS事務訊息談分散式事務 事務訊息本質上解決的問題是業務系統與訊息系統之間的事務問題(跨系統分散式事務),其基本原理即兩階段提交以及最終一致性保障。最近看了下阿里雲mns事務訊息的實現原理,介紹的蠻簡潔透徹的,對了解分散式事務實現原理挺有幫助,在閱讀本文前推薦大家先仔細閱讀下阿里雲"m

搞懂分散式技術19:使用RocketMQ事務訊息解決分散式事務

說到分散式事務,就會談到那個經典的”賬號轉賬”問題:2個賬號,分佈處於2個不同的DB,或者說2個不同的子系統裡面,A要扣錢,B要加錢,如何保證原子性?一般的思路都是通過訊息中介軟體來實現“最終一致性”:A系統扣錢,然後發條訊息給中介軟體,B系統接收此訊息,進行加錢。但這裡面有個問題:A是先update DB,

分散式訊息佇列RocketMQ--事務訊息--解決分散式事務

說到分散式事務,就會談到那個經典的”賬號轉賬”問題:2個賬號,分佈處於2個不同的DB,或者說2個不同的子系統裡面,A要扣錢,B要加錢,如何保證原子性? 一般的思路都是通過訊息中介軟體來實現“最終一致性”:A系統扣錢,然後發條訊息給中介軟體,B系統接收此訊息,進行加錢。 但這裡面有個問題:A是先update D

Java JDBC事務與JTA分散式事務

Java事務的型別有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。 常見的容器事務如Spring事務,容器事務主要是J2EE應用伺服器提供的,容器事務大多是基於JTA完成,這是一個基於JNDI的,相當複雜的API實現。所以本文暫不討論

分散式訊息佇列RocketMQ--事務訊息--解決分散式事務的最佳實踐

說到分散式事務,就會談到那個經典的”賬號轉賬”問題:2個賬號,分佈處於2個不同的DB,或者說2個不同的子系統裡面,A要扣錢,B要加錢,如何保證原子性? 一般的思路都是通過訊息中介軟體來實現“最終一致性”:A系統扣錢,然後發條訊息給中介軟體,B系統接收此訊息,進行加錢。

Spring 使用註解方式進行事務管理 /==/ Spring分散式事務實現

使用步驟: 步驟一、在spring配置檔案中引入<tx:>名稱空間 <beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins

分散式事務——tcc-transaction分散式TCC型事務框架搭建與實戰案例【轉】

一、背景 有一定分散式開發經驗的朋友都知道,產品/專案/系統最初為了能夠快速迭代上線,往往不太注重產品/專案/系統的高可靠性、高效能與高擴充套件性,採用單體應用和單例項資料庫的架構方式快速迭代開發;當產品/專案/系統做到一定規模的時候,原有的系統架構則不足以支撐義務發展需要,往往相同的業務則需要

redis源碼分析事務Transaction(上)

訂閱 exe uri 興趣 閱讀 包含 如果 舉例 blog 這周學習了一下redis事務功能的實現原理,本來是想用一篇文章進行總結的,寫完以後發現這塊內容比較多,而且多個命令之間又互相依賴,放在一篇文章裏一方面篇幅會比較大,另一方面文章組織結構會比較亂,不容易閱讀。因此

分散式事務那些事兒TCC

一、TCC簡介 TCC是一種比較成熟的分散式事務解決方案,可用於解決跨庫操作的資料一致性問題; TCC是服務化的兩階段程式設計模型,其Try、Confirm、Cancel 3個方法均由業務編碼實現; 其中Try操作作為一階段,負責資源的檢查和預留,Confirm操作作為二階段提交操作,執

SQLServer建立分散式事務

分散式事務建立注意事項 指定一個由 Transact-SQL 分散式事務處理協調器 (MS DTC) 管理的 Microsoft 分散式事務的起點。 執行 BEGIN DISTRIBUTED TRANSACTION 語句的 SQL Ser

Spring Boot2.0多資料來源分散式事務問題

分散式事務解決方案的問題, 分散式事務產生的原因:   多個不同的服務連線不同的資料來源 ,做分散式事務的管理。   這種情況是連線兩個資料來源的情況,然後事務管理器是這樣的 只管理了test02的這端業務程式碼。所以test02的這個會回滾! 但是test01會入庫哦 這屬於

分散式事務中的一致性和隔離你真的懂了嗎

前言 在分散式(資料庫)系統中,我們經常會聽到一些“高大上”卻又比較“迷惑”的詞彙,比如,ACID和CAP中的"C"是否是同一含義、Snapshot Isolation(SI)和Serializable Snapshot Isolation(SSI)區別是什麼、Serializable和Linearizab