如何使用損壞或刪除的日誌文件重建 SQL 數據庫?

內容

問題概述

每個 SQL 數據庫都由三種類型的文件組成,即: 主數據庫文件 (.mdf)、輔助數據庫文件 (.ndf) 和事務日誌文件 (.ldf)。 主數據庫文件和輔助文件用於存儲表、視圖、索引等數據庫對象,而日誌文件 (.ldf) 則存儲事務記錄和每個事務所做的更改。 SQL Server 引擎會在 SQL Server 啟動時讀取整個日誌文件並執行恢復過程。 但是,如果讀取或恢復過程失敗,數據庫將保持脫機狀態,並根據故障發生的階段被標記為“可疑”或“恢復待定”。 本文將討論日誌文件損壞的可能原因,然後我們將討論重建 SQL 數據庫的解決方案。

事務日誌文件損壞的原因

事務日誌文件是 SQL 數據庫日誌文件,對於恢復至關重要。 多種原因可能會損壞 SQL 數據庫中的日誌文件。 這些原因包括:

  1. 意外終止或強制系統關閉。
  2. 惡意軟件或病毒攻擊系統,導致文件損壞或使數據庫無法訪問。
  3. 增加日誌文件的大小會導致可用空間不足並超出配置的最大文件大小。
  4. 用於承載用戶數據庫系統和文件的 I/O 子系統的配置問題。
  5. SQL Server 帳戶更改。
  6. 意外刪除數據。

使用損壞或刪除的日誌文件重建 SQL 數據庫的方法

在開始任何方法之前,檢查 SQL Server 錯誤和事件日誌非常重要,如果發現由硬件問題引起的錯誤,則應該修復它並查看問題是否得到解決。 如果沒有硬件問題,可以從以下方法入手:

方法 1 – 從現有備份恢復數據庫

要從現有備份恢復數據庫,請執行以下步驟:

步驟 1: “SQL Server 管理工作室” (SSMS)。

步驟 2: 右鍵單擊 數據庫 並選擇 ‘恢復數據庫’

步驟 3: 在裡面 ‘富恩特’ 關於部分 ‘一般的’ 頁面,指定來源和位置。

步驟 4: 從下拉列表中選擇要恢復的數據庫。

使用: 如果找不到您想要的數據庫,則說明備份尚未創建,無法使用當前方法修復您的數據庫。

步驟 5: 單擊 […] 按鈕打開 ‘選擇備份設備 框並選擇 ‘備份媒體類型’ 從下拉列表中。

步驟 6: 點擊 ‘添加’ 打開一個對話框,描述您可以選擇恢復的內容。

步驟 7: 選擇完“中的選項後備份媒體’ 列表,單擊 ‘好的’ 返回到 ‘一般的’ 頁。

步驟 8: 從列錶框中選擇要恢復的數據庫的名稱。

步驟 9: 留下 ‘恢復到’ 選項設置為 “直到最後一次備份” 或從以下位置選擇您選擇的備份 ‘時間線’ 然後單擊 ‘好的’

數據庫恢復選項

步驟 10:選擇要從中恢復的備份 ‘要恢復的備份集’ 網格並單擊 ‘好的’

方法 2:重建損壞或損壞的事務日誌文件

要重建損壞的 SQL Server 日誌文件,必須將數據庫置於緊急模式。 首先,確保您的數據已備份並按照以下步驟操作:

步驟 1: 使用以下命令將數據庫設置為“應急模式’。

USE master
GO
ALTER DATABASE [Database_name] SET EMERGENCY
GO
ALTER DATABASE [Database_name] SET SINGLE_USER
GO

步驟 2: 現在數據庫已設置為單用戶模式,運行 DBCC檢查數據庫 命令與 REPAIR_ALLOW_DATA_LOSS 選項。

DBCC CHECKDB ([DATABASE_NAME], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL ERRORMSGS;
GO

警告! 請務必了解,運行帶有 REPAIR_ALLOW_DATA_LOSS 選項的 DBCC CHECKDB 命令可能會丟失數據。

使用: 如果損壞仍然存在,請使用以下查詢重建日誌文件。 在運行此查詢之前,使數據庫脫機並重命名損壞的日誌文件。

ALTER DATABASE [original_log_file_name] REBUILD LOG ON (NAME= logicalname, FILENAME=’C:Program FilesMicrosoft SQL ServerMSSQLn.MSSQLSERVERMSSQLDATAfile_name.ldf’)

如果這個方法看起來有點困難,而你想採用更簡單、更有效的方法,那麼請遵循下一個方法。

方法 3 – 使用 Stellar Repair for MS SQL 修復 SQL 數據庫

使用 SQL 修復工具(例如 The Stellar Repair for MS SQL)可以輕鬆恢復數據庫。 該軟件使用先進的算法來修復損壞的 MDF 和 NDF 文件。 修復後,將創建一個新的事務日誌文件 (.ldf)。 請按照以下步驟修復和重建 SQL 日誌文件:

步驟 1: 下載 MS SQL 的 Stellar Repair。

恆星

步驟 2: 下載完成後,運行軟件。 這將打開一個 ‘選擇數據庫’ 窗口,其中包含瀏覽或查找損壞的 MDF 文件的選項。

選擇損壞的 mdf 文件的選項

步驟 3: 找到該文件後,單擊按鈕 ‘使固定’ 窗口右下角的選項卡開始修復過程。

步驟 4: 將顯示已修復數據庫及其組件的預覽。

修復的sql數據庫組件的預覽

步驟 5: 驗證數據後,點擊 ‘節省’

MS SQL Stellar Repair 中的保存選項

步驟 6: 要繼續保存已修復的數據庫,請選擇以下任一選項:

  • 新數據庫 – 此選項將數據保存在新數據庫中,數據庫名稱帶有“Retrieved”前綴。
  • 實時數據庫 – 此選項將修復的數據庫保存到現有數據庫。
  • 其他格式 – 使用此選項,您可以將修復的數據保存為 CSV、HTML 或 XLS 等文件格式。
修復數據庫保存選項

步驟 7: Enter 連接到 SQL Server 實例的詳細信息,選擇保存已修復文件的位置,然後單擊“下一個‘。

連接到sql服務器

步驟 8: 選擇以下任一保存模式:

  • 快速節省 – 使用此模式保存大型修復數據庫。 此選項首先保存數據,然後為其建立索引以加快數據庫恢復速度。
  • 標準儲蓄 – 如果需要將數據和索引一起保存,請選擇“標准保存”模式。
恆星

第9步:保存數據庫後, ‘文件保存成功’ 出現該消息。

去完成

值得注意的是,修復 SQL Server 數據庫的方法很少。 而且,即使是那些可用的方法也可能很難遵循。 因此,遵循下一個選項並使用 Stellar Repair for MS SQL 修復 SQL 數據庫會更容易、更方便。 它提供了一個簡化但功能強大的用戶界面,並以最高精度檢索所有數據庫組件,例如模式、觸發器、表、鍵等。 此外,修復主數據文件和輔助數據文件後,您還可以訪問損壞或刪除的事務日誌 (.ldf) 文件。

常見問題

問:如何僅恢復一個 .mdf 文件?

答:您可以使用 SQL Server Management Studio 或 T-SQL 還原 .mdf 文件,而無需還原 .ldf 文件。 嘗試使用 SSMS 附加 .mdf 文件,成功附加 .mdf 文件後,SQL Server 將創建 .ldf 文件。

問:如何檢查 SQL Server 中的數據庫是否損壞?

A. 您必須運行 DBCC檢查數據庫 命令將檢查您的數據庫文件。 它將顯示問題區域的位置並建議數據修復要求。 對於受感染的頁面,運行 頁數據庫 領域。

問:數據庫事務日誌已滿,這意味著什麼?

答:可能導致數據庫事務日誌填滿的因素包括長時間運行的事務或暫停的數據庫鏡像會話。 參考 故障排除指南 Microsoft 來解決問題。

問:我們可以減少 MSDB 日誌文件嗎?

A. 是的,雖然這不是任何數據庫常用的操作。 一般來說,您可以通過運行歷史清理任務來解決MSDB日誌文件過大的問題。 如果不起作用,請檢查正在使用空間的內容,然後使用以下命令收縮 MSDB 日誌文件

— 縮小 MSDB 日誌文件

USE MSDB
GO
DBCC SHRINKFILE(MSDBLog, 512)
GO

— 縮小 MSDB 數據文件

USE MSDB
GO
DBCC SHRINKFILE(MSDBData, 1024)
GO

完成縮小 MSDB 日誌文件後重建索引。

問:尺寸限制是多少? SQL數據庫日誌文件?

新創建的數據庫的SQL日誌文件的初始大小為 8MB自動增長量設置為 默認 64MB。 應該理解,日誌文件的初始大小和自動增長沒有適合所有情況的單一最佳值。 但根據最佳實踐,將初始 SQL 數據庫日誌文件大小設置為數據庫數據文件大小的 20-30%,並自動增長到適當的大小,更進一步。對於正常工作負載來說,1024 MB 就足夠了。 。