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

修改 SQL Server 預設備份資料夾路徑:登錄表編輯實戰

     編輯:關於SqlServer

SQL Server Management Studio (SSMS) 允許修改資料/記錄檔預設路徑,但 **備份預設路徑僅能透過登錄表修改**。本文提供完整操作步驟、自動化腳本與注意事項。

前置知識:路徑存儲位置

路徑類型SSMS 介面登錄表位置
資料檔預設路徑伺服器屬性 → 資料庫設定 → 資料檔HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\DefaultData
記錄檔預設路徑伺服器屬性 → 資料庫設定 → 記錄檔...\\DefaultLog
備份檔預設路徑無介面...\\BackupDirectory

手動修改步驟

  1. 開啟 regedit
  2. 定位至實例對應鍵值:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer
    (其中 MSSQL.x 對應實例 ID,可從 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL 查詢)
  3. 找到 BackupDirectory 字串值 (REG_SZ)
  4. 修改為新路徑,例如 E:\SQLBackup
  5. 重啟 SQL Server 服務 使生效 (或執行 DBCC FREEPROCCACHE 重新讀取配置)

圖示說明

SSMS 介面無備份路徑設定:

SSMS 資料庫設定頁面無備份路徑

登錄表中備份路徑位置:

登錄表 BackupDirectory 值

自動化腳本 (PowerShell)

param(
    [Parameter(Mandatory=$true)][string]$InstanceName,  # 如 MSSQLSERVER 或具名實例
    [Parameter(Mandatory=$true)][string]$NewBackupPath
)

# 1. 解析實例對應的 MSSQL.x
$instanceRegPath = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"
$instanceId = Get-ItemProperty -Path $instanceRegPath -Name $InstanceName -ErrorAction Stop
$mssqlKey = $instanceId.$InstanceName  # 如 MSSQL13.MSSQLSERVER

# 2. 目標登錄路徑
$serverRegPath = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$mssqlKey\MSSQLServer"

# 3. 驗證路徑存在
if (-not (Test-Path $NewBackupPath)) {
    Write-Warning "建立目錄: $NewBackupPath"
    New-Item -ItemType Directory -Path $NewBackupPath -Force | Out-Null
}

# 4. 設定 ACL: SQL Server 服務帳號需有修改權限
$svcAccount = (Get-WmiObject Win32_Service -Filter "Name LIKE 'MSSQL%$InstanceName%'").StartName
if ($svcAccount -match '^NT (AUTHORITY|SERVICE)\\') {
    # 內建帳號: 透過服務 SID 授權
    $acl = Get-Acl $NewBackupPath
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("NT SERVICE\MSSQL`$InstanceName", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)
    Set-Acl $NewBackupPath $acl
} else {
    # 網域帳號
    $acl = Get-Acl $NewBackupPath
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($svcAccount, "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)
    Set-Acl $NewBackupPath $acl
}

# 5. 寫入登錄
Set-ItemProperty -Path $serverRegPath -Name "BackupDirectory" -Value $NewBackupPath -Type String
Write-Host "已更新 $InstanceName 備份預設路徑為 $NewBackupPath"

# 6. 重啟服務生效
Restart-Service -Name "MSSQL`$InstanceName" -Force
Write-Host "服務已重啟,設定生效。"

使用範例

.\Set-SqlBackupPath.ps1 -InstanceName "MSSQLSERVER" -NewBackupPath "E:\SQLBackup"

注意事項與最佳實踐

  • 權限繼承: 新路徑 ACL 必須包含 SQL Server 服務帳號的 **修改 (Modify)** 權限 (含建立檔案/資料夾、寫入、刪除)
  • 磁碟空間: 目標磁碟預留足夠空間,建議啟用磁碟配額監控
  • 高可用性: AlwaysOn 可用性群組/容錯移轉叢集中,**所有節點必須設定相同路徑且路徑需在共享儲存或各節點本地同字母磁碟**
  • 備份作業相容: 現有維護計畫/作業若硬編碼路徑不受影響;新建作業若未指定路徑將使用新預設值
  • 版本差異: SQL 2012+ 登錄路徑含版本號 (如 MSSQL11.MSSQLSERVER, MSSQL13.MSSQLSERVER, MSSQL15.MSSQLSERVER)

驗證生效

-- 在 SSMS 新增備份作業,目的地選「磁碟」,檢查預設資料夾是否為新路徑
-- 或執行
EXEC master..xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory'

掌握登錄表修改技巧,讓備份路徑管理納入基礎設施即代碼 (IaC) 流程,實現環境一致性與自動化佈署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved