2017-08-29 19 views
0

SQL Server 2014データベースのバックアップと復元を行う簡単なアプリケーションがあります。ここでSQL Serverデータベースを復元する前にスキーマを比較する

は私のコードです:

public void BackUp(BackUpManifest backUpManifest) 
{ 
     try 
     { 
      using (SqlConnection cnn = new SqlConnection(backUpManifest.ConnectionString)) 
      { 
       cnn.Open(); 
       ServerConnection sc = new ServerConnection(cnn); 
       Server sv = new Server(sc); 

       // Create backup device item for the backup 
       BackupDeviceItem bdi = new BackupDeviceItem(backUpManifest.SavedPath, DeviceType.File); 

       // Create the backup information 
       var bk = new Backup(); 
       bk.Devices.Add(bdi); 
       bk.Action = BackupActionType.Database; 
       bk.BackupSetDescription = backUpManifest.SetDescription; 
       bk.BackupSetName = backUpManifest.Name; 
       bk.Database = cnn.Database; 
       bk.ExpirationDate = new DateTime(2007, 5, 1); 
       bk.LogTruncation = BackupTruncateLogType.Truncate; 

       // Run the backup 
       bk.SqlBackup(sv); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

    public void Restore(BackUpManifest backUpManifest) 
    { 
     try 
     { 
      using (SqlConnection cnn = new SqlConnection(backUpManifest.ConnectionString)) 
      { 
       cnn.Open(); 
       cnn.ChangeDatabase("master"); 
       ServerConnection sc = new ServerConnection(cnn); 
       Server sv = new Server(sc); 

       sv.KillAllProcesses(backUpManifest.Name); 

       // Create backup device item for the backup 
       BackupDeviceItem bdi = new BackupDeviceItem(backUpManifest.SavedPath, DeviceType.File); 

       // Create the restore object 
       Restore resDB = new Restore(); 
       resDB.Devices.Add(bdi); 
       resDB.NoRecovery = false; 
       resDB.ReplaceDatabase = true; 
       resDB.Database = backUpManifest.Name; 
       resDB.ReplaceDatabase = true; 

       // Restore the database 
       resDB.SqlRestore(sv); 
      } 
     } 
     catch(Exception ex) 
     { 
      throw ex; 
     } 
    } 

私が持っている状況は、データベースが変更されている場合ということである - すなわち、列/テーブル/修正/編集追加、その後、私は、データベースを許可しませんリストア。

既存のデータベースのスキーマと、復元しようとしているデータベースのスキーマを比較できますか?

おかげで、あなたが実際にバックアップを復元することなく、DB構造にアクセスすることはできませんSQL Server環境で

答えて

0

(私は怖いです.BAKファイルを読み取る方法のないドキュメントはありません)。バックアップが復元されたら、DB to DBを比較するだけです(ここでは、自分でスクリプトを作成するよりもサードパーティ製のツールを推奨します)。 これが役立つことを願っています。

関連する問題