Problèmes avec RelocateFile propriété dans la Restauration-SqlDatabase applet de commande
J'ai essayer de restaurer une base de données à l'aide de la Restauration-SqlDatabase applet de commande. J'ai besoin de déplacer les fichiers, mais j'obtiens l'erreur suivant
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".
At line:25 char:108
+ ... e -RelocateFil $RelocateData
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Restore-SqlDatabase], ParameterBindingException
+ FullyQualifiedErrorId CannotConvertArgumentNoMessage,Microsoft.SqlServer.Management.PowerShell.RestoreSqlDatabaseCommand
Mon powershell code ressemble à ceci
$RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("MyDB_Data", "c:\data\MySQLServerMyDB.mdf")
$RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("MyDB_Log", "c:\data\MySQLServerMyDB.ldf")
$file = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($RelocateData,$RelocateLog)
$myarr=@($RelocateData,$RelocateLog)
Restore-SqlDatabase -ServerInstance DEV\DEMO -Database "test" -BackupFile $backupfile -RelocateFile $myarr
Je pense que vous devriez mentionner que cette erreur se produit lorsque vous mettez à niveau à partir de SQL 2012 de SQL 2014. Je vais poser ce bug aussi vous Connecter et laisser les gars, vous savez le lien.
OriginalL'auteur Lars H | 2014-10-15
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à une différence dans la version de SMO que vous avez chargé et celui de la Restauration-SqlDatabase attend. Il y a probablement deux approches ici...
J'ai extrait les informations pertinentes à partir d'une plus grande script ci-dessous. Il n'est pas testée dans cette forme, et il y a un peu de variables comme $ServerName qui sont supposés être disponibles, mais il devrait être suffisant pour vous d'aller.
Hé là - j'ai ce problème, et je suis un peu de powershell noob. Comment puis-je ", assurez-vous que les versions match"?
OriginalL'auteur Scott Munro
Pour la solution n ° 1, vous devez spécifier le nom qualifié de l'assemblée lorsque vous instancier déplacer le fichier à utiliser un assemblage correct.
Espère que cela aide !
Cela a également travaillé pour moi, merci! M'a sauvé un peu de mal à la tête...
Vraiment utile de répondre. Nous a sauvé beaucoup de temps et de chaos. Celui-ci devrait être "Marqué comme Réponse". Cependant, pouvez-vous me dire où vous avez trouvé cette syntaxe ?
Selon la Powershell de la documentation sur la Nouvelle-Objet, vous passez le nom pleinement qualifié de la classe. La chaîne utilisée ici est la forme originale, contenant la version de l'assemblée à utiliser, ce qui est la clé de la question ici. Par exemple, en utilisant la commande Powershell utilisé sur la réponse suivante, vous pouvez trouver le nom pleinement qualifié de la relocatedfile versions de classe. <pre> [appdomain]::CurrentDomain.GetAssemblies() | where {$_.FullName -like "*smo*"} | foreach{$_.GetTypes()} | where{$_.Nom -match 'relocatefile'} | sélection-Propriété AssemblyQualifiedName | Format-List</pre>
Pour Sql Server 2014, vous avez du changer le numéro de Version "12.0.0.0".
OriginalL'auteur Samuel Dufour
Vous pouvez le faire dans une version indépendante:
OriginalL'auteur Rosberg Linhares
J'ai blogué sur la résolution de ce problème en changeant d'environnement variables de chemin d'accès.
Veuillez vérifier http://powershelldiaries.blogspot.in/2015/08/backup-sqldatabase-restore-sqldatabase.html.
Comme je l'ai mentionné ci-dessus, la réponse par "Samuel Dufour" m'a aidé. Je viens de penser à une autre façon.
Cela a fonctionné pour moi, bien que je ne pense pas qu'aucune de ces options sont idéales.
OriginalL'auteur zerocool18