DBA五大致命失誤:頁(yè)校驗(yàn)被禁用了嗎?
編者注:Robert L Davis是微軟的高級(jí)數(shù)據(jù)庫(kù)管理員和專家,同時(shí)是《SQL Server》雜志的撰稿人,并合著《Pro SQL Server 2008 Mirroring》一書。
SQL Server提供了一項(xiàng)用來(lái)檢測(cè)數(shù)據(jù)損壞、非常關(guān)鍵的內(nèi)置功能,叫做“頁(yè)校驗(yàn)”(page verification)。當(dāng)你運(yùn)行查詢語(yǔ)句,出現(xiàn)煩人的損壞警報(bào)時(shí),正是頁(yè)校驗(yàn)檢測(cè)到了損壞。最重要的是,***把頁(yè)校驗(yàn)選項(xiàng)設(shè)置為新數(shù)據(jù)庫(kù)的默認(rèn)選項(xiàng)。你不需要做任何事情就可以用這個(gè)選項(xiàng)保護(hù)數(shù)據(jù)庫(kù)。
頁(yè)校驗(yàn)和也就是我之前提到過的在備份和恢復(fù)中使用CHECKSUM進(jìn)行的額外檢測(cè)(具體閱讀《DBA 五大致命失誤:你的備份可靠嗎?》)。啟用該選項(xiàng),SQL Server會(huì)計(jì)算整個(gè)頁(yè)面的校驗(yàn)和,把這個(gè)值存于頁(yè)頭。當(dāng)頁(yè)被讀取到內(nèi)存時(shí),SQL Server會(huì)再次計(jì)算校驗(yàn)和,和頁(yè)頭存儲(chǔ)的校驗(yàn)和進(jìn)行比較。如果兩個(gè)校驗(yàn)和不一致,SQL Server就會(huì)認(rèn)為該頁(yè)被損壞,出現(xiàn)錯(cuò)誤824的警報(bào)。如果校驗(yàn)和存儲(chǔ)在頁(yè)頭,用CHECKSUM選項(xiàng)檢測(cè)任何被校驗(yàn)和保護(hù)的的數(shù)據(jù)頁(yè)是否存在損壞,SQL Server會(huì)在備份和恢復(fù)期間進(jìn)行計(jì)算。
在SQL Server的數(shù)據(jù)庫(kù)級(jí)別,可以設(shè)置頁(yè)保護(hù)類型,頁(yè)校驗(yàn)一共有三個(gè)選項(xiàng):CheckSum,Torn Page Detection和None。使用這些選項(xiàng)所花費(fèi)的功夫可能看似微不足道,但如果不使用這些選項(xiàng)可能會(huì)對(duì)數(shù)據(jù)庫(kù)造成災(zāi)難性的影響。只有從SQL Server 2000或更早版本進(jìn)行升級(jí)時(shí),你才需要查看一下選項(xiàng)設(shè)置,以確保啟用了頁(yè)驗(yàn)證來(lái)保護(hù)數(shù)據(jù)庫(kù)。***是選擇CHECKSUM作為頁(yè)校驗(yàn)選項(xiàng),這也是SQL Server 2005及以后版本的默認(rèn)選項(xiàng)。SQL Server 2000的默認(rèn)選項(xiàng)Torn Page Detection;在此之前,你無(wú)法配置頁(yè)校驗(yàn)。換而言之,NONE從來(lái)都不是頁(yè)校驗(yàn)的默認(rèn)選項(xiàng)。如果你的數(shù)據(jù)庫(kù)禁用頁(yè)校驗(yàn),那一定是有人更改了設(shè)置。
我認(rèn)為,如果DBA把頁(yè)校驗(yàn)選項(xiàng)選擇為NONE,這要不就是故意破壞,要不就是水平太低。無(wú)論是何種情況,這名DBA都不應(yīng)允許管理SQL Server。這個(gè)錯(cuò)誤能夠并且應(yīng)該讓你被炒魷魚,因?yàn)檫@是故意的行為。