如何防止SQL Server數(shù)據(jù)庫的事務(wù)日志異常增長
當(dāng)事務(wù)日志擴(kuò)展到無法接受的限度時您必須執(zhí)行的步驟。事務(wù)日志的擴(kuò)展會導(dǎo)致 Microsoft SQL Server 數(shù)據(jù)庫無法使用。
在 SQL Server 2000 中,每個數(shù)據(jù)庫都至少包含一個數(shù)據(jù)文件和一個事務(wù)日志文件。SQL Server 2000 在該數(shù)據(jù)文件中以物理方式存儲數(shù)據(jù)。事務(wù)日志文件存儲您對 SQL Server 數(shù)據(jù)庫執(zhí)行的所有修改的詳細(xì)信息,以及執(zhí)行每個修改的事務(wù)的詳細(xì)信息。由于事務(wù)完整性被視為 SQL Server 的一個基本而固有的特點,因此不能在 SQL Server 2000 中關(guān)閉對事務(wù)詳細(xì)信息的記錄。
在邏輯意義上,事務(wù)日志文件被劃分為更小的段,這些段被稱為虛擬日志文件。在 SQL Server 2000 中,您可以將事務(wù)日志文件配置為根據(jù)需要擴(kuò)展。用戶可以控制事務(wù)日志的擴(kuò)展,也可以將其配置為使用所有可用的磁盤空間。SQL Server 對事務(wù)日志文件大小所做的任何修改(如截斷或增長事務(wù)日志文件)都是以虛擬日志文件為單位執(zhí)行的。
如果與 SQL Server 數(shù)據(jù)庫相對應(yīng)的事務(wù)日志文件被充滿,而且事務(wù)日志文件選項被設(shè)置為自動增長,則事務(wù)日志文件將以虛擬日志文件為單位增長。有時,事務(wù)日志文件可能變得非常大,以致沒有足夠的磁盤空間。如果事務(wù)日志文件不斷增長,致使日志文件占用了所有可用的磁盤空間而無法繼續(xù)擴(kuò)展,則將無法再對數(shù)據(jù)庫執(zhí)行任何數(shù)據(jù)修改操作。不僅如此,由于事務(wù)日志缺乏擴(kuò)展空間,SQL Server 可能會將您的數(shù)據(jù)庫標(biāo)記為可疑數(shù)據(jù)庫。
減小事務(wù)日志的大小
如果事務(wù)日志已經(jīng)增長到無法接受的限度,而您希望從這種狀況中恢復(fù),則必須減小事務(wù)日志的大小。為此,必須截斷事務(wù)日志中非活動的事務(wù)并收縮事務(wù)日志文件。
注意:事務(wù)日志對于維護(hù)數(shù)據(jù)庫的事務(wù)完整性非常重要。因此,即使您為數(shù)據(jù)庫和事務(wù)日志制作了備份,也不得刪除事務(wù)日志文件。
截斷事務(wù)日志中非活動的事務(wù)
當(dāng)事務(wù)日志增長到無法接受的限度時,您必須立即備份事務(wù)日志文件。創(chuàng)建事務(wù)日志文件的備份后,SQL Server 會自動截斷事務(wù)日志的非活動部分。事務(wù)日志文件的非活動部分包含已完成的事務(wù),因此,在恢復(fù)過程中 SQL Server 將不再用到事務(wù)日志文件。SQL Server 會重新利用事務(wù)日志中這段被截斷的非活動空間,而不會允許事務(wù)日志繼續(xù)增長并占用更多空間。
還可以通過截斷的方法,從事務(wù)日志文件中刪除非活動的事務(wù)。有關(guān)截斷事務(wù)日志的其他信息,請參見 SQL Server 聯(lián)機(jī)叢書中的“截斷事務(wù)日志”主題。
重要說明:手動截斷事務(wù)日志文件后,必須在創(chuàng)建事務(wù)日志備份之前創(chuàng)建一個完整的數(shù)據(jù)庫備份。
收縮事務(wù)日志文件
備份操作或截斷方法都不會減小日志文件的大小。要減小事務(wù)日志文件的大小,必須收縮事務(wù)日志文件。要將事務(wù)日志文件收縮到所需大小并刪除無用的頁面,您必須使用 DBCC SHRINKFILE 操作。DBCC SHRINKFILE Transact-SQL 語句只能收縮日志文件中的非活動部分。
注意:當(dāng) DBCC SHRINKFILE Transact-SQL 語句單獨使用時,不能截斷日志并收縮日志文件中的已用空間。
防止事務(wù)日志文件異常增長
要防止事務(wù)日志文件異常增長,建議使用以下方法之一:
• 將事務(wù)日志文件的大小設(shè)置為一個較大值,以避免事務(wù)日志文件自動擴(kuò)展。
• 充分評估最佳內(nèi)存大小后,使用內(nèi)存單位而不是百分比來配置事務(wù)日志文件的自動擴(kuò)展。
• 更改恢復(fù)模型。如果發(fā)生災(zāi)難或數(shù)據(jù)損壞,您必須恢復(fù)數(shù)據(jù)庫,以維護(hù)數(shù)據(jù)庫數(shù)據(jù)的一致性和事務(wù)的完整性。根據(jù)數(shù)據(jù)在數(shù)據(jù)庫中的重要程度,您可以選擇以下恢復(fù)模型之一,以便確定如何備份數(shù)據(jù)以及數(shù)據(jù)丟失可能給您帶來的風(fēng)險:
• 簡單恢復(fù)模型 (SIMPLE)
• 完全恢復(fù)模型 (FULL)
• 大容量日志記錄恢復(fù)模型 (BULK-LOGGED)
使用簡單恢復(fù)模型,您可以將數(shù)據(jù)庫恢復(fù)到最近的數(shù)據(jù)庫備份。使用完全恢復(fù)模型或大容量日志記錄恢復(fù)模型,您可以通過使用事務(wù)日志文件備份來還原數(shù)據(jù)庫,這樣可以將數(shù)據(jù)庫恢復(fù)到故障發(fā)生時的故障點。
默認(rèn)情況下,在 SQL Server 2000 中,SQL Server 數(shù)據(jù)庫的恢復(fù)模型被設(shè)置為完全恢復(fù)模型。在完全恢復(fù)模型中,會定期備份事務(wù)日志,從而防止事務(wù)日志文件增長得過大,以致與數(shù)據(jù)庫大小相比嚴(yán)重失衡。相比之下,如果不執(zhí)行事務(wù)日志的定期備份,事務(wù)日志文件會不斷增長,直至充滿整個磁盤,而且您可能無法對 SQL Server 數(shù)據(jù)庫執(zhí)行任何數(shù)據(jù)修改操作。
如果您不希望在災(zāi)難恢復(fù)操作過程中使用事務(wù)日志文件,則可以從完全恢復(fù)模型更改為簡單恢復(fù)模型。
• 定期備份事務(wù)日志文件,刪除事務(wù)日志中非活動的事務(wù)。
• 將事務(wù)設(shè)計為小型事務(wù)。
• 確保沒有任何未遂事務(wù)繼續(xù)無限期地運行。
• 將“更新統(tǒng)計”選項安排為每天運行。
• 要對索引進(jìn)行碎片整理以改善生產(chǎn)環(huán)境中的工作負(fù)荷性能,請使用 DBCC INDEXDEFRAG Transact-SQL 語句而不是 DBCC DBREINDEX Transact-SQL 語句。如果運行 DBCC DBREINDEX 語句,當(dāng) SQL Server 數(shù)據(jù)庫處于完全恢復(fù)模式時,事務(wù)日志可能會大大擴(kuò)展。此外,DBCC INDEXDEGRAG 語句不像 DBCC DBREINDEX 語句那樣長時間持有鎖。
如果您必須運行 DBCC DBREINDEX 語句,因為這是一個作業(yè),是數(shù)據(jù)庫維護(hù)計劃的一部分,則必須將該作業(yè)分解為多個作業(yè)。此外,在執(zhí)行這些作業(yè)的間歇,還必須經(jīng)常備份事務(wù)日志。
關(guān)鍵字:SQL Server、數(shù)據(jù)庫、事務(wù)日志
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解