SQL 服务器 SMO 部分备份

本文关键字:备份 SMO 服务器 SQL | 更新日期: 2023-09-27 18:30:31

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

SQL 服务器 SMO 部分备份

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

"

> secound Solution by T-SQL:

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