Je retire des bases de données de l'envoi de journaux, en essayant d'utiliser SMO pour le faire. Je tente d'imiter l'aide de T-SQL suivante SMO:Comment faire pour sortir la base de données SQL Server du mode "restauration" à l'aide de SMO
restore database <database name> with recovery
Voici mon code:
# select secondary_database from msdb.dbo.log_shipping_secondary_databases
$dsSecLSDB = $secInst.Databases["MSDB"].ExecuteWithResults("select secondary_database from log_shipping_secondary_databases")
$secLSDB = $dsSecLSDB.Tables.Rows
foreach($db in $secLSDB.secondary_database) {
write-host "Restoring database (bringing online)..."
$secRestrObj = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Restore -Property @{
Action = 'Database';
Database = $db;
NoRecovery = $FALSE;
}
$secRestrObj.SqlRestore($secInst);
write-host "Done with restore."
}
L'erreur:
Microsoft.SqlServer.Management.Smo.PropertyNotSetException: To accomplish this action, set property Devices
Les options disponibles pour DeviceType
(de https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.devicetype(v=sql.105).aspx) sont:
- LogicalDevice
- bande
- Fichier
- pipe
- VirtualDevice
Le problème est, je ne sais pas qui DeviceType
à créer. Ma conjecture est LogicalDevice
mais je ne connais pas la valeur de celui-ci. Est-ce que quelqu'un a déjà fait ça?
Il suffit de considérer l'aide 'ExecuteNonQuery' de publier un' RESTORE $ db AVEC RECOVERY'. L'alternative est d'utiliser SMO pour déterminer minutieusement quel jeu de sauvegarde est actuellement utilisé afin de pouvoir définir la propriété 'Devices' correctement, mais pourquoi passer à travers les cerceaux simplement parce que SMO vous le demande (quand aucune restriction n'existe dans T-SQL)? –
Merci. Il semble que j'aurai besoin d'aller dans ce sens, j'espérais que quelqu'un l'avait déjà fait auparavant. – SQLEnforcer
Probablement que quelqu'un l'a fait, mais vu que SMO ne fait finalement qu'exécuter du SQL, vous utilisez SMO pour l'utilisation de SMO, ce qui en fait un ralentisseur dans ce cas. Il y a des cas où SMO est beaucoup plus pratique que SQL simple (par exemple, quand vous avez besoin de corréler beaucoup de propriétés complexes qui ne peuvent pas être facilement récupérées en utilisant une requête ou une instruction serait très lourde à générer par programmation); ce n'est pas l'un d'entre eux. –