


用日志解決SQL Server常見四大故障
添加時(shí)間:2014-3-25 14:56:47
添加:
思海網(wǎng)絡(luò)
當(dāng)系統(tǒng)出現(xiàn)故障時(shí),只要存在數(shù)據(jù)日志那么就可以利用它來(lái)恢復(fù)數(shù)據(jù)解決數(shù)據(jù)庫(kù)故障。作為SQL Server數(shù)據(jù)庫(kù)管理員,了解數(shù)據(jù)日志文件的作用,以及如何利用它來(lái)解決一些數(shù)據(jù)庫(kù)的常見故障,這非常重要。既然事務(wù)日志這么重要,那么他到底可以用來(lái)做什么事情呢?口說(shuō)無(wú)憑,筆者這里就跟大家說(shuō)說(shuō)事務(wù)日志到底可以用來(lái)解決什么故障。
故障一:服務(wù)器意外關(guān)閉造成的損失
俗話說(shuō),天又不測(cè)風(fēng)云。數(shù)據(jù)庫(kù)服務(wù)器如果因?yàn)橥蝗粩嚯娀蛘咂渌恍┰蛞馔猱?dāng)機(jī)時(shí),再重新啟動(dòng)服務(wù)器后會(huì)出現(xiàn)一些數(shù)據(jù)的損失。這主要是因?yàn)閿?shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)生更改后,并不會(huì)在第一時(shí)間就把數(shù)據(jù)寫入到硬盤中。為了提高數(shù)據(jù)庫(kù)的運(yùn)行效率,往往是先把數(shù)據(jù)寫入到數(shù)據(jù)高速緩存中;同時(shí)把更改的情況寫入到事務(wù)日志中。等到一定的情況數(shù)據(jù)庫(kù)系統(tǒng)才會(huì)把數(shù)據(jù)寫入到硬盤文件中。
此時(shí),如果數(shù)據(jù)庫(kù)服務(wù)器系統(tǒng)突然發(fā)生故障,數(shù)據(jù)庫(kù)系統(tǒng)就有可能還沒(méi)有把緩存中的修改后的數(shù)據(jù)寫入到硬盤中,即數(shù)據(jù)文件內(nèi)有未完成事務(wù)所做的修改。如果確實(shí)有這種情況,則當(dāng)啟動(dòng)SQL Server實(shí)例時(shí),如果沒(méi)有事務(wù)日志或者事務(wù)日志損壞時(shí),修改后的數(shù)據(jù)就無(wú)法恢復(fù)過(guò)來(lái)了。但是,如果當(dāng)事務(wù)日志可用的話,則當(dāng)實(shí)例啟動(dòng)時(shí),系統(tǒng)會(huì)丟每個(gè)數(shù)據(jù)庫(kù)執(zhí)行恢復(fù)操作。前滾日至中記錄的、可能尚未寫入數(shù)據(jù)文件的每個(gè)修改。在事務(wù)日志中找到的每個(gè)未完成的事務(wù)都將回滾,以確保數(shù)據(jù)庫(kù)數(shù)據(jù)的完整性。
所以當(dāng)數(shù)據(jù)庫(kù)服務(wù)器意外故障時(shí),數(shù)據(jù)庫(kù)管理員最好能夠確認(rèn)一下事務(wù)日志是否可用。如果事務(wù)日志已經(jīng)損壞,那么就需要先恢復(fù)事務(wù)日志然后再重新啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例。否則的話,數(shù)據(jù)庫(kù)實(shí)例在重新啟動(dòng)時(shí)不能夠正常恢復(fù)數(shù)據(jù)。這一點(diǎn)在遇到服務(wù)器突發(fā)行的故障時(shí)一定要注意。否則的話,很可能破壞數(shù)據(jù)庫(kù)數(shù)據(jù)的完整性。
關(guān)鍵字: select 子表樹 企業(yè)管理器 DBCC PAGE REVERT
本文將給大家講解如何通過(guò)事務(wù)日志解決SQL Server常見四大故障,包括服務(wù)器意外關(guān)閉造成的損失、解決備份數(shù)據(jù)庫(kù)的數(shù)據(jù)同步問(wèn)題等等。
故障二:解決備份數(shù)據(jù)庫(kù)的數(shù)據(jù)同步問(wèn)題
有時(shí)候出于數(shù)據(jù)庫(kù)高可用性的目的,需要在生產(chǎn)服務(wù)器之外的地方再部署一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器。當(dāng)生產(chǎn)服務(wù)器出現(xiàn)故障不可用時(shí),則可以馬上啟用這個(gè)備用的服務(wù)器。故就需要保證生產(chǎn)服務(wù)器與備用服務(wù)器之間數(shù)據(jù)的同步。那么SQL Server數(shù)據(jù)庫(kù)是通過(guò)什么技術(shù)來(lái)達(dá)到這個(gè)生產(chǎn)服務(wù)器與備份服務(wù)器之間的數(shù)據(jù)同步的呢?簡(jiǎn)單的說(shuō),就是通過(guò)這個(gè)事務(wù)日志的復(fù)制來(lái)實(shí)現(xiàn)數(shù)據(jù)同步的。具體的來(lái)說(shuō),SQL Server數(shù)據(jù)庫(kù)提供了兩種解決方案,分別為數(shù)據(jù)鏡像與日志傳送。這兩個(gè)方案都是在事務(wù)日志復(fù)制的基礎(chǔ)上來(lái)實(shí)現(xiàn)的。
在日志傳送方案中,生產(chǎn)服務(wù)器將生產(chǎn)數(shù)據(jù)庫(kù)的活動(dòng)事務(wù)日志發(fā)送到一個(gè)或多個(gè)目標(biāo)服務(wù)器。每個(gè)輔助服務(wù)器將該日志還原為其本地的輔助數(shù)據(jù)庫(kù),從而實(shí)現(xiàn)備用服務(wù)器與生產(chǎn)服務(wù)器之間數(shù)據(jù)的一致性。使用日志傳送,您可以自動(dòng)將“主服務(wù)器”實(shí)例上“主數(shù)據(jù)庫(kù)”內(nèi)的事務(wù)日志備份發(fā)送到單獨(dú)“輔助服務(wù)器”實(shí)例上的一個(gè)或多個(gè)“輔助數(shù)據(jù)庫(kù)”。事務(wù)日志備份分別應(yīng)用于每個(gè)輔助數(shù)據(jù)庫(kù)。可選的第三個(gè)服務(wù)器實(shí)例(稱為“監(jiān)shi服務(wù)器”)記錄備份和還原操作的歷史記錄及狀態(tài),還可以在無(wú)法按計(jì)劃執(zhí)行這些操作時(shí)引發(fā)警報(bào)。日志傳送配置中的主服務(wù)器是作為生產(chǎn)服務(wù)器的 SQL Server 數(shù)據(jù)庫(kù)引擎實(shí)例。主數(shù)據(jù)庫(kù)是主服務(wù)器上希望備份到其他服務(wù)器的數(shù)據(jù)庫(kù)。通過(guò)數(shù)據(jù)庫(kù)進(jìn)行的所有日志傳送配置管理都是在主數(shù)據(jù)庫(kù)中執(zhí)行的。另外需要注意的是,如果采用日志傳送方案對(duì)于生產(chǎn)服務(wù)器的工作模式有限制。生產(chǎn)數(shù)據(jù)庫(kù)必須使用完整恢復(fù)模式或大容量日志恢復(fù)模式。如果將數(shù)據(jù)庫(kù)切換為簡(jiǎn)單恢復(fù)模式會(huì)導(dǎo)致日志傳送停止工作。
一臺(tái)備用服務(wù)器可以包含多臺(tái)不同生產(chǎn)服務(wù)器中數(shù)據(jù)庫(kù)的備份副本。例如,某個(gè)集團(tuán)公司可能有三臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,每臺(tái)服務(wù)器都運(yùn)行關(guān)鍵數(shù)據(jù)庫(kù)系統(tǒng)。在這種情況下,可以只使用一臺(tái)輔助服務(wù)器,而不必使用三臺(tái)單獨(dú)的輔助服務(wù)器。三個(gè)主系統(tǒng)上的備份都可以加載到這個(gè)備份系統(tǒng)中,從而減少所需的資源數(shù)量并節(jié)省開支,也可以數(shù)據(jù)庫(kù)管理員的工作量。
關(guān)鍵字: select 子表樹 企業(yè)管理器 DBCC PAGE REVERT
本文將給大家講解如何通過(guò)事務(wù)日志解決SQL Server常見四大故障,包括服務(wù)器意外關(guān)閉造成的損失、解決備份數(shù)據(jù)庫(kù)的數(shù)據(jù)同步問(wèn)題等等。
另外也可以通過(guò)數(shù)據(jù)庫(kù)鏡像方案中來(lái)解決生產(chǎn)服務(wù)器與備用服務(wù)器之間的數(shù)據(jù)同步問(wèn)題。生產(chǎn)數(shù)據(jù)庫(kù)的每次更新都在獨(dú)立的、完整的備份數(shù)據(jù)庫(kù)中立即重新生成。主體服務(wù)器實(shí)例立即將每個(gè)日志記錄發(fā)送到鏡像服務(wù)器實(shí)例,鏡像服務(wù)器實(shí)例將傳入的日志記錄應(yīng)用于鏡像數(shù)據(jù)庫(kù),從而將其繼續(xù)前滾。“數(shù)據(jù)庫(kù)鏡像”是用于提高數(shù)據(jù)庫(kù)可用性的首選軟件解決方案。鏡像基于每個(gè)數(shù)據(jù)庫(kù)實(shí)現(xiàn),并且只適用于使用完整恢復(fù)模式的數(shù)據(jù)庫(kù)。簡(jiǎn)單恢復(fù)模式和大容量日志恢復(fù)模式不支持?jǐn)?shù)據(jù)庫(kù)鏡像。因此,所有大容量操作始終被完整地記入日志。數(shù)據(jù)庫(kù)鏡像可使用任意支持的數(shù)據(jù)庫(kù)兼容級(jí)別。在“數(shù)據(jù)庫(kù)鏡像模式”中,主體服務(wù)器和鏡像服務(wù)器作為伙伴進(jìn)行通信和協(xié)作。兩個(gè)伙伴在會(huì)話中扮演互補(bǔ)的角色:主體角色(生產(chǎn)服務(wù)器)和鏡像角色(備份服務(wù)器)。在任何給定的時(shí)間,都是一個(gè)伙伴扮演生產(chǎn)服務(wù)器角色,另一個(gè)伙伴扮演備用服務(wù)器角色。如果生產(chǎn)服務(wù)器角色出現(xiàn)故障時(shí),則備份服務(wù)器角色馬上會(huì)頂替出現(xiàn)故障的生產(chǎn)服務(wù)器角色,轉(zhuǎn)變?yōu)樯a(chǎn)服務(wù)器角色。從而實(shí)現(xiàn)數(shù)據(jù)庫(kù)的高可用性。
數(shù)據(jù)庫(kù)鏡像方案有兩種鏡像運(yùn)行模式。一種是“高安全性模式”,它支持同步操作。在高安全性模式下,當(dāng)會(huì)話開始時(shí),鏡像服務(wù)器將使鏡像數(shù)據(jù)庫(kù)盡快與主體數(shù)據(jù)庫(kù)同步,一旦同步了數(shù)據(jù)庫(kù),事務(wù)將在伙伴雙方處提交,這會(huì)延長(zhǎng)事務(wù)滯后時(shí)間。第二種運(yùn)行模式,即高性能模式,它與第一種模式的主要差異就在于異步運(yùn)行。鏡像服務(wù)器嘗試與主體服務(wù)器發(fā)送的日志記錄保持同步。鏡像數(shù)據(jù)庫(kù)可能稍微滯后于主體數(shù)據(jù)庫(kù)。但是,數(shù)據(jù)庫(kù)之間的時(shí)間間隔通常很小。但是,如果主體服務(wù)器的工作負(fù)荷過(guò)高或鏡像服務(wù)器系統(tǒng)的負(fù)荷過(guò)高,則時(shí)間間隔會(huì)增大。在高性能模式中,主體服務(wù)器向鏡像服務(wù)器發(fā)送日志記錄之后,會(huì)立即再向客戶端發(fā)送一條確認(rèn)消息。它不會(huì)等待鏡像服務(wù)器的確認(rèn)。這意味著事務(wù)不需要等待鏡像服務(wù)器將日志寫入磁盤便可提交。此異步操作允許主體服務(wù)器在事務(wù)滯后時(shí)間最小的條件下運(yùn)行,但可能會(huì)丟失某些數(shù)據(jù)。具體采用哪種模式,則需要數(shù)據(jù)庫(kù)管理員根據(jù)企業(yè)對(duì)待數(shù)據(jù)損失的態(tài)度與工作負(fù)荷等來(lái)確定。
關(guān)鍵字: select 子表樹 企業(yè)管理器 DBCC PAGE REVERT
本文將給大家講解如何通過(guò)事務(wù)日志解決SQL Server常見四大故障,包括服務(wù)器意外關(guān)閉造成的損失、解決備份數(shù)據(jù)庫(kù)的數(shù)據(jù)同步問(wèn)題等等。
可見現(xiàn)在可用的備份服務(wù)器與生產(chǎn)服務(wù)器之間的數(shù)據(jù)同步解決方案都是基于事務(wù)日志來(lái)實(shí)現(xiàn)的。
故障三:解決數(shù)據(jù)一致性問(wèn)題
假設(shè)現(xiàn)在有這么一種情況。在一個(gè)銀行系統(tǒng)中,某個(gè)用戶需要轉(zhuǎn)帳。這個(gè)轉(zhuǎn)帳作業(yè)主要是通過(guò)兩個(gè)步驟來(lái)完成。第一個(gè)步驟就是扣減用戶帳戶中的金額;第二個(gè)步驟是把錢轉(zhuǎn)入到另外一個(gè)用戶那里。現(xiàn)在如果在轉(zhuǎn)帳的過(guò)程中,第一步成功了,但是第二個(gè)步驟因?yàn)槟撤N原因出錯(cuò)了。如用戶提供的帳戶名字與實(shí)際轉(zhuǎn)帳的帳戶名字不符,則第二個(gè)操作就會(huì)失敗。此時(shí)整個(gè)轉(zhuǎn)帳操作就會(huì)以失敗而告終。但是現(xiàn)在的問(wèn)題是,第一個(gè)扣減的動(dòng)作在數(shù)據(jù)庫(kù)zhon給已經(jīng)完成了。而實(shí)際卻是沒(méi)有轉(zhuǎn)帳成功,就救造成了數(shù)據(jù)一致性的問(wèn)題。
實(shí)際過(guò)程中如果應(yīng)用程序發(fā)出 ROLLBACK 語(yǔ)句,或者數(shù)據(jù)庫(kù)引擎檢測(cè)到錯(cuò)誤,就使用日志記錄回滾未完成的事務(wù)所做的修改。也就是說(shuō),當(dāng)?shù)诙䝼(gè)操作失敗的話,應(yīng)用程序要發(fā)出一個(gè)ROLLBACK 語(yǔ)句,利用事務(wù)日志回滾功能,恢復(fù)第一步的操作。也就是說(shuō),把扣減金額的操作進(jìn)行恢復(fù),從而實(shí)現(xiàn)數(shù)據(jù)的一致性。類似的應(yīng)用,在數(shù)據(jù)庫(kù)開發(fā)過(guò)程中很頻繁。
故障四:數(shù)據(jù)庫(kù)時(shí)點(diǎn)恢復(fù)的問(wèn)題
如現(xiàn)在遇到這么一種故障。數(shù)據(jù)庫(kù)系統(tǒng)在上午10點(diǎn)突然發(fā)現(xiàn)故障,啟動(dòng)不起來(lái)了。而數(shù)據(jù)庫(kù)系統(tǒng)是在昨天晚上12點(diǎn)剛做完一個(gè)完全備份。在這種情況下,如果只是從完全備份中恢復(fù)數(shù)據(jù)的話,只能夠恢復(fù)到昨天晚上12點(diǎn)的數(shù)據(jù)。那從昨天晚上12點(diǎn)到今天上午10點(diǎn)的數(shù)據(jù)就不能夠恢復(fù)了嗎?
其實(shí)不然。因?yàn)橛脩粼趯?duì)數(shù)據(jù)庫(kù)做的任何一個(gè)修改都會(huì)保存在事務(wù)日志當(dāng)中。為此只要事務(wù)日志不損壞的情況下,數(shù)據(jù)庫(kù)管理員可以把數(shù)據(jù)恢復(fù)到上午10點(diǎn)那個(gè)時(shí)刻的數(shù)據(jù)。具體的操作方法很簡(jiǎn)單,就好先利用完全備份文件恢復(fù)數(shù)據(jù)庫(kù)系統(tǒng),此時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)位昨天晚上12點(diǎn)的數(shù)據(jù)。然后再利用日志恢復(fù)功能把數(shù)據(jù)恢復(fù)到今天上午10點(diǎn)的數(shù)據(jù)。可見事務(wù)日志可以幫助管理員把數(shù)據(jù)恢復(fù)到某一個(gè)具體的時(shí)點(diǎn)。
關(guān)鍵字:SQL Server、服務(wù)器、數(shù)據(jù)、故障
故障一:服務(wù)器意外關(guān)閉造成的損失
俗話說(shuō),天又不測(cè)風(fēng)云。數(shù)據(jù)庫(kù)服務(wù)器如果因?yàn)橥蝗粩嚯娀蛘咂渌恍┰蛞馔猱?dāng)機(jī)時(shí),再重新啟動(dòng)服務(wù)器后會(huì)出現(xiàn)一些數(shù)據(jù)的損失。這主要是因?yàn)閿?shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)生更改后,并不會(huì)在第一時(shí)間就把數(shù)據(jù)寫入到硬盤中。為了提高數(shù)據(jù)庫(kù)的運(yùn)行效率,往往是先把數(shù)據(jù)寫入到數(shù)據(jù)高速緩存中;同時(shí)把更改的情況寫入到事務(wù)日志中。等到一定的情況數(shù)據(jù)庫(kù)系統(tǒng)才會(huì)把數(shù)據(jù)寫入到硬盤文件中。
此時(shí),如果數(shù)據(jù)庫(kù)服務(wù)器系統(tǒng)突然發(fā)生故障,數(shù)據(jù)庫(kù)系統(tǒng)就有可能還沒(méi)有把緩存中的修改后的數(shù)據(jù)寫入到硬盤中,即數(shù)據(jù)文件內(nèi)有未完成事務(wù)所做的修改。如果確實(shí)有這種情況,則當(dāng)啟動(dòng)SQL Server實(shí)例時(shí),如果沒(méi)有事務(wù)日志或者事務(wù)日志損壞時(shí),修改后的數(shù)據(jù)就無(wú)法恢復(fù)過(guò)來(lái)了。但是,如果當(dāng)事務(wù)日志可用的話,則當(dāng)實(shí)例啟動(dòng)時(shí),系統(tǒng)會(huì)丟每個(gè)數(shù)據(jù)庫(kù)執(zhí)行恢復(fù)操作。前滾日至中記錄的、可能尚未寫入數(shù)據(jù)文件的每個(gè)修改。在事務(wù)日志中找到的每個(gè)未完成的事務(wù)都將回滾,以確保數(shù)據(jù)庫(kù)數(shù)據(jù)的完整性。
所以當(dāng)數(shù)據(jù)庫(kù)服務(wù)器意外故障時(shí),數(shù)據(jù)庫(kù)管理員最好能夠確認(rèn)一下事務(wù)日志是否可用。如果事務(wù)日志已經(jīng)損壞,那么就需要先恢復(fù)事務(wù)日志然后再重新啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例。否則的話,數(shù)據(jù)庫(kù)實(shí)例在重新啟動(dòng)時(shí)不能夠正常恢復(fù)數(shù)據(jù)。這一點(diǎn)在遇到服務(wù)器突發(fā)行的故障時(shí)一定要注意。否則的話,很可能破壞數(shù)據(jù)庫(kù)數(shù)據(jù)的完整性。
關(guān)鍵字: select 子表樹 企業(yè)管理器 DBCC PAGE REVERT
本文將給大家講解如何通過(guò)事務(wù)日志解決SQL Server常見四大故障,包括服務(wù)器意外關(guān)閉造成的損失、解決備份數(shù)據(jù)庫(kù)的數(shù)據(jù)同步問(wèn)題等等。
故障二:解決備份數(shù)據(jù)庫(kù)的數(shù)據(jù)同步問(wèn)題
有時(shí)候出于數(shù)據(jù)庫(kù)高可用性的目的,需要在生產(chǎn)服務(wù)器之外的地方再部署一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器。當(dāng)生產(chǎn)服務(wù)器出現(xiàn)故障不可用時(shí),則可以馬上啟用這個(gè)備用的服務(wù)器。故就需要保證生產(chǎn)服務(wù)器與備用服務(wù)器之間數(shù)據(jù)的同步。那么SQL Server數(shù)據(jù)庫(kù)是通過(guò)什么技術(shù)來(lái)達(dá)到這個(gè)生產(chǎn)服務(wù)器與備份服務(wù)器之間的數(shù)據(jù)同步的呢?簡(jiǎn)單的說(shuō),就是通過(guò)這個(gè)事務(wù)日志的復(fù)制來(lái)實(shí)現(xiàn)數(shù)據(jù)同步的。具體的來(lái)說(shuō),SQL Server數(shù)據(jù)庫(kù)提供了兩種解決方案,分別為數(shù)據(jù)鏡像與日志傳送。這兩個(gè)方案都是在事務(wù)日志復(fù)制的基礎(chǔ)上來(lái)實(shí)現(xiàn)的。
在日志傳送方案中,生產(chǎn)服務(wù)器將生產(chǎn)數(shù)據(jù)庫(kù)的活動(dòng)事務(wù)日志發(fā)送到一個(gè)或多個(gè)目標(biāo)服務(wù)器。每個(gè)輔助服務(wù)器將該日志還原為其本地的輔助數(shù)據(jù)庫(kù),從而實(shí)現(xiàn)備用服務(wù)器與生產(chǎn)服務(wù)器之間數(shù)據(jù)的一致性。使用日志傳送,您可以自動(dòng)將“主服務(wù)器”實(shí)例上“主數(shù)據(jù)庫(kù)”內(nèi)的事務(wù)日志備份發(fā)送到單獨(dú)“輔助服務(wù)器”實(shí)例上的一個(gè)或多個(gè)“輔助數(shù)據(jù)庫(kù)”。事務(wù)日志備份分別應(yīng)用于每個(gè)輔助數(shù)據(jù)庫(kù)。可選的第三個(gè)服務(wù)器實(shí)例(稱為“監(jiān)shi服務(wù)器”)記錄備份和還原操作的歷史記錄及狀態(tài),還可以在無(wú)法按計(jì)劃執(zhí)行這些操作時(shí)引發(fā)警報(bào)。日志傳送配置中的主服務(wù)器是作為生產(chǎn)服務(wù)器的 SQL Server 數(shù)據(jù)庫(kù)引擎實(shí)例。主數(shù)據(jù)庫(kù)是主服務(wù)器上希望備份到其他服務(wù)器的數(shù)據(jù)庫(kù)。通過(guò)數(shù)據(jù)庫(kù)進(jìn)行的所有日志傳送配置管理都是在主數(shù)據(jù)庫(kù)中執(zhí)行的。另外需要注意的是,如果采用日志傳送方案對(duì)于生產(chǎn)服務(wù)器的工作模式有限制。生產(chǎn)數(shù)據(jù)庫(kù)必須使用完整恢復(fù)模式或大容量日志恢復(fù)模式。如果將數(shù)據(jù)庫(kù)切換為簡(jiǎn)單恢復(fù)模式會(huì)導(dǎo)致日志傳送停止工作。
一臺(tái)備用服務(wù)器可以包含多臺(tái)不同生產(chǎn)服務(wù)器中數(shù)據(jù)庫(kù)的備份副本。例如,某個(gè)集團(tuán)公司可能有三臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,每臺(tái)服務(wù)器都運(yùn)行關(guān)鍵數(shù)據(jù)庫(kù)系統(tǒng)。在這種情況下,可以只使用一臺(tái)輔助服務(wù)器,而不必使用三臺(tái)單獨(dú)的輔助服務(wù)器。三個(gè)主系統(tǒng)上的備份都可以加載到這個(gè)備份系統(tǒng)中,從而減少所需的資源數(shù)量并節(jié)省開支,也可以數(shù)據(jù)庫(kù)管理員的工作量。
關(guān)鍵字: select 子表樹 企業(yè)管理器 DBCC PAGE REVERT
本文將給大家講解如何通過(guò)事務(wù)日志解決SQL Server常見四大故障,包括服務(wù)器意外關(guān)閉造成的損失、解決備份數(shù)據(jù)庫(kù)的數(shù)據(jù)同步問(wèn)題等等。
另外也可以通過(guò)數(shù)據(jù)庫(kù)鏡像方案中來(lái)解決生產(chǎn)服務(wù)器與備用服務(wù)器之間的數(shù)據(jù)同步問(wèn)題。生產(chǎn)數(shù)據(jù)庫(kù)的每次更新都在獨(dú)立的、完整的備份數(shù)據(jù)庫(kù)中立即重新生成。主體服務(wù)器實(shí)例立即將每個(gè)日志記錄發(fā)送到鏡像服務(wù)器實(shí)例,鏡像服務(wù)器實(shí)例將傳入的日志記錄應(yīng)用于鏡像數(shù)據(jù)庫(kù),從而將其繼續(xù)前滾。“數(shù)據(jù)庫(kù)鏡像”是用于提高數(shù)據(jù)庫(kù)可用性的首選軟件解決方案。鏡像基于每個(gè)數(shù)據(jù)庫(kù)實(shí)現(xiàn),并且只適用于使用完整恢復(fù)模式的數(shù)據(jù)庫(kù)。簡(jiǎn)單恢復(fù)模式和大容量日志恢復(fù)模式不支持?jǐn)?shù)據(jù)庫(kù)鏡像。因此,所有大容量操作始終被完整地記入日志。數(shù)據(jù)庫(kù)鏡像可使用任意支持的數(shù)據(jù)庫(kù)兼容級(jí)別。在“數(shù)據(jù)庫(kù)鏡像模式”中,主體服務(wù)器和鏡像服務(wù)器作為伙伴進(jìn)行通信和協(xié)作。兩個(gè)伙伴在會(huì)話中扮演互補(bǔ)的角色:主體角色(生產(chǎn)服務(wù)器)和鏡像角色(備份服務(wù)器)。在任何給定的時(shí)間,都是一個(gè)伙伴扮演生產(chǎn)服務(wù)器角色,另一個(gè)伙伴扮演備用服務(wù)器角色。如果生產(chǎn)服務(wù)器角色出現(xiàn)故障時(shí),則備份服務(wù)器角色馬上會(huì)頂替出現(xiàn)故障的生產(chǎn)服務(wù)器角色,轉(zhuǎn)變?yōu)樯a(chǎn)服務(wù)器角色。從而實(shí)現(xiàn)數(shù)據(jù)庫(kù)的高可用性。
數(shù)據(jù)庫(kù)鏡像方案有兩種鏡像運(yùn)行模式。一種是“高安全性模式”,它支持同步操作。在高安全性模式下,當(dāng)會(huì)話開始時(shí),鏡像服務(wù)器將使鏡像數(shù)據(jù)庫(kù)盡快與主體數(shù)據(jù)庫(kù)同步,一旦同步了數(shù)據(jù)庫(kù),事務(wù)將在伙伴雙方處提交,這會(huì)延長(zhǎng)事務(wù)滯后時(shí)間。第二種運(yùn)行模式,即高性能模式,它與第一種模式的主要差異就在于異步運(yùn)行。鏡像服務(wù)器嘗試與主體服務(wù)器發(fā)送的日志記錄保持同步。鏡像數(shù)據(jù)庫(kù)可能稍微滯后于主體數(shù)據(jù)庫(kù)。但是,數(shù)據(jù)庫(kù)之間的時(shí)間間隔通常很小。但是,如果主體服務(wù)器的工作負(fù)荷過(guò)高或鏡像服務(wù)器系統(tǒng)的負(fù)荷過(guò)高,則時(shí)間間隔會(huì)增大。在高性能模式中,主體服務(wù)器向鏡像服務(wù)器發(fā)送日志記錄之后,會(huì)立即再向客戶端發(fā)送一條確認(rèn)消息。它不會(huì)等待鏡像服務(wù)器的確認(rèn)。這意味著事務(wù)不需要等待鏡像服務(wù)器將日志寫入磁盤便可提交。此異步操作允許主體服務(wù)器在事務(wù)滯后時(shí)間最小的條件下運(yùn)行,但可能會(huì)丟失某些數(shù)據(jù)。具體采用哪種模式,則需要數(shù)據(jù)庫(kù)管理員根據(jù)企業(yè)對(duì)待數(shù)據(jù)損失的態(tài)度與工作負(fù)荷等來(lái)確定。
關(guān)鍵字: select 子表樹 企業(yè)管理器 DBCC PAGE REVERT
本文將給大家講解如何通過(guò)事務(wù)日志解決SQL Server常見四大故障,包括服務(wù)器意外關(guān)閉造成的損失、解決備份數(shù)據(jù)庫(kù)的數(shù)據(jù)同步問(wèn)題等等。
可見現(xiàn)在可用的備份服務(wù)器與生產(chǎn)服務(wù)器之間的數(shù)據(jù)同步解決方案都是基于事務(wù)日志來(lái)實(shí)現(xiàn)的。
故障三:解決數(shù)據(jù)一致性問(wèn)題
假設(shè)現(xiàn)在有這么一種情況。在一個(gè)銀行系統(tǒng)中,某個(gè)用戶需要轉(zhuǎn)帳。這個(gè)轉(zhuǎn)帳作業(yè)主要是通過(guò)兩個(gè)步驟來(lái)完成。第一個(gè)步驟就是扣減用戶帳戶中的金額;第二個(gè)步驟是把錢轉(zhuǎn)入到另外一個(gè)用戶那里。現(xiàn)在如果在轉(zhuǎn)帳的過(guò)程中,第一步成功了,但是第二個(gè)步驟因?yàn)槟撤N原因出錯(cuò)了。如用戶提供的帳戶名字與實(shí)際轉(zhuǎn)帳的帳戶名字不符,則第二個(gè)操作就會(huì)失敗。此時(shí)整個(gè)轉(zhuǎn)帳操作就會(huì)以失敗而告終。但是現(xiàn)在的問(wèn)題是,第一個(gè)扣減的動(dòng)作在數(shù)據(jù)庫(kù)zhon給已經(jīng)完成了。而實(shí)際卻是沒(méi)有轉(zhuǎn)帳成功,就救造成了數(shù)據(jù)一致性的問(wèn)題。
實(shí)際過(guò)程中如果應(yīng)用程序發(fā)出 ROLLBACK 語(yǔ)句,或者數(shù)據(jù)庫(kù)引擎檢測(cè)到錯(cuò)誤,就使用日志記錄回滾未完成的事務(wù)所做的修改。也就是說(shuō),當(dāng)?shù)诙䝼(gè)操作失敗的話,應(yīng)用程序要發(fā)出一個(gè)ROLLBACK 語(yǔ)句,利用事務(wù)日志回滾功能,恢復(fù)第一步的操作。也就是說(shuō),把扣減金額的操作進(jìn)行恢復(fù),從而實(shí)現(xiàn)數(shù)據(jù)的一致性。類似的應(yīng)用,在數(shù)據(jù)庫(kù)開發(fā)過(guò)程中很頻繁。
故障四:數(shù)據(jù)庫(kù)時(shí)點(diǎn)恢復(fù)的問(wèn)題
如現(xiàn)在遇到這么一種故障。數(shù)據(jù)庫(kù)系統(tǒng)在上午10點(diǎn)突然發(fā)現(xiàn)故障,啟動(dòng)不起來(lái)了。而數(shù)據(jù)庫(kù)系統(tǒng)是在昨天晚上12點(diǎn)剛做完一個(gè)完全備份。在這種情況下,如果只是從完全備份中恢復(fù)數(shù)據(jù)的話,只能夠恢復(fù)到昨天晚上12點(diǎn)的數(shù)據(jù)。那從昨天晚上12點(diǎn)到今天上午10點(diǎn)的數(shù)據(jù)就不能夠恢復(fù)了嗎?
其實(shí)不然。因?yàn)橛脩粼趯?duì)數(shù)據(jù)庫(kù)做的任何一個(gè)修改都會(huì)保存在事務(wù)日志當(dāng)中。為此只要事務(wù)日志不損壞的情況下,數(shù)據(jù)庫(kù)管理員可以把數(shù)據(jù)恢復(fù)到上午10點(diǎn)那個(gè)時(shí)刻的數(shù)據(jù)。具體的操作方法很簡(jiǎn)單,就好先利用完全備份文件恢復(fù)數(shù)據(jù)庫(kù)系統(tǒng),此時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)位昨天晚上12點(diǎn)的數(shù)據(jù)。然后再利用日志恢復(fù)功能把數(shù)據(jù)恢復(fù)到今天上午10點(diǎn)的數(shù)據(jù)。可見事務(wù)日志可以幫助管理員把數(shù)據(jù)恢復(fù)到某一個(gè)具體的時(shí)點(diǎn)。
關(guān)鍵字:SQL Server、服務(wù)器、數(shù)據(jù)、故障
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無(wú)AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解