Я вывожу базы данных из журнальной доставки, пытаясь использовать SMO для этого. Я пытаюсь имитировать следующий T-SQL с помощью SMO:Как привести базу данных SQL Server из режима «восстановления» с помощью SMO
restore database <database name> with recovery
Вот мой код:
# 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."
}
Ошибка:
Microsoft.SqlServer.Management.Smo.PropertyNotSetException: To accomplish this action, set property Devices
Доступные варианты DeviceType
(от https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.devicetype(v=sql.105).aspx):
- LogicalDevice
- лента
- Файл
- Труба
- VirtualDevice
Проблема заключается в том, я не знаю, какой DeviceType
создать. Мое предположение - LogicalDevice
, но я не знаю его значения. Кто-нибудь делал это раньше?
Считайте просто с помощью 'ExecuteNonQuery' выдавать' RESTORE $ дБ RECOVERY'. Альтернативой является использование SMO для кропотливого определения того, какой набор резервных копий используется в настоящее время, поэтому вы можете правильно установить свойство 'Devices', но зачем переходить через обручи только потому, что вам требуется SMO (когда такое ограничение не существует в T-SQL)? –
Спасибо. Похоже, мне нужно идти таким образом, надеялся, что кто-то уже это сделал раньше. – SQLEnforcer
Возможно, у кого-то есть, но, видя, что SMO в конечном счете ничего не делает, кроме SQL, вы в основном используете SMO ради использования SMO, что делает его не чем иным, как ударом скорости в этом случае. Существуют случаи, когда SMO гораздо удобнее обычного SQL (например, когда вам нужно сопоставить множество сложных свойств, которые невозможно легко получить с помощью запроса или инструкции, было бы очень громоздким, чтобы генерировать программно); это не один из них. –