sql server 2017數據庫複習:第七章-數據庫保護(事務、排他鎖共享鎖、併發控制、可串行化調度、幾種故障)+練習題

在數據庫運行過程中,數據庫管理系統需要對數據庫進行保護管理,以保證數據的正確性與一致性,避免數據丟失、泄露或遭到破壞。數據庫保護主要是通過併發控制、數據恢復、安全性控制和完整性控制4個方面實現的。

本章主要討論事務的基本概念與特性,並圍繞如何保證事務的ACID(即原子性、一致性、隔離性、持久性)特性詳細闡述併發控制技術,同時簡單介紹數據恢復基本原理和技術。

事務

事務是一系列的數據庫操作,是數據庫應用程序的最小邏輯工作單位。事務處理技術主要包括數據庫恢復技術和併發控制技術,它是恢復和併發控制的基本單位。
事務是用戶定義的一個數據操作序列,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作單元。

事務的開始與結束可以由用戶顯式控制。如果用戶沒有顯式地定義事務,則由DBMS 按默認規定自動劃分事務。在SQL中,定義事務的語句有三條:BEGIN TRANSACTION、COMMIT、ROLLBACK。 事務通常以 BEGIN TRANSACTION 開始,以 COMMIT 或 ROLLBACK結束,具體見以下兩種方式。
(是以 ROLLBACK結束!而不是ROLLBACK TRANSACTION!)

方式一:
BEGIN TRANSACTION
SQL語句1
SQL語句2
COMMIT



commit語句用於提交事務

方式二:
BEGIN TRANSACTION
SQL語句1
SQL語句2
ROLLBACK



方式一中以COMMIT語句作爲結束,表示提交事務的所有操作,即將事務中所有對數據庫的更新寫回到磁盤上的物理數據庫中,該更新永久生效,事務正常結束。
方式二中以ROLLBACK語句作爲結束,表示回滾,即在運行過程中發生了某種故障, 事務不能繼續執行,系統將事務中對數據庫的所有已完成的更新操作全部撤銷,回滾到事務開始時的狀態,事務異常終止。

事務的特徵(ACID)

1、原子性(Atomicity)
事物的原子性是指事務是數據庫的邏輯工作單位,事務的操作要麼都做,要麼都不做,即不允許事務部分完成。

2、一致性(Consistency)
事物的一致性是指事務執行的結果必須是使數據庫從一個一致性狀態轉換到另一個一致性狀態。

3、隔離性(Isolation)
事務的隔離性是指數據庫中一個事務的執行不能受其他事務干擾,即一個事務內部的操作及使用的數據對其他事務是隔離的,併發執行的各個事務不能相互干擾。

4、持久性(Durability)
事務的持久性也稱爲永久性(Permanence),事務一旦提交,對數據庫中的數據的改變就是永久性的,以後的操作或故障不會對事務的操作結果產生影響。

併發控制(併發操作)

在多用戶數據庫系統中,運行的事務很多。事務可以一個一個地串行執行,即每個時刻只有一個事務運行,其他事務必須等待這個事務結束後才能運行,這樣可以有效地保證數據的一致性但是串行執行使許多資源處於空閒狀態。爲了充分利用系統資源,發揮數據庫共享資源的特點,應該允許多個事務並行執行。
(類似於操作系統中的順序執行與併發執行)

併發操作引發的問題

以下三個是併發操作引發的問題,但是!它們沒有破壞數據庫的安全性!

1、丟失更新問題
在這裏插入圖片描述
(T2中的數據A沒有得到更新)

2、讀髒數據
在這裏插入圖片描述
(T1最後ROLLBACK導致C恢復15,但T2並不知道)

3、不可重複讀
在這裏插入圖片描述
(T1中兩次讀出的數不同)
在這裏插入圖片描述


併發控制措施:封鎖技術

在數據庫環境下,進行併發控制的主要技術是封鎖(Locking),就是事務T在對某個數據對象(如表、記錄等)操作之前,先向系統發出請求,對其加鎖。加鎖後事務T就對該數據對象有了一定的控制,在事務T釋放它的鎖之前,其他的事務不能更新此數據對象。

確切的控制由封鎖的類型決定。基本的封鎖類型有兩種:
排他鎖(Exclusive Locks,簡稱X鎖)和共享鎖(Share Locks,簡稱S鎖)。

1、排他鎖
排他鎖又稱爲寫鎖。 若事務T對數據對象A加上X鎖,則只允許T讀取和修改,其他任何事務都不能再對/加任何類型的鎖, 直到T釋放A上的鎖。這就保證了其他事務在T釋放S上的鎖之前不能再讀取和修改A。

2、共享鎖
共享鎖又稱爲讀鎖。 若事務T對數據對象A加上S鎖,則事務T可以讀但不能修改,其他事務只能再對A加S鎖,而不能加X鎖, 直到T釋放A上的S鎖。這就保證了其他事務可以讀N,但在T釋放A上的S鎖之前不能對A進行任何修改。
在這裏插入圖片描述

封鎖協議

在運用封鎖方法對數據對象加鎖時,還需要約定一些規則,如何時申請加鎖、申請鎖的類型、持鎖時間、何時釋放封鎖等,我們稱這些規則爲封鎖協議(Locking Protocol) 對封鎖方式規定不同的規則,就形成了各種不同的封鎖協議,不同的封鎖協議又可以防止不同的錯誤發生。

1、一級封鎖協議(修改數據前加X鎖:解決丟失修改)
一級封鎖協議是:事務T在修改數據A之前,必須先對其加X鎖,直到事務結束才釋放。事務結束包括正常結束(COMMIT)和非正常結束(ROLLBACK)。

一級封鎖協議可防止“丟失修改”所產生的數據不一致性問題,並保證事務T是可恢復的。

在一級封鎖協議中,如果僅僅是讀數據而不對其進行修改,是不需要加鎖的,所以它不能保證可重複讀和不讀“髒”數據。

(在該事務結束後就釋放X鎖)

2、二級封鎖協議(一級+讀取數據前加S鎖:解決讀“髒數據”)
一級封鎖協議僅在修改數據之前對其加鎖,而二級封鎖協議則在一級封鎖協議的基礎上,加上了事務T在讀取數據R之前必須先對其加S鎖,讀完後即可釋放S鎖的要求。

(加了X鎖後不能再加其它任意鎖,直到X鎖被釋放)

二級封鎖協議除防止了丟失修改,還可進一步防止讀“髒”數據。

3、三級封鎖協議(一級+二級+:解決不可重複讀)
併發操作所帶來的三種數據不一致性問題,通過一級封鎖協議和二級封鎖協議已分別解決了丟失修改和讀“髒數據”的問題。如果要解決不可重複讀的問題則需要三級封鎖協議。

三級封鎖協議是:在一級封鎖協議的基礎上加上事務T在讀取數據R之前必須先對其加S鎖,並且直到事務結束才釋放。

說明:二級與三級封鎖協議的區別在於S鎖釋放的時間:二級是在操作結束後釋放,三級是在事務結束後釋放。

在這裏插入圖片描述

併發調度的可串行性

事務的執行次序稱爲“調度”。如果多個事務依次執行,則稱爲事務的串行調度。如果利用分時的方法,同時處理多個事務,則稱爲事務的併發調度。

多個事務的併發執行是正確的,當且僅當其結果與按某一順序的串行執行的結果相同時,我們稱這種調度策略爲可串行化的調度。(可串行化調度與不可串行化調度)

串行調度和可串行化調度不是一個東西!串行調度就是多個事務依次執行,而可串行化調度是多個事務併發執行,它結果與某一順序的串行執行的結果相同

(因爲多個事務併發調度時,可能的併發調度數目遠遠大於n!所以需要引入可串行性來保證併發事務的正確性

可串行性是併發事務正確性的準則。 這個準則規定,一個給定的併發調度,當且僅當它是可串行化的時,才認爲是正確的調度。

兩段鎖協議

兩段鎖協議就是保證併發調度可串行性的一種封鎖協議。

兩段鎖就是把事務分成了獲得鎖釋放鎖,獲得鎖的過程中不能出現釋放鎖的操作,同樣,在釋放鎖的過程中也不能出現有獲得鎖的操作!

在這裏插入圖片描述
某個併發事務遵守兩段鎖協議則它是可串行化調度,但不一定所有事務都符合兩段鎖協議!

(事務遵守兩段鎖協議是可串行化調度的充分條件:即:遵守兩段鎖協議->可串行化調度,反之不成立)
必要條件是推出的結論,充分條件是推出結論的前提

此外,要注意兩段鎖協議和防止死鎖的一次封鎖法的異同之處

一次封鎖法: 要求每個事務必須一次將所有要使用的數據全部加鎖,否則就不能繼續執行。因此,一次封鎖法遵守兩段鎖協議。但是兩段鎖協議並不要求事務必須一次將所有要使用的數據全部加鎖,因此遵守兩段鎖協議的事務仍然可能發生死鎖。

數據恢復

雖然數據庫系統中已採取一定的措施來防止數據庫的安全性和完整性遭到破壞,保證併發事務的正確執行,但數據庫中的數據仍然無法保證絕對不遭受破壞,如計算機系統中硬件的故障、軟件的錯誤、操作員的失誤、惡意的破壞等都有可能發生,這些故障的發生會影響數據庫數據的正確性,甚至可能破壞數據庫,使數據庫中的數據全部或部分丟失。
因此,系統必須具有檢測故障並把數據從錯誤狀態恢復到某一正確狀態的功能,這就是數據庫的恢復。

數據庫故障的類型

1、事務內部故障
2、系統故障
3、介質故障
在這裏插入圖片描述


4、計算機病毒

總結各類故障,對數據庫的影響通常有兩種可能性:一是數據庫本身被破壞;二是數據庫沒有破壞,但數據可能不正確。

數據庫恢復的基本原理和技術

數據庫恢復的基本原理十分簡單,就是數據的冗餘。 數據庫中任何一部分被破壞的或不正確的數據都可以利用存儲在系統其他地方的冗餘數據來修復。因此恢復系統應該提供兩個關鍵問題的解決辦法:一是如何建立冗餘數據,即對可能發生的故障做某些準備二是如何利用這些冗餘數據實施數據庫恢復。

1、建立冗餘數據
最常用的技術:數據轉儲、登記日誌文件。(常常結合在一起使用)
1)數據轉儲
數據轉儲是數據庫恢復中採用的基本技術。轉儲,即DBA定期地將整個數據庫複製到磁帶或另一個磁盤上保存起來的過程。這些備用的數據文本稱爲後備副本。


轉儲是十分耗費時間和資源的,不能頻繁進行。DBA應該根據數據庫使用情況確定 一個適當的轉儲週期。

(轉儲可分爲靜態轉儲和動態轉儲)

  1. 登記日誌文件
    日誌文件是用來**記錄事務對數據庫的更新操作的文件。**它包含數據庫每次被修改項目的舊值和新值,目的是爲數據庫的恢復保留依據。不同的數據庫系統採用的日誌文件格式並不完全一樣。概括起來,日誌文件主要有兩種格式:以記錄爲單位的日誌文件和以數據塊爲單位的日誌文件。

爲保證數據庫是可恢復的,登記日誌文件時必須遵循兩條原則:登記的次序嚴格按併發事務執行的時間次序;必須先寫日誌文件,後寫數據庫。

2、實施數據庫恢復
當系統運行過程中發生故障時,利用數據庫後備副本和日誌文件就可以將數據庫恢復策略到故障前的某個一致性狀態。不同的故障其恢復策略和方法是不一樣的。

1) 事務故障的恢復
事務故障是指事務在運行至正常終止點前被終止,這時恢復子系統應利用日誌文件撤銷此事務已對數據庫進行的修改。事務故障的恢復是由系統自動完成的,不需要用戶干預。

2) 系統故障的恢復
系統故障造成數據庫不一致狀態的原因有兩個:一是未完成事務對數據庫的更新可能已寫入數據庫;二是已提交事務對數據庫的更新可能還留在緩衝區沒來得及寫入數據庫。 因此,恢復操作就是要撤銷故障發生時未完成的事務,重做已完成的事務。

3) 介質故障的恢復
發生介質故障後,磁盤上的物理數據和日誌文件被破壞,這是最嚴重的一種故障。 恢復方法是重裝數據庫後備副本,然後重做已完成的事務。
在這裏插入圖片描述

在這裏插入圖片描述
練習題:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章