holen Ich bringe Datenbanken aus dem Protokollversand, versuchen, SMO zu verwenden, um es zu tun. Ich versuche, die folgende T-SQL mithilfe von SMO zu imitieren:Wie man SQL Server-Datenbank aus dem "Wiederherstellen" -Modus mit SMO
restore database <database name> with recovery
Hier mein Code ist:
# 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."
}
Der Fehler:
Microsoft.SqlServer.Management.Smo.PropertyNotSetException: To accomplish this action, set property Devices
Die verfügbaren Optionen für DeviceType
(von https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.devicetype(v=sql.105).aspx) sind:
- Logical
- Band
- Datei
- Rohr
- Virtualdevice
Das Problem ist, ich weiß nicht, welche DeviceType
zu erstellen. Meine Schätzung ist LogicalDevice
, aber ich weiß nicht den Wert davon. Hat jemand das schon mal gemacht?
Erwägen Sie einfach 'ExecuteNonQuery' einen' RESTORE $ db MIT RECOVERY' auszustellen. Die Alternative ist die Verwendung von SMO, um sorgfältig herauszufinden, welcher Backup-Satz gerade verwendet wird, so dass Sie die 'Devices'-Eigenschaft richtig einstellen können, aber warum nur durch SMO springen (wenn keine solche Einschränkung in T-SQL existiert)? –
Danke. Es scheint, dass ich auf diese Weise gehen muss, ich hatte gehofft, dass jemand das schon einmal gemacht hat. – SQLEnforcer
Wahrscheinlich jemand, aber da SMO letztendlich nichts anderes macht, als SQL auszuführen, benutzt du SMO, um SMO zu benutzen, was in diesem Fall nichts anderes als eine Geschwindigkeitssteigerung ist. Es gibt Fälle, in denen SMO viel bequemer als einfaches SQL ist (zum Beispiel, wenn Sie viele komplexe Eigenschaften korrelieren müssen, die mit einer Abfrage oder einer Anweisung nicht einfach abgerufen werden können, wäre es sehr mühsam, programmgesteuert zu generieren); das ist keiner von ihnen. –