SQL Server Management Studio (SSMS) 允許修改資料/記錄檔預設路徑,但 **備份預設路徑僅能透過登錄表修改**。本文提供完整操作步驟、自動化腳本與注意事項。
| 路徑類型 | SSMS 介面 | 登錄表位置 |
|---|---|---|
| 資料檔預設路徑 | 伺服器屬性 → 資料庫設定 → 資料檔 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\DefaultData |
| 記錄檔預設路徑 | 伺服器屬性 → 資料庫設定 → 記錄檔 | ...\\DefaultLog |
| 備份檔預設路徑 | 無介面 | ...\\BackupDirectory |
regeditHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServerMSSQL.x 對應實例 ID,可從 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL 查詢)BackupDirectory 字串值 (REG_SZ)E:\SQLBackupDBCC FREEPROCCACHE 重新讀取配置)SSMS 介面無備份路徑設定:

登錄表中備份路徑位置:

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"
MSSQL11.MSSQLSERVER, MSSQL13.MSSQLSERVER, MSSQL15.MSSQLSERVER)-- 在 SSMS 新增備份作業,目的地選「磁碟」,檢查預設資料夾是否為新路徑
-- 或執行
EXEC master..xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory'
掌握登錄表修改技巧,讓備份路徑管理納入基礎設施即代碼 (IaC) 流程,實現環境一致性與自動化佈署。