Ich versuche, eine neue SQL Server-Datenbank aus einer .bak
-Datei mit Powershell zu erstellen.Erstellen Sie eine neue Datenbank aus. BAK-Datei mit PowerShell und SMO-Bibliothek
Hier ist mein Skript:
TRY
{
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SmoExtended') | out-null
$servername = "MyServer\MyServerInstance"
$datapath= "E:\SQLData\MyNewDataBase"
$logpath= "E:\SQLLogs\MyNewDataBase"
$path= "\\MyServer\BKPFolder\"
$server = new-object("Microsoft.SqlServer.Management.Smo.Server") $servername
$folderitem=Get-ChildItem $path -filter *.bak -rec
foreach($bkfiles in $folderitem)
{
$dbRestore = new-object("Microsoft.SqlServer.Management.Smo.Restore")
$files = $path+$bkfiles.Name
$backupFile = $files
$dbRestore.Devices.AddDevice($backupFile, [Microsoft.SqlServer.Management.Smo.DeviceType]::File)
$dbRestoreDetails = $dbRestore.ReadBackupHeader($server)
$dbFileList= $dbRestore.ReadFileList($server)
foreach ($row in $dbFileList)
{
$FileType = $row["Type"].ToUpper()
If ($FileType.Equals("D"))
{
$DBLogicalName = $Row["LogicalName"]
}
ELSEIf ($FileType.Equals("L"))
{
$LogLogicalName = $Row["LogicalName"]
}
}
$dbRestoreFile = new-object("Microsoft.SqlServer.Management.Smo.RelocateFile")
$dbRestoreLog = new-object("Microsoft.SqlServer.Management.Smo.RelocateFile")
$dbRestoreFile.LogicalFileName = $DBLogicalName
$dbRestoreFile.PhysicalFileName =$datapath + "\" + $DBLogicalName + ".mdf"
$dbRestoreLog.LogicalFileName = $LogLogicalName
$dbRestoreLog.PhysicalFileName = $logpath + "\" + $LogLogicalName + ".ldf"
$dbRestore.RelocateFiles.Add($dbRestoreFile)
$dbRestore.RelocateFiles.Add($dbRestoreLog)
$dbRestore.Database = "MyNewDataBase"
$dbRestore.NoRecovery = $false
$dbRestore.Action = "DataBase"
$dbRestore.FileNumber = 1;
$dbRestore.ReplaceDatabase = $false;
$dbRestore.SqlRestore($server)
}
} catch {
"Database restore failed:`n`n " + _.Exception.GetBaseException().Message
}
Wenn ich diesen Code ausführen, bekomme ich diesen Fehler:
Directory lookup for the file "E:\SQLData\MyNewDataBase\OLDDataBase_Data.mdf" failed with the operating system error 2(The system cannot find the file specified.).
File 'OLDDataBase_Data' cannot be restored to 'E:\SQLData\MyNewDataBase\OLDDataBase_Data.mdf'. Use WITH MOVE to identify a valid location for the file.
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
RESTORE DATABASE is terminating abnormally.
Es sieht aus wie mein Skript die .mdf
und .ldf
Dateien aus dem finden versucht, alte Datenbank Aber ich habe nur eine .bak
Datei aus der alten Datenbank.
Was fehlt mir?
Danke.
Vielleicht könnte dies Ihre Bemühungen unterstützen: 'https://docs.microsoft.com/en-us/powershell/module/sqlps/restore-sqldatabase?view=sqlserver-ps ' – Hames
Sorry Mann, Inhalt nicht gefunden. – MD29
Bitte versuchen Sie: 'https: // docs.microsoft.com/de-de/powershell/module/sqlps /' und auf der linken Seite Navigation finden Sie "Restore-Sql-Datenbank" – Hames