【问题标题】:SQL Server perform backup with C#SQL Server 使用 C# 执行备份
【发布时间】:2011-08-17 19:07:28
【问题描述】:

我研究了使用 C# 通过 SMO 创建数据库备份的可能性。 这项任务非常简单,代码也很简单。我只有一个问题:如何检查备份是否真的创建了?

SqlBackup.SqlBackup 方法不返回任何参数,我什至不知道它是否抛出任何异常。 (我唯一知道的是它是阻塞的,因为还有SqlBackupAsync方法)

我将不胜感激。

【问题讨论】:

  • 我自己从未使用过它,但最好从浏览文档中猜测,您可以将事件处理程序附加到 Complete 以查看它是否返回错误代码。但我不能 100% 确定在非异步情况下会调用它,而且一定有更好的方法!

标签: c# sql-server-2008 backup


【解决方案1】:

你可以而且很有可能按照你的要求去做,

但是使用 SMO 自己进行备份并不是很困难,但困难的部分是管理备份和恢复。

将所有代码都放在这里会很困难,但它不适合。所以我会尽力把你需要的台词放上去。

SqlBackup.SqlBackup 不返回任何值,它是一个 void 函数。 但它需要一个参数“Server”,试试下面的代码:

Server srvSql;

//Connect to Server using your authentication method and load the databases in srvSql
// THEN

Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Incremental = true; // will take an incemental backup
bkpDatabase.Incremental = false; // will take a Full backup 
bkpDatabase.Database = "your DB name";
BackupDeviceItem bDevice = new BackupDeviceItem("Backup.bak", DeviceType.File);
bkpDatabase.Devices.Add(bDevice );

bkpDatabase.PercentCompleteNotification = 1;// this for progress
bkpDatabase.SqlBackup(srvSql);
bkpDatabase.Devices.Clear();

【讨论】:

  • 我想他想知道工作是否失败。你如何测试它?
  • 我已经有了您提供的代码 :) 问题是我想 100% 确定备份操作成功,这对我想做的事情至关重要。
  • 你能检查一下完整的活动吗?
【解决方案2】:

我已经使用 Reflector.NET 调查了这个问题(我认为这是合法的,因为 RedGate 是女士金牌认证合作伙伴,并且 Reflector.NET 可以开箱即用地打开 .NET 库)。我发现该方法会引发两种类型的异常:

FailedOperationException - 在大多数情况下,其他异常被“翻译”(我想翻译意味着创建新的 FailedOperationException 并将 InnerException 设置为实际抛出的内容)

UnsupportedVersionException - 在一种情况下,日志截断设置为 TruncateOnly 并且服务器主要版本大于或等于 10(即 sql server 2008?)

这部分解决了我的问题,因为我不能 100% 确定如果出现问题,这些异常实际上会被抛出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多