IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁數(shù)據(jù)庫MSSQL → 通過事務(wù)日志解決SQL Server常見四大故障

通過事務(wù)日志解決SQL Server常見四大故障

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

當(dāng)系統(tǒng)出現(xiàn)故障時,只要存在數(shù)據(jù)日志那么就可以利用它來恢復(fù)數(shù)據(jù)解決數(shù)據(jù)庫故障。作為sql server數(shù)據(jù)庫管理員,了解數(shù)據(jù)日志文件的作用,以及如何利用它來解決一些數(shù)據(jù)庫的常見故障,這非常重要。既然事務(wù)日志這么重要,那么他到底可以用來做什么事情呢?口說無憑,筆者這里就跟大家說說事務(wù)日志到底可以用來解決什么故障。

故障一:服務(wù)器意外關(guān)閉造成的損失

俗話說,天又不測風(fēng)云。數(shù)據(jù)庫服務(wù)器如果因為突然斷電或者其他一些原因意外當(dāng)機時,再重新啟動服務(wù)器后會出現(xiàn)一些數(shù)據(jù)的損失。這主要是因為數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生更改后,并不會在第一時間就把數(shù)據(jù)寫入到硬盤中。為了提高數(shù)據(jù)庫的運行效率,往往是先把數(shù)據(jù)寫入到數(shù)據(jù)高速緩存中;同時把更改的情況寫入到事務(wù)日志中。等到一定的情況數(shù)據(jù)庫系統(tǒng)才會把數(shù)據(jù)寫入到硬盤文件中。

此時,如果數(shù)據(jù)庫服務(wù)器系統(tǒng)突然發(fā)生故障,數(shù)據(jù)庫系統(tǒng)就有可能還沒有把緩存中的修改后的數(shù)據(jù)寫入到硬盤中,即數(shù)據(jù)文件內(nèi)有未完成事務(wù)所做的修改。如果確實有這種情況,則當(dāng)啟動SQL Server實例時,如果沒有事務(wù)日志或者事務(wù)日志損壞時,修改后的數(shù)據(jù)就無法恢復(fù)過來了。但是,如果當(dāng)事務(wù)日志可用的話,則當(dāng)實例啟動時,系統(tǒng)會丟每個數(shù)據(jù)庫執(zhí)行恢復(fù)操作。前滾日至中記錄的、可能尚未寫入數(shù)據(jù)文件的每個修改。在事務(wù)日志中找到的每個未完成的事務(wù)都將回滾,以確保數(shù)據(jù)庫數(shù)據(jù)的完整性。

所以當(dāng)數(shù)據(jù)庫服務(wù)器意外故障時,數(shù)據(jù)庫管理員最好能夠確認一下事務(wù)日志是否可用。如果事務(wù)日志已經(jīng)損壞,那么就需要先恢復(fù)事務(wù)日志然后再重新啟動數(shù)據(jù)庫實例。否則的話,數(shù)據(jù)庫實例在重新啟動時不能夠正常恢復(fù)數(shù)據(jù)。這一點在遇到服務(wù)器突發(fā)行的故障時一定要注意。否則的話,很可能破壞數(shù)據(jù)庫數(shù)據(jù)的完整性。

故障二:解決備份數(shù)據(jù)庫的數(shù)據(jù)同步問題

有時候出于數(shù)據(jù)庫高可用性的目的,需要在生產(chǎn)服務(wù)器之外的地方再部署一臺數(shù)據(jù)庫服務(wù)器。當(dāng)生產(chǎn)服務(wù)器出現(xiàn)故障不可用時,則可以馬上啟用這個備用的服務(wù)器。故就需要保證生產(chǎn)服務(wù)器與備用服務(wù)器之間數(shù)據(jù)的同步。那么SQL Server數(shù)據(jù)庫是通過什么技術(shù)來達到這個生產(chǎn)服務(wù)器與備份服務(wù)器之間的數(shù)據(jù)同步的呢?簡單的說,就是通過這個事務(wù)日志的復(fù)制來實現(xiàn)數(shù)據(jù)同步的。具體的來說,SQL Server數(shù)據(jù)庫提供了兩種解決方案,分別為數(shù)據(jù)鏡像與日志傳送。這兩個方案都是在事務(wù)日志復(fù)制的基礎(chǔ)上來實現(xiàn)的。

在日志傳送方案中,生產(chǎn)服務(wù)器將生產(chǎn)數(shù)據(jù)庫的活動事務(wù)日志發(fā)送到一個或多個目標服務(wù)器。每個輔助服務(wù)器將該日志還原為其本地的輔助數(shù)據(jù)庫,從而實現(xiàn)備用服務(wù)器與生產(chǎn)服務(wù)器之間數(shù)據(jù)的一致性。使用日志傳送,您可以自動將"主服務(wù)器"實例上"主數(shù)據(jù)庫"內(nèi)的事務(wù)日志備份發(fā)送到單獨"輔助服務(wù)器"實例上的一個或多個"輔助數(shù)據(jù)庫"。事務(wù)日志備份分別應(yīng)用于每個輔助數(shù)據(jù)庫?蛇x的第三個服務(wù)器實例(稱為"監(jiān)shi服務(wù)器")記錄備份和還原操作的歷史記錄及狀態(tài),還可以在無法按計劃執(zhí)行這些操作時引發(fā)警報。日志傳送配置中的主服務(wù)器是作為生產(chǎn)服務(wù)器的 SQL Server 數(shù)據(jù)庫引擎實例。主數(shù)據(jù)庫是主服務(wù)器上希望備份到其他服務(wù)器的數(shù)據(jù)庫。通過數(shù)據(jù)庫進行的所有日志傳送配置管理都是在主數(shù)據(jù)庫中執(zhí)行的。另外需要注意的是,如果采用日志傳送方案對于生產(chǎn)服務(wù)器的工作模式有限制。生產(chǎn)數(shù)據(jù)庫必須使用完整恢復(fù)模式或大容量日志恢復(fù)模式。如果將數(shù)據(jù)庫切換為簡單恢復(fù)模式會導(dǎo)致日志傳送停止工作。

一臺備用服務(wù)器可以包含多臺不同生產(chǎn)服務(wù)器中數(shù)據(jù)庫的備份副本。例如,某個集團公司可能有三臺數(shù)據(jù)庫服務(wù)器,每臺服務(wù)器都運行關(guān)鍵數(shù)據(jù)庫系統(tǒng)。在這種情況下,可以只使用一臺輔助服務(wù)器,而不必使用三臺單獨的輔助服務(wù)器。三個主系統(tǒng)上的備份都可以加載到這個備份系統(tǒng)中,從而減少所需的資源數(shù)量并節(jié)省開支,也可以數(shù)據(jù)庫管理員的工作量。

另外也可以通過數(shù)據(jù)庫鏡像方案中來解決生產(chǎn)服務(wù)器與備用服務(wù)器之間的數(shù)據(jù)同步問題。生產(chǎn)數(shù)據(jù)庫的每次更新都在獨立的、完整的備份數(shù)據(jù)庫中立即重新生成。主體服務(wù)器實例立即將每個日志記錄發(fā)送到鏡像服務(wù)器實例,鏡像服務(wù)器實例將傳入的日志記錄應(yīng)用于鏡像數(shù)據(jù)庫,從而將其繼續(xù)前滾。"數(shù)據(jù)庫鏡像"是用于提高數(shù)據(jù)庫可用性的首選軟件解決方案。鏡像基于每個數(shù)據(jù)庫實現(xiàn),并且只適用于使用完整恢復(fù)模式的數(shù)據(jù)庫。簡單恢復(fù)模式和大容量日志恢復(fù)模式不支持數(shù)據(jù)庫鏡像。因此,所有大容量操作始終被完整地記入日志。數(shù)據(jù)庫鏡像可使用任意支持的數(shù)據(jù)庫兼容級別。在"數(shù)據(jù)庫鏡像模式"中,主體服務(wù)器和鏡像服務(wù)器作為伙伴進行通信和協(xié)作。兩個伙伴在會話中扮演互補的角色:主體角色(生產(chǎn)服務(wù)器)和鏡像角色(備份服務(wù)器)。在任何給定的時間,都是一個伙伴扮演生產(chǎn)服務(wù)器角色,另一個伙伴扮演備用服務(wù)器角色。如果生產(chǎn)服務(wù)器角色出現(xiàn)故障時,則備份服務(wù)器角色馬上會頂替出現(xiàn)故障的生產(chǎn)服務(wù)器角色,轉(zhuǎn)變?yōu)樯a(chǎn)服務(wù)器角色。從而實現(xiàn)數(shù)據(jù)庫的高可用性。

數(shù)據(jù)庫鏡像方案有兩種鏡像運行模式。一種是"高安全性模式",它支持同步操作。在高安全性模式下,當(dāng)會話開始時,鏡像服務(wù)器將使鏡像數(shù)據(jù)庫盡快與主體數(shù)據(jù)庫同步,一旦同步了數(shù)據(jù)庫,事務(wù)將在伙伴雙方處提交,這會延長事務(wù)滯后時間。第二種運行模式,即高性能模式,它與第一種模式的主要差異就在于異步運行。鏡像服務(wù)器嘗試與主體服務(wù)器發(fā)送的日志記錄保持同步。鏡像數(shù)據(jù)庫可能稍微滯后于主體數(shù)據(jù)庫。但是,數(shù)據(jù)庫之間的時間間隔通常很小。但是,如果主體服務(wù)器的工作負荷過高或鏡像服務(wù)器系統(tǒng)的負荷過高,則時間間隔會增大。在高性能模式中,主體服務(wù)器向鏡像服務(wù)器發(fā)送日志記錄之后,會立即再向客戶端發(fā)送一條確認消息。它不會等待鏡像服務(wù)器的確認。這意味著事務(wù)不需要等待鏡像服務(wù)器將日志寫入磁盤便可提交。此異步操作允許主體服務(wù)器在事務(wù)滯后時間最小的條件下運行,但可能會丟失某些數(shù)據(jù)。具體采用哪種模式,則需要數(shù)據(jù)庫管理員根據(jù)企業(yè)對待數(shù)據(jù)損失的態(tài)度與工作負荷等來確定。

可見現(xiàn)在可用的備份服務(wù)器與生產(chǎn)服務(wù)器之間的數(shù)據(jù)同步解決方案都是基于事務(wù)日志來實現(xiàn)的。

故障三:解決數(shù)據(jù)一致性問題

假設(shè)現(xiàn)在有這么一種情況。在一個銀行系統(tǒng)中,某個用戶需要轉(zhuǎn)帳。這個轉(zhuǎn)帳作業(yè)主要是通過兩個步驟來完成。第一個步驟就是扣減用戶帳戶中的金額;第二個步驟是把錢轉(zhuǎn)入到另外一個用戶那里,F(xiàn)在如果在轉(zhuǎn)帳的過程中,第一步成功了,但是第二個步驟因為某種原因出錯了。如用戶提供的帳戶名字與實際轉(zhuǎn)帳的帳戶名字不符,則第二個操作就會失敗。此時整個轉(zhuǎn)帳操作就會以失敗而告終。但是現(xiàn)在的問題是,第一個扣減的動作在數(shù)據(jù)庫zhon給已經(jīng)完成了。而實際卻是沒有轉(zhuǎn)帳成功,就救造成了數(shù)據(jù)一致性的問題。

實際過程中如果應(yīng)用程序發(fā)出 ROLLBACK 語句,或者數(shù)據(jù)庫引擎檢測到錯誤,就使用日志記錄回滾未完成的事務(wù)所做的修改。也就是說,當(dāng)?shù)诙䝼操作失敗的話,應(yīng)用程序要發(fā)出一個ROLLBACK 語句,利用事務(wù)日志回滾功能,恢復(fù)第一步的操作。也就是說,把扣減金額的操作進行恢復(fù),從而實現(xiàn)數(shù)據(jù)的一致性。類似的應(yīng)用,在數(shù)據(jù)庫開發(fā)過程中很頻繁。

故障四:數(shù)據(jù)庫時點恢復(fù)的問題

如現(xiàn)在遇到這么一種故障。數(shù)據(jù)庫系統(tǒng)在上午11點突然發(fā)現(xiàn)故障,啟動不起來了。而數(shù)據(jù)庫系統(tǒng)是在昨天晚上12點剛做完一個完全備份。在這種情況下,如果只是從完全備份中恢復(fù)數(shù)據(jù)的話,只能夠恢復(fù)到昨天晚上12點的數(shù)據(jù)。那從昨天晚上12點到今天上午11點的數(shù)據(jù)就不能夠恢復(fù)了嗎?

其實不然。因為用戶在對數(shù)據(jù)庫做的任何一個修改都會保存在事務(wù)日志當(dāng)中。為此只要事務(wù)日志不損壞的情況下,數(shù)據(jù)庫管理員可以把數(shù)據(jù)恢復(fù)到上午11點那個時刻的數(shù)據(jù)。具體的操作方法很簡單,就好先利用完全備份文件恢復(fù)數(shù)據(jù)庫系統(tǒng),此時數(shù)據(jù)庫中的數(shù)據(jù)位昨天晚上12點的數(shù)據(jù)。然后再利用日志恢復(fù)功能把數(shù)據(jù)恢復(fù)到今天上午11點的數(shù)據(jù)。可見事務(wù)日志可以幫助管理員把數(shù)據(jù)恢復(fù)到某一個具體的時點。

關(guān)鍵詞標簽:事務(wù)日志,解決,SQL,Se

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟sql server系統(tǒng)表損壞的解決方法sql server系統(tǒng)表損壞的解決方法MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶Access、SQL Server、Oracle常見應(yīng)用的區(qū)別Access、SQL Server、Oracle常見應(yīng)用的區(qū)別

相關(guān)下載

人氣排行 如何遠程備份(還原)SQL2000數(shù)據(jù)庫SQL2000數(shù)據(jù)庫遠程導(dǎo)入(導(dǎo)出)數(shù)據(jù)配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改SQL Server 2005降級到2000的正確操作步驟修改Sql Server唯一約束教程淺談JSP JDBC來連接SQL Server 2005的方法SQL Server創(chuàng)建表語句介紹