2010-06-22 6 views
2

내 문제는 정말 간단합니다. 하나 이상의 백업 세트가 들어있는 .bak 파일이 있습니다.모든 백업 세트를 사용하여 SMO로 데이터베이스 복원

SMO를 사용하여이 .bak 파일로 데이터베이스를 복원 할 때 첫 번째 백업 세트 만 작업을 수행합니다. 남은 세트는 무시하는 것 같습니다.

왜 그럴까요?

내 코드를 참조하십시오

  //Sets the restore configuration 
      Restore restore = new Restore() 
      { 
       Action = RestoreActionType.Database, 
       Database = _databaseToRestore.DatabaseName, 
       ReplaceDatabase = true 
      }; 

      restore.Devices.Add(new BackupDeviceItem(_backupFilePath, DeviceType.File)); 

      Server server = new Server(_databaseToRestore.ServerName); 

      DataTable fileList = restore.ReadFileList(server); 
      string serverDataFolder = server.Settings.DefaultFile; 

      if (string.IsNullOrEmpty(serverDataFolder)) 
       serverDataFolder = server.Information.MasterDBPath; 

      foreach (DataRow file in fileList.Rows) 
      { 
       restore.RelocateFiles.Add(
        new RelocateFile((string)file["LogicalName"], 
        Path.Combine(serverDataFolder, _databaseToRestore.DatabaseName + Path.GetExtension((string)file["PhysicalName"])))); 
      } 

      //Gets the exclusive access to database 
      server.KillAllProcesses(_databaseToRestore.DatabaseName); 
      restore.Wait(); 

      restore.SqlRestore(server); 

은 내가 BackupDeviceItem가 수 내게 사용자에게 경고 할 수 이러한 방법으로, 내부 거기에 설정 얼마나 많은 백업에 대한 피드백을 제공합니다 생각하지만 그렇지 않다.

누구나 단서가 있습니까?

감사합니다.

답변

3

좋아, 문제가 해결되었습니다.

Restore 개체의 중요한 필드는 FileNumber입니다. 기본값은 1이므로 항상 첫 번째 백업 세트를 가져갔습니다.

이 속성을 파일의 백업 세트 수로 설정하기 만하면 가장 최근 백업이 완료되었습니다.

참고 :이 문제와 관련하여 차등 백업이 필요하지 않습니다.

2

방금 ​​파일에 포함 된 백업 세트 수를 쉽게 알 수 있다는 것을 알았습니다.

DataTable backupSets = restore.ReadBackupHeader(server); 

이제 간단한 backupSets.Rows.Count는 사용자에게 경고하는 데 도움이 있습니다.

+0

매우 유용한 결과물입니다. 감사합니다. 그 헤더를 추가하여 그 헤더를 읽고 싶은 파일을 Restore.Devices.Add()를 통해 복원 오브젝트에 추가하십시오. MSDN의 전체 예제, http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.restore.readbackupheader.aspx – Despertar