Sql server SMO部分备份

时间:2016-01-14 09:01:47

标签: c# sql-server smo

我在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();
    }
}

2 个答案:

答案 0 :(得分:1)

解决方案非常简单。 只需在SQLSERVER中单击数据库,然后在选项选项卡的属性窗口中将恢复模式更改为批量记录

答案 1 :(得分:-1)

通过T-SQL解决方案:

USE [master]
GO
ALTER DATABASE [databasename] SET RECOVERY BULK_LOGGED WITH NO_WAIT
GO