Sql-Server

如何使用 Powershell 移動 SQL Server 2016 中的系統數據庫?

  • May 12, 2018

我正在嘗試使用 Powershell 即移動系統數據庫。使用任何 T-SQL。

  1. 使用 SMO : Install-Module SQL-SMO $smo = New-SMO -ServerName localhost $smo.databases["TempDB"].PrimaryFilePath= "F:\Tempdb\" $smo.databases["TempDB"].Alter() 給出錯誤:

‘PrimaryFilePath’ 是只讀屬性。

日誌文件雖然移動得很好。 $smo.databases["TempDB"].LogFiles[0].Filename = "F:\Tempdb\tempdb.ldf"

  1. 在 SQLServer 或 DBATools 模組中也找不到任何特定的 cmdlet。Copy-DbaDatabase最接近;但不完全是。

雖然沒有完全回答您關於使用 Powershell移動所有TEMPDB系統數據庫的問題,但我確實想提供一個為.

假設您的TEMPDB文件的目前位置是

C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA

你想把它們移到

C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\TempDB

您基本上 必須遍歷filegroups.files``filegroups

然後,您對日誌文件執行相同類型的操作。

Install-Module SQL-SMO
$smo = New-SMO -ServerName localhost
$TempDb = $smo.databases["TempDB"]

foreach ($fg in $TempDb.FileGroups) {
   foreach ($fl in $fg.Files) {
   $fl.FileName = $fl.FileName.Replace("C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA","C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\TempDB")
   }
}

foreach ($fg in $TempDb.FileGroups) {
   foreach ($fl in $fg.Files) {
   $fl.FileName
   }
}

foreach ($fl in $TempDb.LogFiles) {
   $fl.FileName = $fl.FileName.Replace("C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA","C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\TempDB")
   }

$smo.databases["TempDB"].Alter()

重新啟動 SQL Server 實例後,您應該會看到TEMPDB在新目錄下分配的文件。


發布我的原始答案後,我對使用移動 SQL Server 系統數據庫進行了更多研究,POWERSHELL並找到了一篇與移動master數據庫相關的非常詳細的文章。

使用 #Powershell 移動您的主數據庫

引用自:https://dba.stackexchange.com/questions/206201