Я использую 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 запущен.
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 Ошибка создания CREATE DATABASE или ALTER DATABASE, поскольку результирующий совокупный размер базы данных превысит ваш лицензионный лимит в 10240 МБ на базу данных.
2020-01-20 13: 49: 04.59 Резервное копирование Ошибка: 3041, уровень серьезности: 16, состояние: 1.
2020-01-20 13: 49: 04.59 При резервном копировании BACKUP не удалось выполнить команду BASUP DATABASE PHASIS. Проверьте подробности сообщений в журнале приложений резервного копирования.
2020-01-20 14: 14: 56.76 Ошибка резервного копирования: 3041, Уровень серьезности: 16, Состояние: 1.
2020-01-20 14: 14: 56.76 РЕЗЕРВНОЕ КОПИРОВАНИЕ не удалось выполнить команду ФАЗА РЕЗЕРВНОЙ БАЗЫ ДАННЫХ. Проверьте подробности сообщений в журнале приложений резервного копирования.
Мне кажется, что spid51 пытается собрать CREATE DATABASE после сбора всей информации. Но затем он пытается создать файл резервной копии как часть экземпляра сервера, и это приводит к сбою, поскольку 10 ГБ больше не могут увеличиваться.
Кто-то знает, как изменить резервную копию, чтобы резервная копия не учитывалась больше против лимита базы данных? Может, явно дать ему новую базу данных или что-то в этом роде?
Информация Microsoft о SMO не очень полезна: https://docs.microsoft.com/de-de/dotnet/api/microsoft.sqlserver.management.smo.backup?redirectedfrom=MSDN&view=sql-smo-140.17283.0
edit: когда я делаю резервное копирование с помощью Management Studio это работает, но я должен сделать это с помощью программных средств.