Microsoft SQL Server事務日志的應用

我們知道,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’)

(2)還原數據庫的狀態

運行以下語句,就可以把數據庫的狀態還原:

Update Sysdatabases Set status=28 Where name=’MYDB’

Sp_Configure ’allow updates’,0

Reconfigure With Override

此時的數據庫仍不能工作,還要進行以下的操作,才能恢複。

(3)利用DTS的導入導出向導,把數據庫MYDB導入到一個新建數據庫MYDBNEW中,然後新建一個數據庫MYDBNEW,右擊MYDBNEW,選擇“所有任務”下的“導出數據”功能,打開導入向導,把表結構、數據視圖和存儲過程導入到MYDBNEW中,然後再用此功能把MYDBNEW庫替換成原來的MYDB庫即可。

可以知道,恢複一個有活動事務的日志是麻煩多了,所以在數據庫維護的時候,切不要小看事務日志。

二、事務在不斷增大的時候如何縮小日志

當數據如在頻繁修改或者刪除的同時,事務的日志就會不斷的增加,甚至超過了碰盤的大小,這時候就不能因此而直接刪除了事務日志的LDF文件,否則可能會帶來很大的麻煩。爲了避免這種情況,我們需要有如下的操作:

(1)盡量避免tempdb 日志與用戶數據庫日志放在同一磁盤上,tempdb 數據庫和事務日志具有足夠的空間來處理索引操作。不能在索引操作完成之前截斷 tempdb 事務日志。

(2)通過執行下列命令來縮小事務日志

DBCC SHRINKDATABASE

DBCC SHRINKFILE

操作會立即嘗試將物理日志文件收縮爲所要求的大小。

如果虛擬日志文件中的邏輯日志未超出 target_size 標記,則釋放 target_size 標記之後的虛擬日志文件,並成功完成 DBCC 語句,不顯示任何信息。

如果虛擬日志中的邏輯日志超出了 target_size 標記,SQL server Database Engine 將釋放盡可能多的空間並顯示一個信息性消息。該消息告訴您必須執行什麽操作來從文件尾部的虛擬日志中刪除邏輯日志。執行完該操作後,可以重新發出 DBCC 語句以釋放剩余的空間。

DBCC SHRINKFILE 語句還顯示一個信息性消息,指出它不能釋放所要求的全部空間,並告訴您可以執行 BACKUP LOG 語句來釋放剩余的空間。

三、事務日志的還原

事務日志在還原的時候可以選擇三種恢複模式:簡單模式、完整模式和大容量日志模式。

簡單恢複模式

此模式簡略地記錄大多數事務,所記錄的信息只是爲了確保在系統崩潰或還原數據備份之後數據庫的一致性。

由于舊的事務已提交,已不再需要其日志,因而日志將被截斷。截斷日志將刪除備份和還原事務日志。但是,這種簡化是有代價的,在災難事件中有丟失數據的可能。沒有日志備份,數據庫只可恢複到最近的數據備份時間。如果您使用的是 sql server Enterprise Edition,需要考慮此問題。此外,該模式不支持還原單個數據頁。

完整恢複模式

此模式完整地記錄了所有的事務,並保留所有的事務日志記錄,直到將它們備份。在 sql server Enterprise Edition 中,完整恢複模式能使數據庫恢複到故障時間點。

大容量日志恢複模式

此模式簡略地記錄大多數大容量操作(例如,索引創建),完整地記錄其他事務。

大容量日志恢複提高大容量操作的性能,常用作完整恢複模式的補充。大容量日志恢複模式支持所有的恢複形式,但是有一些限制,備份包含大容量日志記錄操作的日志時,需要訪問數據庫內的所有數據文件。如果數據文件不可訪問,則無法備份最後的事務日志,而且該日志中所有已提交的操作都將丟失。

關于SQL Server事務日志的問題彙總
1、用BACKUP LOG database WITH NO_LOG清除日志把數據庫屬性中的故障還原模型改爲“簡單”可以大大減慢日志增長的速度。 如果把還原模型調到簡單,這樣就不支持時間點還原了,但是日志文件會很小,如果數據比較重要...查看完整版>>關于SQL Server事務日志的問題彙總
 
關于SQL Server事務日志的問題彙總
1、用BACKUP LOG database WITH NO_LOG清除日志把數據庫屬性中的故障還原模型改爲“簡單”可以大大減慢日志增長的速度。 如果把還原模型調到簡單,這樣就不支持時間點還原了,但是日志文件會很小,如果數據比較重要...查看完整版>>關于SQL Server事務日志的問題彙總
 
MS SQL Server 事務日志介紹
交易日志,或稱事務日志(Transaction logs)是數據庫結構中非常重要但又經常被忽略的部分。由于它並不像數據庫中的schema那樣活躍,因此很少有人關注交易日志。  交易日志是針對數據庫改變所做的記錄,它可以記錄針...查看完整版>>MS SQL Server 事務日志介紹
 
關于SQL Server事務日志的問題彙總
1、用BACKUP LOG database WITH NO_LOG清除日志把數據庫屬性中的故障還原模型改爲“簡單”可以大大減慢日志增長的速度。 如果把還原模型調到簡單,這樣就不支持時間點還原了,但是日志文件會很小,如果數...查看完整版>>關于SQL Server事務日志的問題彙總
 
C#應用訪問Microsoft SQL Server 2005分析服務
一、前言1、運行環境Windows 2003 Server Enterprise Edition with Service Pack 1Microsoft SQL Server 2005 with Service Pack 1(包含Analysis Service)Visual Studio 2005 Team Suite2、本文使用Microsoft SQL Se...查看完整版>>C#應用訪問Microsoft SQL Server 2005分析服務
 
Microsoft Exchange 2000 Server 和 Exchange Server 2003 上事務日志增長過快問題的故障排查
Microsoft Exchange 2000 Server 和 Exchange Server 2003 上快速增長的事務日志是微軟産品支持服務最近面臨的主要問題,所以本文討論了造成該問題的一些主要原因。 %26#8226;問題%26#8226;日志快速增長的主要原因及...查看完整版>>Microsoft Exchange 2000 Server 和 Exchange Server 2003 上事務日志增長過快問題的故障排查
 
SQL Server事務日志意外增大的處理方法
事務日志文件Transaction Log File是用來記錄數據庫更新情況的文件,擴展名爲ldf。 在 SQL Server 7.0 和 SQL Server 2000 中,如果設置了自動增長功能,事務日志文件將會自動擴展。 一般情況下,在能夠容納兩次事務...查看完整版>>SQL Server事務日志意外增大的處理方法
 
部署Sharepoint要注意SQL Server的事務日志文件
公司的Sharepoint系統用到的數據庫和其他的應用共享同一個數據庫。在規劃期,由于缺乏經驗,只考慮到了Sharepoint中存儲的內容的大小,根本沒有去考慮Sharepoint數據庫事務的日志的大小。熟悉Sharepoint的人都知道,...查看完整版>>部署Sharepoint要注意SQL Server的事務日志文件
 
SQL Server 的事務日志意外增大或充滿的處理方法
事務日志文件Transaction Log File是用來記錄數據庫更新情況的文件,擴展名爲ldf。在 SQL Server 7.0 和 SQL Server 2000 中,如果設置了自動增長功能,事務日志文件將會自動擴展。一般情況下,在能夠容納兩次事務日...查看完整版>>SQL Server 的事務日志意外增大或充滿的處理方法
 
 
回到王朝網路移動版首頁