SMO를 사용하여 로그 전달에서 데이터베이스를 가져오고 있습니다. 여기 SMO를 사용하여 "복원"모드에서 SQL Server 데이터베이스를 가져 오는 방법
restore database <database name> with recovery
내 코드입니다 : 내가 SMO를 사용하여 다음 T-SQL을 모방하려고 해요
# 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."
}
오류 : https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.devicetype(v=sql.105).aspx에서 DeviceType
에 대한
Microsoft.SqlServer.Management.Smo.PropertyNotSetException: To accomplish this action, set property Devices
사용할 수있는 옵션 () :
- LogicalDevice에
- 테이프
- 파일
- 파이프
- VirtualDevice는
문제는 내가 만들 수있는 DeviceType
모르는입니다. 내 추측은 LogicalDevice
이지만 그 값을 알지 못합니다. 누구든지 전에 이것을 했습니까?
단순히 RECOVERY'의 WITH'RESTORE $의 DB를 발행하는'ExecuteNonQuery'을 사용하는 것이 좋습니다. 다른 방법은 SMO를 사용하여 현재 사용중인 백업 세트를 파악하여 'Devices' 속성을 올바르게 설정할 수 있지만 SMO가 필요로하는 이유 (T-SQL에 이러한 제한이없는 경우)가 왜 필요합니까? –
감사합니다. 내가 그 길을 가야 할 필요가있는 것처럼 보입니다. 누군가 이미 전에 이것을 해주기를 바랐습니다. – SQLEnforcer
아마도 누군가는 SMO가 궁극적으로 SQL을 실행하는 방법을 보았지만 SMO를 사용하기 위해 기본적으로 SMO를 사용하기 때문에이 경우에는 속도가 올라가지 않습니다. SMO가 일반 SQL보다 훨씬 편리한 경우가 있습니다 (예를 들어, 쿼리 나 구문을 사용하여 쉽게 검색 할 수없는 복잡한 속성을 서로 연관시켜야하는 경우 프로그래밍 방식으로 생성하는 것이 매우 어려울 수 있습니다). 이것은 그들 중 하나가 아닙니다. –