でデータベースをバックアップ、コードは次のとおりです。私はバックアップにデータベースをするクラスを作成している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サーバーがそれを持っていないので、エラーが発生していると推測しています。どのユーザーがバックアップを実行するかを指定する方法はありますか?
バックアップは常にSQL Serverサービスのユーザーのもとで実行されます。これを変更または偽装することはできません。同じインスタンスに対してSSMSで作業コマンドを使用している場合、SMOは単に期待していたものとは異なるものを構築しています。必要に応じてプロファイラトレースでこれを再度チェックします。 –