【发布时间】:2016-01-14 09:01:46
【问题描述】:
我在 SQL Server 2008 R2 中有一个使用简单恢复模型的数据库。
数据库包含一个文件组,大部分数据都驻留在其中(>20GB 图像)。这些图像对于应用程序并不重要。
我想使用 Sql Server SMO 从 C# 备份数据库。但我只想备份数据库结构(PRIMARY 文件组;除非必要图像外的所有内容)。我想这样做是为了保持较小的备份大小。
在我的 C# 代码中,我将备份操作设置为 BackupActionType.Files,并且我只在 DatabaseFileGroups 集合中包含 PRIMARY 文件组,因此它应该只备份数据库结构,而不是图像。
但是当我运行备份时,我得到了这个异常:
System.Data.SqlClient.SqlError:无法将主文件组备份为文件备份,因为数据库正在使用 SIMPLE 恢复模型。考虑通过指定 READ_WRITE_FILEGROUPS 进行部分备份。
我的问题是,如何使用 Sql Server SMO 从 C# 代码中指定 READ_WRITE_FILEGROUPS?该异常向我展示了如何在 T-SQL 中执行此操作,但我想在 C# 中执行相同的操作。
这是我正在使用的代码:
class Program
{
static string DbName = PATH_TO_DATABASE;
static string connString = CONNECTION_STRING;
static void Main(string[] args)
{
ServerConnection serverConn = new ServerConnection();
serverConn.ConnectionString = connString;
Server server = new Server(serverConn);
Backup backup = new Backup() { Database = DbName };
backup.Action = BackupActionType.Files;
backup.DatabaseFileGroups.Add("PRIMARY");
backup.Devices.AddDevice("D:\\backup.bak", DeviceType.File);
backup.Initialize = true;
backup.ContinueAfterError = false;
backup.Incremental = false;
backup.Complete += (snd, e) => { Console.WriteLine("Complete"); };
backup.PercentComplete += (snd, e) => { Console.WriteLine("Percent " + e.Percent); };
backup.SqlBackup(server);
serverConn.Disconnect();
}
}
【问题讨论】:
-
“但我只想备份数据库结构”......所以基本上你的问题转化为生成脚本来创建数据库?还是真的必须是没有表格内容的备份?
-
它需要是包含表格内容但不包含图像的备份。
-
我在 SMO 界面中看不到任何支持添加 READ_WRITE_FILEGROUPS 选项的内容。您最好使用 T-SQL 创建备份。
标签: c# sql-server smo