我已经研究了使用C#通过SMO创建数据库备份的可能性。 任务非常简单,代码简单明了。我只有一个问题:我如何检查备份是否真的被创建了?
SqlBackup.SqlBackup方法不返回任何参数,我甚至不知道它是否会抛出任何异常。 (我唯一知道的是它是阻塞的,因为还有SqlBackupAsync方法)
我将不胜感激。
答案 0 :(得分:1)
你可以并且很有可能做你要求的事,
但使用SMO自行备份并不是很难,但困难的部分是管理备份和恢复。
将所有代码放在这里很难,但它不适合。所以我会尽力把你需要的线条。
SqlBackup.SqlBackup不返回任何值,它是一个void函数。 但它需要一个参数“服务器”,请尝试以下代码:
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();
答案 1 :(得分:0)
我使用Reflector.NET调查了这个问题(我认为这是合法的,因为RedGate是金牌认证合作伙伴,Reflector.NET开箱即用.NET库)。我发现该方法会引发两种类型的异常:
FailedOperationException - 在大多数情况下,其他异常被“翻译”(我想翻译意味着创建新的FailedOperationException并将InnerException设置为实际抛出的内容)
UnsupportedVersionException - 在一种情况下,日志截断设置为TruncateOnly且服务器主要版本大于或等于10(sql server 2008?)
这部分地解决了我的问题,因为我不能100%确定如果出现问题,实际上会抛出异常。