2016-06-09 1 views
2

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이지만 그 값을 알지 못합니다. 누구든지 전에 이것을 했습니까?

+1

단순히 RECOVERY'의 WITH'RESTORE $의 DB를 발행하는'ExecuteNonQuery'을 사용하는 것이 좋습니다. 다른 방법은 SMO를 사용하여 현재 사용중인 백업 세트를 파악하여 'Devices' 속성을 올바르게 설정할 수 있지만 SMO가 필요로하는 이유 (T-SQL에 이러한 제한이없는 경우)가 왜 필요합니까? –

+0

감사합니다. 내가 그 길을 가야 할 필요가있는 것처럼 보입니다. 누군가 이미 전에 이것을 해주기를 바랐습니다. – SQLEnforcer

+0

아마도 누군가는 SMO가 궁극적으로 SQL을 실행하는 방법을 보았지만 SMO를 사용하기 위해 기본적으로 SMO를 사용하기 때문에이 경우에는 속도가 올라가지 않습니다. SMO가 일반 SQL보다 훨씬 편리한 경우가 있습니다 (예를 들어, 쿼리 나 구문을 사용하여 쉽게 검색 할 수없는 복잡한 속성을 서로 연관시켜야하는 경우 프로그래밍 방식으로 생성하는 것이 매우 어려울 수 있습니다). 이것은 그들 중 하나가 아닙니다. –

답변

0

나는 똑같은 문제에 직면 해있다. sqlRestore 메서드는 백업 파일/장치의 강력한 데이터베이스 복원으로 제한됩니다. "복원 중"상태 (즉, 로그 전달 또는 손상된 AG에서 대기) 상태의 데이터베이스를 "온라인"으로 가져 오면 invoke-sqlcmd 애플릿을 사용하여 "복구시 데이터베이스 복원"만 실행할 수 있습니다.

또는 사람이 다른 솔루션을 경우

...

+0

귀하의 회신은 답이 아닌 질문에 대한 비평처럼 보입니다. 당신이 코멘트하려는 경우, 당신은 [comment] (http://stackoverflow.com/help/privileges/comment)에 [평판] (http://stackoverflow.com/help/whats-reputation)을 충분히 가지고 있어야합니다. 게시하다. 또한 이것을 확인하십시오. [대신 할 수있는 방법] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reference-to-comment-what-can-i-do-instead). – thewaywewere

관련 문제