我正在使用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 开始启动数据库 'model'。
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 管理员已启动。
2020-01-20 13:43:01.02 spid10s 恢复已完成,仅为信息提示,无需进行任何操作。
2020-01-20 13:43:02.66 Server 使用 CLR 版本 v4.0.30319 从 C:\Windows\Microsoft.NET\Framework64\v4.0.30319 初始化公共语言运行时(CLR)功能。
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 CREATE DATABASE 或 ALTER DATABASE 失败,因为结果累计数据库大小将超过每个数据库的许可限制 10240 MB。
2020-01-20 13:49:04.59 Backup 错误:3041,严重性:16,状态:1。
2020-01-20 13:49:04.59 Backup 执行命令 BACKUP DATABASE PHASIS 失败,请检查备份应用程序日志以获取详细信息。
2020-01-20 14:14:56.76 Backup 错误:3041,严重性:16,状态:1。
2020-01-20 14:14:56.76 Backup 执行命令 BACKUP DATABASE PHASIS 失败,请检查备份应用程序日志以获取详细信息。
我认为,spid51在收集所有信息后尝试执行“CREATE DATABASE”。但是,它试图将备份文件作为服务器实例的一部分,并且由于10 GB已经无法增加而导致崩溃。
有没有人有想法如何更改备份,使备份不再计入数据库限制?也许明确地给它一个新数据库或类似的东西?
Microsoft关于SMO的信息并不是很有帮助: https://learn.microsoft.com/de-de/dotnet/api/microsoft.sqlserver.management.smo.backup?redirectedfrom=MSDN&view=sql-smo-140.17283.0 编辑:当我使用Management Studio进行备份时,它可以正常工作,但我必须以编程方式使用smo。