电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SQL Server 2005使用基于行版本控制的隔離級別初探(3) -- SNAPSHOT

瀏覽:176日期:2023-11-01 09:52:49

回顧一下SNAPSHOT的構架:

SNAPSHOT隔離就像真實的快照,它會無視涉及行的變化。在SNAPSHOT隔離下運行的事務將讀取數據,然后由另一事務修改此數據。SNAPSHOT事務不阻塞由其他事務執行的更新操作,它忽略數據的修改繼續從版本化的行讀取數據。但是,當快照事務嘗試修改已由其他事務修改的數據時,SNAPSHOT事務將生成錯誤并終止.

相比READ_COMMITTED_SNAPSHOT,SNAPSHOT真正做到了快照隔離,完全無視數據的更新。相對READ_COMMITTED_SNAPSHOT,它更進一步減輕了對鎖的依賴,在性能方面獲得了更大的優勢。不可避免的是,SNAPSHOT的事務性也變得更差,但是,至少,它比NoLock要好。^_^

SNAPSHOT的限制:

SNAPSHOT比READ_COMMITTED_SNAPSHOT更快,但是壞消息是它的限制也多。

1.快照隔離不支持分布式事務,包括分布式分區數據庫中的查詢。

2.SQL Server 不會保留多個版本的系統元數據。表中的數據定義語言 (DDL) 語句和其他數據庫對象(索引、視圖、數據類型、存儲過程和公共語言運行時函數)會更改元數據。如果 DDL 語句修改一個對象,那么在快照隔離下對該對象的任何并發引用都將導致快照事務失敗。READ_COMMITTED_SNAPSHOT 數據庫選項為 ON 時,已提交讀事務沒有此限制。例如,數據庫管理員執行下面的 ALTER INDEX 語句。 USE AdventureWorks;

GO

ALTER INDEX AK_Employee_LoginID

ON HumanResources.Employee REBUILD;

GO

執行 ALTER INDEX 語句后,任何在執行 ALTER INDEX 語句時處于活動狀態的快照事務,如果試圖引用 HumanResources.Employee 表,都將收到錯誤。而使用行版本控制的已提交讀事務不受影響。

3.BULK INSERT 操作可能會導致對目標表元數據的更改(例如,禁用約束檢查時)。如果出現這種情況,訪問大容量插入表的并發快照隔離事務將失敗。

設置SNAPSHOT:

設置SNAPSHOT隔離模式也很簡單,只要我們簡單的一步操作就可以實現。

ALTER DATABASE DATABASE_NAMESET ALLOW_SNAPSHOT_ISOLATION ON;

但是要注意:如果 ALLOW_SNAPSHOT_ISOLATION 數據庫選項設置為 ON,則數據庫中數據已修改的所有活動事務完成之前,Microsoft SQL Server Database Engine 實例不會為已修改的數據生成行版本。如果存在活動的修改事務,SQL Server 將把該選項的狀態設置為 PENDING_ON。所有修改事務完成后,該選項的狀態更改為 ON。在該選項完全處于 ON 狀態之前,用戶無法在數據庫中啟動快照事務。數據庫管理員將 ALLOW_SNAPSHOT_ISOLATION 選項設置為 OFF 后,數據庫將跳過 PENDING_OFF 狀態。

下面是ALLOW_SNAPSHOT_ISOLATION 選項的各個狀態當前數據庫的快照隔離框架狀態說明OFF未啟用對快照隔離事務的支持。不允許執行快照隔離事務。PENDING_ON對快照隔離事務的支持處于轉換狀態(從 OFF 到 ON)。打開的事務必須完成。

不允許執行快照隔離事務。ON已啟用對快照隔離事務的支持。

允許執行快照事務。PENDING_OFF對快照隔離事務的支持處于轉換狀態(從 ON 到 OFF)。

此后啟動的快照事務無法訪問此數據庫。更新事務仍會導致此數據庫中出現版本控制開銷。現有快照事務仍可以訪問此數據庫,不會遇到任何問題。直到數據庫快照隔離狀態為 ON 時處于活動狀態的所有快照事務完成后,狀態 PENDING_OFF 才變為 OFF。

SNAPSHOT的使用:

下面是使用READ_COMMITTED_SNAPSHOT的一個例子: 在快照隔離下運行的事務可以訪問數據庫中為快照啟用的表。若要訪問沒有為快照啟用的表,則必須更改隔離級別。例如,下面的代碼示例顯示了在快照事務下運行時聯接兩個表的 SELECT 語句。一個表屬于未啟用快照隔離的數據庫。當 SELECT 語句在快照隔離下運行時,該語句無法成功執行。SET TRANSACTION ISOLATION LEVEL SNAPSHOT;

BEGIN TRAN

SELECT t1.col5, t2.col5

FROM Table1 as t1

INNER JOIN SecondDB.dbo.Table2 as t2

ON t1.col1 = t2.col2;

下面的代碼示例顯示了已修改為從事務隔離級別更改為已提交讀隔離級別的相同 SELECT 語句。由于此更改,SELECT 語句將成功執行。

SET TRANSACTION ISOLATION LEVEL SNAPSHOT;

BEGIN TRAN

SELECT t1.col5, t2.col5

FROM Table1 as t1

WITH (READCOMMITTED)

INNER JOIN SecondDB.dbo.Table2 as t2

ON t1.col1 = t2.col2;

SNAPSHOT的演示:

在此示例中,在快照隔離下運行的事務將讀取數據,然后由另一事務修改此數據。快照事務不阻塞由其他事務執行的更新操作,它忽略數據的修改繼續從版本化的行讀取數據。但是,當快照事務嘗試修改已由其他事務修改的數據時,快照事務將生成錯誤并終止。

在會話 1 上:

USE AdventureWorks;GO

--在數據庫上開啟snapshot隔離級別.ALTER DATABASE AdventureWorksSET ALLOW_SNAPSHOT_ISOLATION ON;GO

-- 開始一個snapshot事務SET TRANSACTION ISOLATION LEVEL SNAPSHOT;GOBEGIN TRANSACTION;

--選擇EmployeeID號為4的員工的休假資料SELECT EmployeeID, VacationHoursFROM HumanResources.EmployeeWHERE EmployeeID = 4;

在會話 2 上:USE AdventureWorks;GO

-- 開始一個事務BEGIN TRANSACTION;

--我們修改了EmployeeID為4的員工的休假資料UPDATE HumanResources.EmployeeSET VacationHours = VacationHours - 8WHERE EmployeeID = 4;

-- 確認下現在EmployeeID為4的員工的休假資料SELECT VacationHoursFROM HumanResources.EmployeeWHERE EmployeeID = 4;

在會話 1 上:

--因為會話二的事務沒有提交,--EmployeeID為4的員工的休假資料因該沒變SELECT EmployeeID, VacationHoursFROM HumanResources.EmployeeWHERE EmployeeID = 4;

在會話 2 上:--提交我們的更新,數據被更改了COMMIT TRANSACTION;GO

在會話 1 上:

--OK,現在看看小4同志的資料,被修改的數據被華麗的無視了SELECT EmployeeID, VacationHoursFROM HumanResources.EmployeeWHERE EmployeeID = 4;

--現在我們也來嘗試下修改小4同志的資料,--事務即將崩潰,請系緊安全帶。^_^.UPDATE HumanResources.EmployeeSET SickLeaveHours = SickLeaveHours - 8WHERE EmployeeID = 4;

--ROLLBACK之后小4的數據到底是什么?你知道嗎?ROLLBACK TRANSACTIONGO

http://www.cnblogs.com/trisaeyes/archive/2006/12/30/607994.html

標簽: Sql Server 數據庫
主站蜘蛛池模板: 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 净气型药品柜-试剂柜-无管道净气型通风柜-苏州毕恩思 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 东亚液氮罐-液氮生物容器-乐山市东亚机电工贸有限公司 | 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 希望影视-高清影视vip热播电影电视剧免费在线抢先看 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 亮点云建站-网站建设制作平台 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 压力变送器-上海武锐自动化设备有限公司| 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 大型冰雕-景区冰雕展制作公司,3D创意设计源头厂家-[赛北冰雕] | Akribis直线电机_直线模组_力矩电机_直线电机平台|雅科贝思Akribis-杭州摩森机电科技有限公司 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 电动液压篮球架_圆管地埋式篮球架_移动平箱篮球架-强森体育 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 3d打印服务,3d打印汽车,三维扫描,硅胶复模,手板,快速模具,深圳市精速三维打印科技有限公司 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 |