Mam programistę SQL Server 2012 zainstalowany na moim komputerze. Też mam zainstalowane obiekty do zarządzania SQL Server 2014, co jest prawdopodobnie źródłem problemu.Nie można powiązać RelocateFile podczas używania cmdlet Restore-SqlDatabase
Piszę moduł do automatyzacji niektórych typowych zadań programistycznych za pomocą Powershell. Jednym z nich jest po prostu skopiowanie istniejącej bazy danych do nowej bazy danych.
Mam świadomość, że istnieją trzy różne sposoby tworzenia kopii zapasowych i przywracania: wykonywania instrukcji SQL, obiektów SMO i poleceń cmdlet SQLPS. Interesuje mnie trasa SQLPS. Oto moja funkcja:
push-location
import-module sqlps -disablenamechecking
pop-location
function Copy-Database {
param (
[string] $database,
[string] $newDatabase
)
$backupFile = "$database-{0:yyyyMMddhhmmss}.bak" -f (get-date)
backup-sqldatabase -serverinstance $defaultServerInstance -database $database -backupfile $backupFile -copyonly
$solutionName = $newDatabase
$mdf = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("MyDb_Data", "$defaultDatabaseRootPath\$solutionName\$newDatabase.mdf")
$ldf = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("MyDb_Log", "$defaultDatabaseRootPath\$solutionName\$newDatabase.ldf")
restore-sqldatabase -serverinstance $defaultServerInstance -database $newDatabase -backupfile $backupFile -RelocateFile @($mdf,$ldf)
}
To tworzy kopie zapasowe bazy danych, ale przy próbie przywracania, pojawia się następujący błąd:
Restore-SqlDatabase : Cannot bind parameter 'RelocateFile'. Cannot convert the "Microsoft.SqlServer.Management.Smo.RelocateFile" value of type "Microsoft.SqlServer.Management.Smo.RelocateFile" to type "Microsoft.SqlServer.Management.Smo.RelocateFile".
Problem ten jest również opisany tutaj: Problems with RelocateFile property in the Restore-SqlDatabase cmdlet
I zaakceptuj, że problemem może być konflikt w zgromadzeniach. Przyjęta odpowiedź oferuje dwie sugestie:
- Make sure that the versions match.
- Use the Microsoft.SqlServer.Management.Smo.Restore.SqlRestore method instead of the Restore-SqlDatabase cmdlet.
Wyjaśniają jednak tylko, jak to zrobić # 2. Chcę wiedzieć, jak to zrobić, używając cmdletu Restore-SqlDatabase
.
Czy próbowałeś zarówno 32 jak i 64 bit PowerShell sesje? Użyj '[Environment] :: Is64BitProcess', aby upewnić się, na którym jesteś. – vonPryz
@vonPryz Nie mam, dam ci szansę – HackedByChinese