我正在使用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-2013:42:54.93 spid12s正在启动数据库“模型”。 2020-01-2013:42:55.69 spid12s清除tempdb数据库。 2020-01-2013:43:00.07 spid12s正在启动数据库“ tempdb”。 2020-01-2013:43:00.37 spid18s Service Broker端点处于禁用状态或停止状态。 2020-01-20 13:43:00.37 spid18s数据库镜像端点处于禁用或停止状态。 2020-01-2013:43:00.39 spid18s Service Broker管理器已启动。2020-01-20 13:43:01.02 spid10s恢复已完成。这是一仅供参考。无需用户操作。 2020-01-2013:43:02.66服务器公共语言运行时(CLR)功能使用CLR版本v4.0.30319进行了初始化C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319。 2020-01-2013:43:15.65 spid51正在启动数据库“ TESTDB”。 2020-01-2013:43:36.75 spid51错误:1827,严重性:16,状态:1。2020-01-20 13:43:36.75 spid51创建数据库或更改数据库失败,因为结果累积数据库大小将超过您的每个数据库10240 MB的许可限制。 2020-01-2013:49:04.59备份错误:3041,严重性:16,状态:1。2020-01-20 13:49:04.59备份BACKUP无法完成命令BACKUP DATABASE PHASIS。检查备份应用程序日志中是否有详细消息。 2020-01-20 14:14:56.76备份错误:3041,严重性:16,状态:1. 2020-01-20 14:14:56.76备份BACKUP无法完成命令BACKUP DATABASE PHASIS。检查备份应用程序日志以获取详细消息。
在我看来,spid51在收集所有信息后尝试执行“创建数据库”。但是随后,它尝试将备份文件作为服务器实例的一部分,并且由于10 GB无法再增加而崩溃。是否有人想过如何更改备份,以使备份不再计入数据库限制?也许明确地给它一个新的数据库或类似的东西?
Microsoft有关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进行备份。
好吧,那是...呃...有点尴尬。我将超时时间从360(6分钟)增加到3600(60分钟),并且不再崩溃。因此,日志条目和错误消息只会使我真正迷惑,并使我误入歧途。