Я пытаюсь написать скрипт, который восстанавливает базу данных с удаленного компьютера на новый SQL Server.Мой старый SQL Server имеет диск данных как том D:
, а новый SQL Server имеет диск данных как E:
, поэтому кто-то может мне помочь в восстановлении базы данных с PS на другое место на диске?
Резервное копирование находится внутри новогоПапка SQL Server E:\migration
, откуда я пытаюсь ее восстановить.Ниже я попробовал то, что хорошо работает с той же структурой папок.
# Defining the server Name
Write-Host " Initiating the SQL Server Install"
$Servers = Read-Host "Please specify DB Server Name"
Invoke-Command -ComputerName $Servers{
$INSTANCENAME = Read-Host "Please specify DB Server Instance Name , ex:- DBXXXXINST01"
$VOLNAME = Read-Host "Please specify DB Server InstanceVolume Name , ex:- XXXXINST01"
$ServerInstance = Read-Host "Please specify DB Server Instance Name , ex:- dbxx\DBXXXXINST01"
import-module SQLPS -DisableNameChecking
Write-Host " Initiating the DB creation/configuration"
Write-Host "Creating SQL folder"
$setupFolder = "E:\$VOLNAME\SQL"
New-Item -Path $setupFolder -type directory -Force
$backupRoot = Get-ChildItem -Path "E:\migration\DB_Backup\1234inst01\"
$datafilesDest = "E:\$VOLNAME\SQL\"
$logfilesDest = "E:\$VOLNAME\SQL\"
## For each folder in the backup root directory...
#
foreach($folder in $backupRoot)
{
# Get the most recent .bak files for all databases...
$backupFiles = Get-ChildItem -Path $folder.FullName -Filter "*.bak" -Recurse | Sort-Object -Property CreationTime -Descending | Select-Object -First 1
# For each .bak file...
foreach ($backupFile in $backupFiles)
{
# Restore the header to get the database name...
$query = "RESTORE HEADERONLY FROM DISK = N'"+$backupFile.FullName+"'"
$headerInfo = Invoke-Sqlcmd -ServerInstance $ServerInstance -Query $query
$databaseName = $headerInfo.DatabaseName
# Restore the file list to get the logical filenames of the database files...
$query = "RESTORE FILELISTONLY FROM DISK = N'"+$backupFile.FullName+"'"
$files = Invoke-Sqlcmd -ServerInstance $ServerInstance -Query $query
# Differentiate data files from log files...
$dataFile = $files | Where-Object -Property Type -EQ "D"
$logFile = $files | Where-Object -Property Type -EQ "L"
# Set some variables...
$dataFileName = $dataFile.LogicalName
$logFileName = $logFile.LogicalName
# Set the destination of the restored files...
$dataFileFullPath = $datafilesDest+"\"+$dataFileName+".mdf"
$logFileFullPath = $logfilesDest+"\"+$logFileName+".ldf"
# Perform the database restore... and then go around the loop.
Restore-SqlDatabase -ServerInstance $ServerInstance -Database $databaseName -BackupFile $backupFile.FullName -ReplaceDatabase
}
}