我正在尝试.bak
使用 powershell从文件创建一个新的 SQL Server 数据库。
这是我的脚本:
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
}
当我运行此代码时,出现此错误:
文件“E:\SQLData\MyNewDataBase\OLDDataBase_Data.mdf”的目录查找失败,出现操作系统错误 2(系统找不到指定的文件。)。
文件“OLDDataBase_Data”无法恢复到“E:\SQLData\MyNewDataBase\OLDDataBase_Data.mdf”。使用 WITH MOVE 标识文件的有效位置。
在规划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。
RESTORE DATABASE 异常终止。
看起来我的脚本正在尝试从旧数据库中查找.mdf
和.ldf
文件。但我只有.bak
旧数据库中的一个文件。
我错过了什么?
谢谢。
经过大量的研究和尝试,我终于恢复了我的数据库。这对我有用:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null
#Define o novo local dos arquivos de mdf e ldf
$RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("OldDataBase_Data", "E:\SQLData\MyNewDataBase_DATA.mdf")
$RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("OldDataBase_Log", "E:\SQLLogs\MyNewDataBase_LOG.ldf")
#Executa a restauração
Restore-SqlDatabase -ServerInstance "MyServer\MyServerInstance" -Database "MyNewDataBase" -BackupFile "\\BackupFolder\OldDataBase.bak" -RelocateFile @($RelocateData,$RelocateLog) -NoRecovery
Restore-SqlDatabase -ServerInstance "MyServer\MyServerInstance" -Database "MyNewDataBase" -BackupFile "\\BackupFolder\OldDataBase.trn" -RestoreAction Log -NoRecovery
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句