我們知道,SQL Server事務日志主要是用來記錄所有事務對數據庫所做的修改,如果系統出現故障,它將成為最新數據的唯一來源。日志的操作常有以下幾個應用:
一、事務日志文件LDF的丟失
當我們不小刪除或者LDF文件丟失的時候,數據庫只剩下MDF文件,此時直接通過附加MDF是無法恢復數據庫的,那我們怎麼樣才能恢復數據庫呢?我們可以把SQL Server的日志文件分為兩種形式:一類是無活動事務的日志,另一類是有活動事務的日志,我們分別根據兩種情況來進行數據庫恢復。
1、無活動事務的日志恢復
當文件並沒有發生活動性的日志,我們就可以很容易的利用MDF文件就可以直接恢復數據庫了,具體操作方法如下:
1)數據庫要是沒有日志,就會處於置疑的狀態,我們先可以通過企業管理器中在對應數據庫中點擊右鍵,然後在“所有任務”下選擇“分離數據庫”把數據庫進行分離;
2)利用MDF文件附加數據庫生成新的日志文件,可用企業管理器中數據庫點擊右鍵選擇“所有任務”下的“附加數據庫”把數據庫附加上。
這樣就可以直接恢復好數據庫了,而如果數據庫的日志文件中含有活動事務,利用此方法就不能恢復數據庫,所以得使用下面的方法。
2、有活動事務的日志恢復
當日志發生了事務的記錄,丟失的時候,我們采用如下的方法來實現:
1)新建一個同名的數據庫,如原數據庫名為MYDB,然後停止SQL Server服務器,再把數據庫主數據MDF文件移走,然後重新啟動SQL Server服務器,新建一個同名的數據庫MYDB,然後再停止SQL Server服務器,把移走的MDF文件再覆蓋回來,然後再重新啟動SQL Server服務器,在默認的情況下,系統表是不允許被修改的,我們需要運行以下語句才可以,在查詢分析器中,選擇Master數據庫,然後執行:
Sp_configure 'allow updates',1
Reconfigure With Override
接著運行以下語句,把Sysdatabases表中MYDB數據庫的status屬性設為‘37268’,把MYDB數據庫設置為緊急模式。
update sysdatabases set status=32768 where name=’MYDB’
然後再把數據庫MYDB設置為單用戶模式,然後重啟SQL Server服務器,並把數據庫MYDB設為單用戶模式
Sp_dboption 'MYDB','single user', 'true'
再運行以下語句,檢查數據庫MYDB
DBCC CHECKDB(‘MYDB’)