


SQL server事務(wù)日志的幾個(gè)常用操作
我們知道,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ū)В驯斫Y(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ù)頁。
完整恢復(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ù)日志,而且該日志中所有已提交的操作都將丟失。
關(guān)鍵字:SQL server、事務(wù)日志、數(shù)據(jù)庫(kù)
新文章:
- 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)無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ī)則詳解