Sql-Server
如何使用 Powershell 移動 SQL Server 2016 中的系統數據庫?
我正在嘗試使用 Powershell 即移動系統數據庫。不使用任何 T-SQL。
- 使用 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"
- 在 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
數據庫相關的非常詳細的文章。