Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sql server SMO部分备份_C#_Sql Server_Smo - Fatal编程技术网

C# Sql server SMO部分备份

C# Sql server SMO部分备份,c#,sql-server,smo,C#,Sql Server,Smo,我在SQLServer2008R2中有一个数据库,它使用简单的恢复模型 数据库包含一个文件组,其中包含大量数据(>20GB的图像)。这些图像对于应用程序来说并不重要 我想使用Sql Server SMO从C#备份数据库。但我只想备份数据库结构(主文件组;除非基本映像之外的所有内容)。我想这样做是为了保持备份大小较小 在我的C#代码中,我将备份操作设置为BackupActionType.Files,并且我只在DatabaseFileGroups集合中包含主文件组,因此它应该只备份数据库结构,而不备

我在SQLServer2008R2中有一个数据库,它使用简单的恢复模型

数据库包含一个文件组,其中包含大量数据(>20GB的图像)。这些图像对于应用程序来说并不重要


我想使用Sql Server SMO从C#备份数据库。但我只想备份数据库结构(主文件组;除非基本映像之外的所有内容)。我想这样做是为了保持备份大小较小

在我的C#代码中,我将备份操作设置为
BackupActionType.Files
,并且我只在
DatabaseFileGroups
集合中包含主文件组,因此它应该只备份数据库结构,而不备份映像

但当我运行备份时,会出现以下异常:

System.Data.SqlClient.SqlError:无法将主文件组作为文件备份进行备份,因为数据库正在使用简单恢复模型。考虑通过指定Read OrthRead文件组进行部分备份。

我的问题是,如何使用Sql Server SMO从C代码内部指定
读写文件组
?异常向我展示了如何在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();
    }
}
解决方案非常简单。 只需在SQLSERVER rigth中单击数据库,然后在“选项”选项卡的“属性”窗口中将恢复模式更改为“大容量日志”

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

secound Solution by T-SQL:

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

T-SQL的secound解决方案:

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

“但我只想备份数据库结构”。。。所以基本上你的问题转化为生成脚本来创建数据库?或者它真的必须是一个没有表内容的备份吗?它必须是一个包含表内容但没有图像的备份。我在SMO界面中没有看到任何支持添加读写文件组选项的内容。您可能最好使用T-SQL创建备份。“但我只想备份数据库结构”。。。所以基本上你的问题转化为生成脚本来创建数据库?或者它真的必须是一个没有表内容的备份吗?它必须是一个包含表内容但没有图像的备份。我在SMO界面中没有看到任何支持添加读写文件组选项的内容。您可能最好使用T-SQL创建备份。