• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    當多個用戶訪問同一數據庫時會發生的現象

    發布: 2008-6-02 10:16 | 作者: 網絡轉載 | 來源: 軟件測試時代論壇 | 查看: 151次 | 進入軟件測試論壇討論

    領測軟件測試網

    “游標穩定性”隔離級別

    當使用游標穩定性隔離級別時,只要隔離事務所用的游標定位在某一行上,就會鎖定該游標所引用的這一行。所獲取的鎖一直有效,直到游標重定位(通常通過調用 FETCH 語句)或隔離事務終止為止。因此,當使用這種隔離級別時,在同一事務中多次發出 SELECT 語句可能會產生不同的結果。丟失更新和臟讀不會發生;但有可能出現不可重復的讀和幻像。

    當使用“游標穩定性”隔離級別的事務通過可更新游標從表中檢索行時,在游標定位在該行上時,其它事務不能更新或刪除該行。但是,如果被鎖定的行本身不是用索引訪問的,那么其它事務可以將新的行添加到表,并對位于被鎖定行前后的行進行更新和/或刪除操作。此外,如果隔離事務修改了它檢索到的任何行,那么在隔離事務終止之前,即使在游標不再位于這個被修改的行,其它事務不能更新或刪除該行。

    其它事務在其它行上進行的更改,在提交之前對于使用“游標穩定性”隔離級別的事務是不可見的。缺省情況下,大多數事務都使用“游標穩定性”隔離級別。

    這種隔離級別對旅館預訂應用程序有什么影響呢?現在,當一個客戶檢索某個日期段內的所有可用房間列表,然后查看關于所產生的列表上每個房間的信息時(每次查看一個房間),您可以更改旅館中任何房間的房價,而其他客戶可以對任何日期段的任何房間進行或取消預訂;唯一的例外是第一個客戶當前正在查看的房間。當第一個客戶查看列表中另一個房間的信息時,對于這個新房間也是一樣;您現在可以更改第一個客戶剛才查看的房間的房價,其他客戶也可以預訂該房間,但不能對第一個客戶當前正在查看的房間進行這些操作。

    “未提交的讀”隔離級別

    在使用未提交的讀隔離級別的情況中,當單個事務檢索行時,僅當另一個事務試圖刪除或更改被檢索的行所在的表時,才會在單個事務期間鎖定這些行。因為在使用這種隔離級別時,行通常保持未鎖定狀態,所以丟失更新、臟讀、不可重復的讀和幻像都可能會發生。

    在大多數情況下,其它事務對行所作的更改,在提交或回滾之前對于使用“未提交的讀”隔離級別的事務是可見的。但是,此類事務不能看見或訪問其它事務所創建的表、視圖或索引,直到那些事務被提交為止。類似地,如果其它事務刪除了現有的表、視圖或索引,使用“未提交的讀”隔離級別的事務僅當進行刪除操作的事務終止時才能了解這一情況。這種行為有一個例外:當運行在“未提交的讀”隔離級別下的事務使用可更新游標時,該事務的行為和在“游標穩定性”隔離級別下運行一樣,并應用“游標穩定性”隔離級別的約束。

    “未提交的讀”隔離級別通常用于那些訪問只讀表的事務和/或某些執行 SELECT 語句的事務,這些語句對其它事務的未提交數據沒有負面效果。

    那么這種隔離級別對旅館預訂應用程序有什么影響呢?現在,當一個客戶檢索某個日期段內的所有可用房間列表時,您可以更改旅館中任何房間的房價,而其它客戶也可以對任何日期段內的任何房間進行或取消預訂。此外,如果其它客戶取消了預訂,即使他們還沒有終止其事務并將那些取消提交到數據庫,所生成的列表就可以包含這些取消預訂的房間了。

    指定隔離級別

    盡管隔離級別是控制如何為事務鎖定資源的,但實際上是在應用程序級別指定它們的。對于嵌入式 SQL 應用程序,是在預編譯時或將應用程序綁定到數據庫時指定要使用的隔離級別。在大多數情況下,應用程序的隔離級別是用受支持的編譯語言(如 C 或 C++)編寫的,通過 PRECOMPILE PROGRAM 和 BIND 命令/API 的 ISOLATION 選項來設置隔離級別。對于調用級接口(CLI)應用程序,所用的隔離級別是在應用程序運行時通過調用指定了 SQL_ATTR_TXN_ISOLATION 連接屬性的 SQLSetConnectAttr() 函數進行設置的。也可以通過指定TXNISOLATION 關鍵字的值來設置 CLI 應用程序的隔離級別,該關鍵字位于 db2cli.ini 配置文件中。對于 JDBC 和 SQLJ 應用程序,隔離級別是在應用程序運行時通過調用駐留在 java.sql 連接接口中的 setTransactionIsolation() 方法設置的。

    當沒有指定隔離級別時,則缺省地使用“游標穩定性”隔離級別。對于從命令行處理器(CLP)執行的命令和腳本以及嵌入式 SQL、CLI、JDBC 和 SQLJ 應用程序都是如此。因此,也可以指定從 CLP 運行的命令和腳本所用的隔離級別;在這種情況下,所用的隔離級別是通過在建立與數據庫的連接之前在 CLP 中執行 CHANGE ISOLATION 命令設置的。

    選擇適當的隔離級別

    選擇用于事務的適當隔離級別是非常重要的。隔離級別不僅影響數據庫如何很好地支持并發性;而且影響包含該事務的應用程序的整體性能。這是因為獲取和釋放鎖所需的資源因隔離級別而異。

    通常,使用的隔離級別越嚴格,對并發性提供的支持就越少,而整體性能可能會越低,因為要獲取并占有更多的資源。但是,當您確定將要使用的最佳隔離級別時,應該通過確定哪些現象可接受而哪些現象不可接受來進行決策。下列推斷可以用來幫助您確定在特定環境中使用哪種隔離級別:

    如果您正在只讀數據庫上執行查詢,或者正在執行查詢而不考慮是否有未提交的數據值返回,則使用“未提交的讀”隔離級別。(需要是只讀事務 — 不需要較高的數據穩定性。)

    如果您希望在不看見未提交數據值的情況下獲得最大的并發性,則使用“游標穩定性”隔離級別。(需要是讀/寫事務 — 不需要較高的數據穩定性。)

    如果您希望獲得并發性,并希望限定的行在單個事務執行期間保持穩定,則使用“讀穩定性”隔離級別。(需要是只讀或讀/寫事務 — 需要較高的數據穩定性。)

    如果您正在執行查詢,并且不希望看到對產生的結果數據集進行更改,則使用“可重復的讀”隔離級別。(需要是只讀事務 — 需要極高的數據穩定性

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    22/2<12

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>