SQL Server事務(wù)日志的幾個(gè)常用操作
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
我們知道,SQL Server事務(wù)日志主要是用來記錄所有事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的修改,如果系統(tǒng)出現(xiàn)故障,它將成為最新數(shù)據(jù)的唯一來源。日志的操作常有以下幾個(gè)應(yīng)用: 一、事務(wù)日志文件LDF的丟失 當(dāng)我們不小刪除或者LDF文件丟失的時(shí)候,數(shù)據(jù)庫(kù)只剩下MDF文件,此時(shí)直接通過附加MDF是無法恢復(fù)數(shù)據(jù)庫(kù)的,那我們?cè)趺礃硬拍芑謴?fù)數(shù)據(jù)庫(kù)呢?我們可以把SQL Server的日志文件分為兩種形式:一類是無活動(dòng)事務(wù)的日志,另一類是有活動(dòng)事務(wù)的日志,我們分別根據(jù)兩種情況來進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)。 1、無活動(dòng)事務(wù)的日志恢復(fù) 當(dāng)文件并沒有發(fā)生活動(dòng)性的日志,我們就可以很容易的利用MDF文件就可以直接恢復(fù)數(shù)據(jù)庫(kù)了,具體操作方法如下: 1)數(shù)據(jù)庫(kù)要是沒有日志,就會(huì)處于置疑的狀態(tài),我們先可以通過企業(yè)管理器中在對(duì)應(yīng)數(shù)據(jù)庫(kù)中點(diǎn)擊右鍵,然后在“所有任務(wù)”下選擇“分離數(shù)據(jù)庫(kù)”把數(shù)據(jù)庫(kù)進(jìn)行分離; 2)利用MDF文件附加數(shù)據(jù)庫(kù)生成新的日志文件,可用企業(yè)管理器中數(shù)據(jù)庫(kù)點(diǎn)擊右鍵選擇“所有任務(wù)”下的“附加數(shù)據(jù)庫(kù)”把數(shù)據(jù)庫(kù)附加上。 這樣就可以直接恢復(fù)好數(shù)據(jù)庫(kù)了,而如果數(shù)據(jù)庫(kù)的日志文件中含有活動(dòng)事務(wù),利用此方法就不能恢復(fù)數(shù)據(jù)庫(kù),所以得使用下面的方法。 2、有活動(dòng)事務(wù)的日志恢復(fù) 當(dāng)日志發(fā)生了事務(wù)的記錄,丟失的時(shí)候,我們采用如下的方法來實(shí)現(xiàn): 1)新建一個(gè)同名的數(shù)據(jù)庫(kù),如原數(shù)據(jù)庫(kù)名為MYDB,然后停止SQL Server服務(wù)器,再把數(shù)據(jù)庫(kù)主數(shù)據(jù)MDF文件移走,然后重新啟動(dòng)SQL Server服務(wù)器,新建一個(gè)同名的數(shù)據(jù)庫(kù)MYDB,然后再停止SQL Server服務(wù)器,把移走的MDF文件再覆蓋回來,然后再重新啟動(dòng)SQL Server服務(wù)器,在默認(rèn)的情況下,系統(tǒng)表是不允許被修改的,我們需要運(yùn)行以下語句才可以,在查詢分析器中,選擇Master數(shù)據(jù)庫(kù),然后執(zhí)行: Sp_configure 'allow updates',1 Reconfigure With Override 接著運(yùn)行以下語句,把Sysdatabases表中MYDB數(shù)據(jù)庫(kù)的status屬性設(shè)為‘37268’,把MYDB數(shù)據(jù)庫(kù)設(shè)置為緊急模式。 update sysdatabases set status=32768 where name=’MYDB’ 然后再把數(shù)據(jù)庫(kù)MYDB設(shè)置為單用戶模式,然后重啟SQL Server服務(wù)器,并把數(shù)據(jù)庫(kù)MYDB設(shè)為單用戶模式 Sp_dboption 'MYDB','single user', 'true' 再運(yùn)行以下語句,檢查數(shù)據(jù)庫(kù)MYDB DBCC CHECKDB(‘MYDB’) 2)還原數(shù)據(jù)庫(kù)的狀態(tài) 運(yùn)行以下語句,就可以把數(shù)據(jù)庫(kù)的狀態(tài)還原: Update Sysdatabases Set status=28 Where name=’MYDB’ Sp_Configure ’allow updates’,0 Reconfigure With Override 此時(shí)的數(shù)據(jù)庫(kù)仍不能工作,還要進(jìn)行以下的操作,才能恢復(fù)。 3)利用DTS的導(dǎo)入導(dǎo)出向?qū)В褦?shù)據(jù)庫(kù)MYDB導(dǎo)入到一個(gè)新建數(shù)據(jù)庫(kù)MYDBNEW中,然后新建一個(gè)數(shù)據(jù)庫(kù)MYDBNEW,右擊MYDBNEW,選擇“所有任務(wù)”下的“導(dǎo)出數(shù)據(jù)”功能,打開導(dǎo)入向?qū)?,把表結(jié)構(gòu)、數(shù)據(jù)視圖和存儲(chǔ)過程導(dǎo)入到MYDBNEW中,然后再用此功能把MYDBNEW庫(kù)替換成原來的MYDB庫(kù)即可。 可以知道,恢復(fù)一個(gè)有活動(dòng)事務(wù)的日志是麻煩多了,所以在數(shù)據(jù)庫(kù)維護(hù)的時(shí)候,切不要小看事務(wù)日志。 二、事務(wù)在不斷增大的時(shí)候如何縮小日志 當(dāng)數(shù)據(jù)如在頻繁修改或者刪除的同時(shí),事務(wù)的日志就會(huì)不斷的增加,甚至超過了碰盤的大小,這時(shí)候就不能因此而直接刪除了事務(wù)日志的LDF文件,否則可能會(huì)帶來很大的麻煩。為了避免這種情況,我們需要有如下的操作: 1) 盡量避免tempdb 日志與用戶數(shù)據(jù)庫(kù)日志放在同一磁盤上,tempdb 數(shù)據(jù)庫(kù)和事務(wù)日志具有足夠的空間來處理索引操作。不能在索引操作完成之前截?cái)?tempdb 事務(wù)日志。 2) 通過執(zhí)行下列命令來縮小事務(wù)日志 DBCC SHRINKDATABASE DBCC SHRINKFILE 操作會(huì)立即嘗試將物理日志文件收縮為所要求的大小。 如果虛擬日志文件中的邏輯日志未超出 target_size 標(biāo)記,則釋放 target_size 標(biāo)記之后的虛擬日志文件,并成功完成 DBCC 語句,不顯示任何信息。 如果虛擬日志中的邏輯日志超出了 target_size 標(biāo)記,SQL Server Database Engine 將釋放盡可能多的空間并顯示一個(gè)信息性消息。該消息告訴您必須執(zhí)行什么操作來從文件尾部的虛擬日志中刪除邏輯日志。執(zhí)行完該操作后,可以重新發(fā)出 DBCC 語句以釋放剩余的空間。 DBCC SHRINKFILE 語句還顯示一個(gè)信息性消息,指出它不能釋放所要求的全部空間,并告訴您可以執(zhí)行 BACKUP LOG 語句來釋放剩余的空間。 三、事務(wù)日志的還原 事務(wù)日志在還原的時(shí)候可以選擇三種恢復(fù)模式:簡(jiǎn)單模式、完整模式和大容量日志模式。 簡(jiǎn)單恢復(fù)模式 此模式簡(jiǎn)略地記錄大多數(shù)事務(wù),所記錄的信息只是為了確保在系統(tǒng)崩潰或還原數(shù)據(jù)備份之后數(shù)據(jù)庫(kù)的一致性。 由于舊的事務(wù)已提交,已不再需要其日志,因而日志將被截?cái)?。截?cái)嗳罩緦h除備份和還原事務(wù)日志。但是,這種簡(jiǎn)化是有代價(jià)的,在災(zāi)難事件中有丟失數(shù)據(jù)的可能。沒有日志備份,數(shù)據(jù)庫(kù)只可恢復(fù)到最近的數(shù)據(jù)備份時(shí)間。如果您使用的是 SQL Server Enterprise Edition,需要考慮此問題。此外,該模式不支持還原單個(gè)數(shù)據(jù)頁(yè)。 完整恢復(fù)模式 此模式完整地記錄了所有的事務(wù),并保留所有的事務(wù)日志記錄,直到將它們備份。在 SQL Server Enterprise Edition 中,完整恢復(fù)模式能使數(shù)據(jù)庫(kù)恢復(fù)到故障時(shí)間點(diǎn)。 大容量日志恢復(fù)模式 此模式簡(jiǎn)略地記錄大多數(shù)大容量操作(例如,索引創(chuàng)建),完整地記錄其他事務(wù)。 大容量日志恢復(fù)提高大容量操作的性能,常用作完整恢復(fù)模式的補(bǔ)充。大容量日志恢復(fù)模式支持所有的恢復(fù)形式,但是有一些限制,備份包含大容量日志記錄操作的日志時(shí),需要訪問數(shù)據(jù)庫(kù)內(nèi)的所有數(shù)據(jù)文件。如果數(shù)據(jù)文件不可訪問,則無法備份最后的事務(wù)日志,而且該日志中所有已提交的操作都將丟失。 該文章在 2011/5/5 22:54:54 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |