【发布时间】:2020-01-20 13:40:30
【问题描述】:
我使用的是 SqlExpress 2012(我必须,别无选择)。
数据库在极少数情况下会运行满。
现在我想对整个数据库进行备份,然后截断一些表并缩小数据库。
对于备份,我使用以下代码:
public void BackupDatabase(string backupFilePath, string databaseServer, string databaseName, out string errorMessage)
{
var connection = new ServerConnection(databaseServer);
connection.StatementTimeout = 360;
Backup backup = new Backup();
backup.Devices.AddDevice(backupFilePath, DeviceType.File);
backup.Database = databaseName;
backup.Initialize = true;
backup.Incremental = false;
backup.Action = BackupActionType.Database;
backup.SqlBackup(new Server(connection));
}
但如果我这样做,一段时间后我会收到错误消息。这是我的错误日志:
2020-01-20 13:42:54.89 spid10s 启动数据库“msdb”。
2020-01-20 13:42:54.90 spid12s 启动数据库 'mssqlsystemresource'。
2020-01-20 13:42:54.91 spid12s 资源数据库构建版本为 12.00.6108。这是个 仅供参考。无需用户操作。
2020-01-20 13:42:54.93 spid12s 启动数据库“模型”。
2020-01-20 13:42:55.69 spid12s 清除 tempdb 数据库。
2020-01-20 13:43:00.07 spid12s 启动数据库“tempdb”。
2020-01-20 13:43:00.37 spid18s Service Broker 端点处于禁用状态或 停止状态。
2020-01-20 13:43:00.37 spid18s 数据库 镜像端点处于禁用或停止状态。
2020-01-20 13:43:00.39 spid18s Service Broker manager 已启动。
2020-01-20 13:43:01.02 spid10s 恢复完成。这是个 仅供参考。无需用户操作。
2020-01-20 13:43:02.66 服务器公共语言运行时 (CLR) 功能 使用 CLR 版本 v4.0.30319 初始化 C:\Windows\Microsoft.NET\Framework64\v4.0.30319.
2020-01-20 13:43:15.65 spid51 启动数据库“TESTDB”。
2020-01-20 13:43:36.75 spid51 错误:1827,严重性:16,状态:1。
2020-01-20 13:43:36.75 spid51 创建数据库或更改数据库 失败,因为生成的累积数据库大小将超过 每个数据库的许可限制为 10240 MB。
2020-01-20 13:49:04.59 备份错误:3041,严重性:16,状态:1。
2020-01-20 13:49:04.59 Backup BACKUP 未能完成 命令备份数据库阶段。检查备份应用程序日志 详细消息。
2020-01-20 14:14:56.76 备份错误:3041, 严重性:16,状态:1.
2020-01-20 14:14:56.76 备份 BACKUP 未能完成命令 BACKUP DATABASE PHASIS。检查 备份应用程序日志以获取详细消息。
在我看来,spid51 在收集所有信息后会尝试执行“创建数据库”。但随后它尝试将备份文件作为服务器实例的一部分并崩溃,因为 10 GB 无法再增加。
有人知道如何更改备份,以便不再将备份计入数据库限制吗?也许明确地给它一个新的数据库或类似的东西?
微软关于 SMO 的信息并没有真正的帮助:https://docs.microsoft.com/de-de/dotnet/api/microsoft.sqlserver.management.smo.backup?redirectedfrom=MSDN&view=sql-smo-140.17283.0
编辑:当我使用 Management Studio 进行备份时,它可以工作,但我必须以编程方式使用 smo 进行备份。
【问题讨论】:
-
看起来您已达到 express 数据库的最大大小限制。
-
是的,这正是问题所在,但解决方法是什么?我不想再扩展数据库,只在截断表之前做一个备份。
-
没有“变通办法”。如果您需要更大的数据库,则需要 SQL Server 的付费版本。
-
我不需要一个更大的数据库,只需要一个完整的备份。
-
您无法以 express 方式附加大于 10GB 的数据库,因此您需要一个完整版本才能执行此操作。
标签: c# sql-server backup smo