首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 Master 資料庫備份與還原完整實戰手冊:從常規備份到災難重建

     編輯:關於SqlServer

為什麼 Master 如此關鍵?

master 儲存所有系統層級中繼資料:登入帳號、連結伺服器、端點、配置選項、所有資料庫的存在與檔案位置、啟動參數。master 損壞或遺失將導致整個 SQL Server 執行個體無法啟動。

系統資料庫備份策略:master、model、msdb 必須納入完整備份排程;tempdb 每次啟動重建,無需備份。

常規備份:SSMS / T-SQL 兩種方式

SSMS 圖形化

  1. 物件總管 → 資料庫 → 系統資料庫 → 右鍵 master → 工作 → 備份。
  2. 備份類型:完整;目的地:磁碟(建議專用備份磁碟,非資料檔同磁碟)。

T-SQL 腳本(可納入 Agent 作業)

BACKUP DATABASE master
TO DISK = 'D:\SQLBackup\master_FULL_20240115.bak'
WITH INIT, COMPRESSION, CHECKSUM, STATS = 5;
GO

還原 Master:兩大場景

場景 A:執行個體仍可啟動(單一使用者模式還原)

  1. 啟動單一使用者模式:
    命令列:sqlservr.exe -m "SQLCMD"(僅允許 sqlcmd 連線)
    或組態管理器 → 服務 → 啟動參數加入 -m。
  2. 以 sqlcmd 或 SSMS(單一連線)執行:
RESTORE DATABASE master
FROM DISK = 'D:\SQLBackup\master_FULL_20240115.bak'
WITH REPLACE, RECOVERY;
GO
  1. 重新啟動服務(移除 -m),驗證登入、連結伺服器、配置是否恢復。

場景 B:執行個體無法啟動(重建 Master + 還原備份)

適用情況:master.mdf 遺失/損壞、無法進入單一使用者模式。

步驟 1:重建系統資料庫

Setup.exe /qn /ACTION=REBUILDDATABASE
  /INSTANCENAME=MSSQLSERVER
  /SQLSYSADMINACCOUNTS="BUILTIN\Administrators"
  /SAPWD="Str0ngP@ssw0rd"
  /SQLCOLLATION=Chinese_Taiwan_Stroke_CI_AS

參數說明:

  • /qn:無訊息安裝(錯誤寫入 Log,%ProgramFiles%\Microsoft SQL Server\100\Setup Bootstrap\Log)。
  • /INSTANCENAME:預設實例用 MSSQLSERVER,具名實例用實例名。
  • /SQLCOLLATION:必須與原 Master 相同,否則還原後排序規則衝突導致系統表損壞。

步驟 2:單一使用者模式啟動並還原備份

sqlservr.exe -m "SQLCMD"
-- 另開視窗
sqlcmd -S . -E -Q "RESTORE DATABASE master FROM DISK='D:\SQLBackup\master_FULL_20240115.bak' WITH REPLACE, RECOVERY;"

步驟 3:重新啟動驗證

實戰演練:模擬 Master 損壞與重建

  1. 停止服務 → 刪除 master.mdf / mastlog.ldf。
  2. 執行上述 Setup.exe /ACTION=REBUILDDATABASE 命令。
  3. 確認 DATA 目錄下重新產生 master.mdf。
  4. 單一使用者模式還原最新完整備份。
  5. 啟動服務,檢查 sys.databases、sys.server_principals、連結伺服器是否正常。

關鍵注意事項與避坑指南

風險點對策
排序規則不一致重建時明確指定 /SQLCOLLATION,與原環境完全一致
備份檔版本不符僅能還原至相同版本(SP 級別建議一致);跨版本需升級腳本
單一使用者模式被佔用用 -m "SQLCMD" 限制僅允許 sqlcmd;或停用 Agent 服務
msdb/model 同步遺漏Master 還原後,若 msdb/model 也有變更,需同步還原它們

自動化備份腳本範例(Agent 作業)

DECLARE @path NVARCHAR(256) = 'D:\SQLBackup\master_FULL_' + CONVERT(CHAR(8), GETDATE(), 112) + '.bak';
BACKUP DATABASE master TO DISK = @path
WITH INIT, COMPRESSION, CHECKSUM, STATS = 10;
-- 保留 7 天
EXECUTE master.dbo.xp_delete_file 0, N'D:\SQLBackup', N'bak', DATEADD(DAY, -7, GETDATE());
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved