共用方式為


隔離等級

使用鎖定做為交易控制機制,可以解決並行問題。鎖定可讓所有的交易彼此在完全隔離的情況下執行,雖然任何時候都可能有一個以上的交易在執行。交易準備好接受不一致資料的等級,稱為隔離等級。提高的隔離等級可針對資料不一致提供更多的保護,但缺點是並行數目會減少。

在 SQL Server Compact 3.5 中,應用程式需要的隔離等級決定 SQL Server Compact 3.5 使用的鎖定行為。

SQL Server Compact 3.5 支援下列的隔離等級 (從最低到最高)︰

  • 讀取認可 (SQL Server Compact 3.5 預設值)

  • 可重複讀取

  • 可序列化 (交易彼此完全隔離)

當隔離等級提高,資料在資料不一致上就獲得越多的保護。然而,這會降低交易的並行,並影響多使用者存取。

注意

SQL Server Compact 3.5 確保一個交易無法讀取另一個交易未認可的資料 (中途讀取)。只要使用資料頁版本控制機制就可以做到,因為該機制讓使用者不必要求鎖定資料就可讀取資料。這提供讀取 (SELECT) 作業的例外並行。

隔離等級和並行問題

下表顯示隔離的等級,以及該等級提出的並行問題。

注意

可能發生的並行問題包括未認可的相依性、不一致的分析以及幽靈讀取 (Phantom Read) 等。如需並行問題的詳細資訊,請參閱<並行>。

隔離等級

未認可的相依性 (強行讀取)

不一致的分析 (非重複讀取)

幽靈讀取

讀取認可

可重複讀取

可序列化

隔離等級可以用程式設計的方式設定,或是使用 SQL 語法 SET TRANSACTION ISOLATION LEVEL 設定。如需詳細資訊,請參閱<交易隔離等級>。

交易範圍下的隔離等級

System.Transaction 的預設隔離等級為 Readcommitted。不過,根據預設,交易範圍中的交易會在隔離等級設定為 Serializable 的情況下執行。因此,將 SQL Server Compact 3.5 連接編列為交易範圍時,隱含交易 (針對交易範圍在內部建立的 SQL Server Compact 3.5 交易) 預設會在 Serializable 隔離等級執行。TransactionScope 類別的某些多載建構函式會接受隔離等級當做參數。這些建構函式應該用於為隱含交易指定不同的隔離等級值。如果 SQL Server Compact 3.5 不支援指定的隔離等級,將 SQL Server Compact 3.5 連接編列到交易範圍將會擲回例外狀況。

同時,指定為連接字串一部分的 default lock timeout 屬性會管理交易將等待的時間。不過,當連接編列到 TransactionScope 時,TransactionScope 的 TimeSpan 會覆寫此屬性。例如,如果包含 1000 毫秒當做 default lock timeout 和連接之值的 ConnectionString 編列在 100 毫秒的 TransactionScope 中,存在交易僅會持續 100 毫秒而非 1000 毫秒。也就是說,如果您想讓應用程式擁有較長的交易逾時,並在 TransactionScope 中執行命令,您必須同時在連接字串和 TransactionScope 的 TimeSpan 中指定逾時值。

注意

default lock timeou 的預設值為 2000 毫秒,而 TransactionScope 的預設值為 1 分鐘。

請參閱

其他資源

交易 (SQL Server Compact)

鎖定 (SQL Server Compact)

資料指標 (SQL Server Compact)