2017-08-21 9 views
2

でデータベースをバックアップ、コードは次のとおりです。私はバックアップにデータベースをするクラスを作成しているSMO

public bool BackupDatabase(string databasename) 
     { 
      bool success = false; 

      try 
      { 
       Backup dbBackup = new Backup(); 

       string SqlInstance = @"SERVER\INSTANCE"; 
       string User = ExtractPureUsername(System.Security.Principal.WindowsIdentity.GetCurrent().Name); 
       string BackupLocation = @"\\SERVER\FOLDER\BACKUPTEST_" + User.ToString() + ".bak"; 

       Server srv = new Server(SqlInstance); 

       dbBackup.Action = BackupActionType.Database; 
       dbBackup.Database = databasename; 
       dbBackup.Devices.AddDevice(BackupLocation, DeviceType.File); 
       dbBackup.BackupSetName = "Test database backup"; 
       dbBackup.ExpirationDate = DateTime.Today.AddDays(10); 
       dbBackup.Initialize = false; 
       dbBackup.PercentComplete += CompletionStatusInPercent; 
       dbBackup.Complete += Backup_Completed; 

       dbBackup.SqlBackup(srv); 

       success = true; 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine(ex); 
       Console.ReadKey(); 
      } 

      return success; 
     } 

これはを通して実行され、私はエラーを取得する:

Cannot open backup device - Operating System error 5

私がした場合SSMSで参照されているインスタンスでバックアップを実行すると、指定されたBakupの場所にバックアップできます。だから私は、バックアップがC#プログラムを実行しているユーザーとして開始され、SQLサーバーがそれを持っていないので、エラーが発生していると推測しています。どのユーザーがバックアップを実行するかを指定する方法はありますか?

+2

バックアップは常にSQL Serverサービスのユーザーのもとで実行されます。これを変更または偽装することはできません。同じインスタンスに対してSSMSで作業コマンドを使用している場合、SMOは単に期待していたものとは異なるものを構築しています。必要に応じてプロファイラトレースでこれを再度チェックします。 –

答えて

1

おそらく、適切なファイル名をというローカルパスとしてSQL Serverマシンに設定する必要があります。したがって、たとえば\\ServerName\Whateverの代わりにc:\Whateverを使用してください。生成するファイル名に無効な文字(\など)が含まれていないことを確認してください。

+0

ありがとう - 私の部分で愚かなエラー、ナッジのおかげで。 UNCを使用してローカルパスに変更すると、問題が分類されます。 – Leonidas199x

関連する問題