SQL Server 2000 自定義鎖超時的概述
此文章主要向大家描述的是SQL Server 2000 自定義鎖超時,當由于另一個事務已擁有一個資源的沖突鎖,會使 Microsoft® SQL Server™ 2000 無法將鎖授權給該資源的某個事務時,該事務被阻塞以等待該資源的操作完成。
如果這導致了死鎖,則SQL Server 將終止其中參與的一個事務(不涉及超時)。如果沒有出現死鎖,則在其它事務釋放鎖之前,請求鎖的事務被阻塞。默認情況下,沒有強制的超時期限,并 且除了試圖訪問數據外(有可能被無限期阻塞),沒有其它方法可以測試某個資源是否在鎖定之前已被鎖定。
說明 sp_who 系統存儲過程可用于確定進程是否正被阻塞以及被誰阻塞。LOCK_TIMEOUT 設置允許應用程序設置語句等待阻塞資源的最長時間。當語句等待的時間大于LOCK_TIMEOUT 設置時,系統將自動取消阻塞的語句,并給應用程序返回"已超過了鎖請求超時時段"的 1222 號錯誤信息。
但是,SQL Server 不回滾或取消任何包含該語句的事務。因此,應用程序必須有捕獲 1222 號錯誤信息的錯誤處 理程序。如果應用程序沒有捕獲錯誤,則會繼續運行,并未意識到事務中的個別語句已取消,從而當事務中的后續語句可能依賴于那條從未執行的語句時, 導致應用程序出錯。
執行捕獲錯誤信息 1222 的錯誤處理程序使應用程序得以處理發生超時的情況,并采取補救操作,例如可以自動重新提交阻塞的語句或者回滾整個事務。
若要確定當前 LOCK_TIMEOUT 設置,請執行 @@LOCK_TIMEOUT 函數,例如:
DECLARE @Timeout intSELECT @Timeout = @@lock_timeoutSELECT @TimeoutGO-----------------------------------------------------------------SET LOCK_TIMEOUT指定語句等待鎖釋放的毫秒數。語法SET LOCK_TIMEOUT timeout_period參數timeout_period是在 Microsoft® SQL Server™ 返回鎖定錯誤前經過的毫秒數。值為 -1(默認值)時表示沒有超時期限(即無限期等待)。當鎖等待超過超時值時,將返回錯誤。
值為 0 時表示根本不等待,并且一遇到鎖就返回信息。注釋在連接開始時,該設置的值為 -1。設置更改后,新設置在其余的連接時間里一直有效。SET LOCK_TIMEOUT 的設置是在執行或運行時設置,而不是在分析時設置。
READPAST 鎖定提示為該 SET 選項提供了另一種方式。權限SET LOCK_TIMEOUT 權限默認授予所有用戶。示例下例將SQL Server 2000 自定義鎖超時期限設置為 1,800 毫秒。SET LOCK_TIMEOUT 1800GO
上述的相關內容就是對SQL Server 2000 自定義鎖超時的描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】