Сбой резервного копирования SMO с ошибкой 1827 (полная база данных) - PullRequest
3 голосов
/ 20 января 2020

Я использую 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 это работает, но я должен сделать это с помощью программных средств.

1 Ответ

0 голосов
/ 20 января 2020

Хорошо, это ... эээ ... немного смущает.
Я увеличил тайм-аут с 360 (6 минут) до 3600 (60 минут), и он больше не достиг sh. Так что записи в журнале и сообщения об ошибках только сбивали с толку и вводили меня в заблуждение.

...