青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 9, comments - 4, trackbacks - 0, articles - 9

摘 要:本文討論了Oracle和SQL Server的在事務處理上的區別,并分析了其實現機制的差異。

關鍵詞:Oracle;SQL Server;事務;事務隔離級別;DDL。


事務處理是所有大型數據庫產品的一個關鍵問題,各數據庫廠商都在這個方面花費了很大精力,不同的事務處理方式會導致數據庫性能和功能上的巨大差異。

事務處理也是數據庫管理員與數據庫應用程序開發人員必須深刻理解的一個問題,對這個問題的疏忽可能會導致應用程序邏輯錯誤以及效率低下。

下面我們針對Oracle及SQL Server這兩種當前廣泛使用的大型數據庫產品,探討一下它們在事務處理方面的一些差異。如沒有特殊說明,本文內容適用的數據庫產品版本為Oracle9i及SQL Server 2000,其中的示例SQL語句,對于Oracle是在SQL*Plus中執行,而對于SQL Server 2000是在osql中執行。
一.事務的概念

事務可以看作是由對數據庫的若干操作組成的一個單元,這些操作要么都完成,要么都取消,從而保證數據滿足一致性的要求。事務的一個典型例子是銀行中的轉帳操作,帳戶A把一定數量的款項轉到帳戶B上,這個操作包括兩個步驟,一個是從帳戶A上把存款減去一定數量,二是在帳戶B上把存款加上相同的數量。這兩個步驟顯然要么都完成,要么都取消,否則銀行就會受損失。顯然,這個轉帳操作中的兩個步驟就構成一個事務。

數據庫中的事務還有如下ACID特征。

ACID分別是四個英文單詞的首寫字母,這四個英文單詞是Atomicity、Consistency、Isolation、Durability,分別翻譯為原子性、一致性、隔離性、持久性。

原子性:指事務中的操作,或者都完成,或者都取消。

一致性:指事務中的操作保證數據庫中的數據不會出現邏輯上不一致的情況,一致性一般會隱含的包括在其他屬性之中。

隔離性:指當前的事務與其他未完成的事務是隔離的。在不同的隔離級別下,事務的讀取操作,可以得到的結果是不同的。

持久性:指對事務發出COMMIT命令后,即使這時發生系統故障,事務的效果也被持久化了。與此相反的是,當在事務執行過程中,系統發生故障,則事務的操作都被回滾,即數據庫回到事務開始之前的狀態。

對數據庫中的數據修改都是在內存中完成的,這些修改的結果可能已經寫到硬盤也可能沒有寫到硬盤,如果在操作過程中,發生斷電或系統錯誤等故障,數據庫可以保證未結束的事務對數據庫的數據修改結果即使已經寫入磁盤,在下次數據庫啟動后也會被全部撤銷;而對于結束的事務,即使其修改的結果還未寫入磁盤,在數據庫下次啟動后會通過事務日志中的記錄進行“重做”,即把丟失的數據修改結果重新生成,并寫入磁盤,從而保證結束事務對數據修改的永久化。這樣也保證了事務中的操作要么全部完成,要么全部撤銷。

二.事務設置及類型的區別

在SQL Server中有三種事務類型,分別是:隱式事務、顯式事務、自動提交事務,缺省為自動提交。

自動提交,是指對于用戶發出的每條SQL語句,SQL Server都會自動開始一個事務,并且在執行后自動進行提交操作來完成這個事務,也可以說在這種事務模式下,一個SQL語句就是一個事務。

顯式事務,是指在自動提交模式下以Begin Transaction開始一個事務,以Commit或Rollback結束一個事務,以Commit結束事務是把事務中的修改永久化,即使這時發生斷電這樣的故障。例如下面是SQL Server中的一個顯式事務的例子。

Begin Tran

Update emp Set ename=’Smith’ Where empno=7369

Insert Into dept Values(60,’HR’,’GZh’)

Commit

隱式事務,是指在當前會話中用Set Implicit_Transactions On命令設置的事務類型,這時任何DML語句(Delete、Update、Insert)都會開始一個事務,而事務的結束也是用Commit或Rollback。

在Oracle中沒有SQL Server的這些事務類型,缺省情況下任何一個DML語句都會開始一個事務,直到用戶發出Commit或Rollback操作,這個事務才會結束,這與SQL Server的隱式事務模式相似。

三.事務隔離級別

在SQL92標準中,事務隔離級別分為四種,分別為:Read Uncommitted、Read Committed、Read Repeatable、Serializable,其中Read Uncommitted與Read Committed為語句級別的,而Read Repeatable與Serializable是針對事務級別的。

在Oracle和SQL Server中設置事務隔離級別的語句是相同的,都使用SQL92標準語法,即:

Set Transaction Isolation Level Read Committed

上面示例中的Read Committed可以被替換為其他三種隔離級別中的任意一種。

1.SQL Server中的隔離級別及實現機制

在SQL Server中提供了所有這四種隔離級別。

下面我們討論在SQL Server中,這幾種隔離級別的含義及其實現方式。

Read Uncommitted:一個會話可以讀取其他事務未提交的更新結果,如果這個事務最后以回滾結束,這時的讀取結果就可能是錯誤的,所以多數的數據庫應用都不會使用這種隔離級別。

Read Committed:這是SQL Server的缺省隔離級別,設置為這種隔離級別的事務只能讀取其他事務已經提交的更新結果,否則,發生等待,但是其他會話可以修改這個事務中被讀取的記錄,而不必等待事務結束,顯然,在這種隔離級別下,一個事務中的兩個相同的讀取操作,其結果可能不同。

Read Repeatable:在一個事務中,如果在兩次相同條件的讀取操作之間沒有添加記錄的操作,也沒有其他更新操作導致在這個查詢條件下記錄數增多,則兩次讀取結果相同。換句話說,就是在一個事務中第一次讀取的記錄保證不會在這個事務期間發生改變。SQL Server是通過在整個事務期間給讀取的記錄加鎖實現這種隔離級別的,這樣,在這個事務結束前,其他會話不能修改事務中讀取的記錄,而只能等待事務結束,但是SQL Server不會阻礙其他會話向表中添加記錄,也不阻礙其他會話修改其他記錄。

Serializable:在一個事務中,讀取操作的結果是在這個事務開始之前其他事務就已經提交的記錄,SQL Server通過在整個事務期間給表加鎖實現這種隔離級別。在這種隔離級別下,對這個表的所有DML操作都是不允許的,即要等待事務結束,這樣就保證了在一個事務中的兩次讀取操作的結果肯定是相同的。

2.Oracle中的隔離級別及實現機制

在Oracle中,沒有Read Uncommitted及Repeatable Read隔離級別,這樣在Oracle中不允許一個會話讀取其他事務未提交的數據修改結果,從而避免了由于事務回滾發生的讀取錯誤。Oracle中的Read Committed和Serializable級別,其含義與SQL Server類似,但是實現方式卻大不一樣。

在Oracle中,存在所謂的回滾段(Oracle9i之前版本)或撤銷段(Oracle9i版本),Oracle在修改數據記錄時,會把這些記錄被修改之前的結果存入回滾段或撤銷段中,就是因為這種機制,Oracle對于事務隔離級別的實現與SQL Server截然不同。在Oracle中,讀取操作不會阻礙更新操作,更新操作也不會阻礙讀取操作,這樣在Oracle中的各種隔離級別下,讀取操作都不會等待更新事務結束,更新操作也不會因為另一個事務中的讀取操作而發生等待,這也是Oracle事務處理的一個優勢所在。

Oracle缺省的設置是Read Committed隔離級別(也稱為語句級別的隔離),在這種隔離級別下,如果一個事務正在對某個表進行DML操作,而這時另外一個會話對這個表的記錄進行讀取操作,則Oracle會去讀取回滾段或撤銷段中存放的更新之前的記錄,而不會象SQL Server一樣等待更新事務的結束。

在Serializable隔離級別(也稱為事務級別的隔離),事務中的讀取操作只能讀取這個事務開始之前已經提交的數據結果。如果在讀取時,其他事務正在對記錄進行修改,則Oracle就會在回滾段或撤銷段中去尋找對應的原來未經更改的記錄(而且是在讀取操作所在的事務開始之前存放于回滾段或撤銷段的記錄),這時讀取操作也不會因為相應記錄被更新而等待。

四.DDL語句對事務的影響

1.Oracle中DDL語句對事務的影響

在Oracle中,執行DDL語句(如Create Table、Create View等)時,會在執行之前自動發出一個Commit命令,并在隨后發出一個Commit或者Rollback命令,也就是說,DDL會象如下偽碼一樣執行:

Commit;

DDL_Statement;

If (Error) then

Rollback;

Else

Commit;

End if;

我們通過分析下面例子來看Oracle中,DDL語句對事務的影響:

Insert into some_table values(‘Before’);

Creaate table T(x int);

Insert into some_table values(‘After’);

Rollback;

由于在Oracle執行Create table語句之前進行了提交,而在Create table執行后也會自動發出Commit命令,所以只有插入After的行被回滾,而插入Before的行不會被回滾,Create table命令的結果也不會被回滾,即使Create table語句失敗,所進行的Before插入也會被提交。如果最后發出Commit命令,因為插入Before及Create table的操作結果已經在之前提交,所以Commit命令影響的只有插入After的操作。

2.SQL Server中DDL語句對事務的影響

在SQL Server中,DDL語句對事務的影響與其他DML語句相同,也就是說,在DML語句發出之前或之后,都不會自動發出Commit命令。

在SQL Server 2000中,對于與上面Oracle同樣的例子,最后發出Rollback后,數據庫會回滾到插入Before之前的狀態,即插入Before和After的行都會被回滾,數據表T也不會被創建。

如果最后發出Commit操作,則會把三個操作的結果全部提交。

五.用戶斷開數據庫連接對事務的影響

另外,對應于Oracle的管理客戶端工具SQL*Plus,在SQL Server 2000中是osql,兩種管理工具都是命令行工具,使用方式及作用也類似,但是在SQL*Plus中,用戶退出連接時,會自動先發出Commit命令,然后再退出,而在osql中,如果用戶退出連接,會自動發出Rollback命令,這對于SQL Server的自動提交模式沒有什么影響,但如果處于隱式事務模式,其影響是顯而易見的。對于兩種數據庫產品的其他客戶端管理工具也有類似的不同之處。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线观看日本一区| 久久精品二区| 欧美深夜影院| 国产精品扒开腿做爽爽爽视频| 欧美精品亚洲二区| 欧美噜噜久久久xxx| 欧美精品系列| 国产精品黄视频| 国内精品久久久久影院 日本资源| 韩国av一区二区三区| 亚洲精品国精品久久99热| 99热这里只有精品8| 亚洲免费视频网站| 久久亚洲一区二区三区四区| 欧美成人免费在线视频| 亚洲国产欧美日韩另类综合| 亚洲精品国产精品国自产观看浪潮 | 性色av一区二区三区红粉影视| 亚洲欧美日韩视频一区| 久久视频这里只有精品| 欧美日韩一卡二卡| 国语自产偷拍精品视频偷| 亚洲精品字幕| 久久精品99国产精品日本| 欧美成人一区二区三区片免费| 99国产精品久久| 久久综合给合久久狠狠狠97色69| 欧美日韩一区在线播放| 尤物九九久久国产精品的特点| 亚洲图片激情小说| 欧美在线视频一区二区三区| 亚洲国产高潮在线观看| 欧美一区二区三区四区高清| 欧美日韩另类在线| 亚洲国产精品久久久久秋霞影院| 亚洲专区免费| 亚洲欧洲精品天堂一级| 欧美怡红院视频一区二区三区| 欧美精品日韩| 亚洲国产成人精品久久久国产成人一区| 亚洲影视在线| 国产精品一区二区久激情瑜伽| 亚洲国产精品va| 久久国产乱子精品免费女| 亚洲美女精品一区| 米奇777在线欧美播放| 国产午夜精品久久久久久免费视| 亚洲一区二区少妇| 亚洲精品韩国| 欧美极品aⅴ影院| 亚洲精品久久久一区二区三区| 久久久久久综合| 欧美一级网站| 国产日韩在线看| 久久成人免费| 欧美在线免费播放| 国产一区二区观看| 久久久7777| 久久精品理论片| 韩日精品在线| 鲁鲁狠狠狠7777一区二区| 久久久久国产一区二区| 韩国欧美一区| 欧美国产日本在线| 欧美高清hd18日本| 夜夜嗨av一区二区三区网页| 亚洲日本va午夜在线电影| 欧美精品一区二区三区一线天视频| 亚洲精品久久7777| 99国产精品久久久久老师| 欧美视频在线观看| 久久激情一区| 久久久久久穴| 亚洲黄色影片| 99精品国产99久久久久久福利| 欧美三级小说| 久久av一区二区三区| 久久一区二区三区国产精品 | 久久中文字幕一区二区三区| 亚洲国产精品一区二区第四页av | 免费短视频成人日韩| 亚洲美女区一区| 亚洲天堂av图片| 国内成+人亚洲+欧美+综合在线| 麻豆成人综合网| 欧美剧在线免费观看网站| 亚洲女人小视频在线观看| 欧美亚洲三区| 亚洲精品日韩在线| 亚洲欧美日韩国产成人精品影院| 亚洲成色777777在线观看影院| 亚洲狼人综合| 国产一区二区成人久久免费影院| 奶水喷射视频一区| 国产精品激情| 亚洲国产成人午夜在线一区| 国产精品一区二区久久久| 亚洲日本va在线观看| 亚洲图片欧洲图片av| **性色生活片久久毛片| 夜夜狂射影院欧美极品| 黄色亚洲大片免费在线观看| 亚洲美洲欧洲综合国产一区| 激情久久五月| 亚洲欧美日韩视频一区| 亚洲最新在线视频| 久久久久久久一区二区| 午夜久久一区| 欧美另类videos死尸| 麻豆av一区二区三区久久| 国产精品视频yy9099| 亚洲国产天堂久久国产91| 国产农村妇女精品一二区| 亚洲人成啪啪网站| 精品福利免费观看| 午夜精品美女自拍福到在线| 亚洲一区三区电影在线观看| 欧美激情综合| 亚洲福利免费| 亚洲国产精品第一区二区| 欧美一级理论片| 西西裸体人体做爰大胆久久久| 欧美日韩福利视频| 亚洲黄色成人久久久| 亚洲激情午夜| 免费欧美在线视频| 亚洲第一中文字幕在线观看| 在线日韩欧美| 久久一二三国产| 欧美激情成人在线视频| 在线观看国产日韩| 久久精品国产在热久久| 久久免费精品日本久久中文字幕| 国产婷婷一区二区| 欧美一级久久久| 久久性天堂网| 在线色欧美三级视频| 狼人天天伊人久久| 亚洲第一区中文99精品| 日韩亚洲在线| 欧美日韩一区二区欧美激情| 99天天综合性| 欧美一区二区视频在线观看2020| 国产精品欧美风情| 欧美在线一二三| 欧美v亚洲v综合ⅴ国产v| 亚洲国产精品悠悠久久琪琪| 欧美成人tv| 日韩亚洲精品在线| 欧美一区二区在线看| 国产综合色在线| 男人插女人欧美| 一本色道久久综合狠狠躁篇的优点 | 亚洲综合日韩中文字幕v在线| 久久黄色级2电影| 亚洲第一中文字幕| 欧美日韩国产首页| 亚洲一区在线观看免费观看电影高清| 欧美一区2区三区4区公司二百| 国内精品视频在线观看| 男女激情视频一区| 亚洲一级高清| 欧美 日韩 国产 一区| 亚洲视频福利| 久久久久免费视频| 亚洲人成亚洲人成在线观看图片 | 欧美成年人视频网站欧美| 99re这里只有精品6| 欧美有码视频| 日韩一区二区精品葵司在线| 国产精品一区一区三区| 蜜桃精品一区二区三区| 亚洲一区在线播放| 欧美激情中文字幕一区二区 | 久久精品久久综合| 亚洲精品乱码久久久久久| 国产精品国产三级国产 | 国产一区二区中文| 欧美伦理a级免费电影| 久久精品国产69国产精品亚洲| 亚洲欧洲精品一区二区三区不卡 | 欧美成人精品高清在线播放| 亚洲小少妇裸体bbw| 欧美国产日韩亚洲一区| 香蕉成人久久| 99视频有精品| 亚洲国产精品第一区二区三区| 国产精品久在线观看| 另类图片国产| 欧美在线亚洲一区| 一本色道久久综合亚洲二区三区| 免费成人网www| 久久国产乱子精品免费女| 亚洲一区二区三区影院| 亚洲欧洲一区二区在线观看| 国产一区二区三区在线播放免费观看| 欧美日韩综合视频| 欧美精品高清视频| 欧美极品影院| 欧美激情精品久久久久久|