====== Форма "Конвертор базы данных" ======
Проект **"[[:dba_agbDBConvertor|Агбис Конвертор БД]]"**\\
Форма **"Резервная копия"** предназначена для управлением процессом создания резервной копии "Исходной" базы данных.\\
{{:pasted:20210302-122121.png}}\\
В частности, в случае когда версия Firebird "Резервной копии" старше версии Firebird "Исходной" базы данных, выполняется конвертирование.\\
{{:pasted:20210302-123740.png}}\\
Для выполнения конвертирования должны быть доступны Firebird обеих версий.\\
Пункт главного меню "Настройка Firebird" позволяет посмотреть [[:dba_TFormFirebird|список служб Firebird]]\\
===== Настройка параметров создания резервной копии =====
1. Проверяем поля "Файл базы данных" и "Порт".\\
2. Выбираем "Firebird для "Новой" базы данных".\\
Если "Версия Firebird резервной копии" совпадает с версий "Исходной" базы данных, то выполняется обычный Backup/Restory.\\
Кнопка для выполнения операции называется **"Создание резервной копии"**.\\
Если "Версия Firebird резервной копии" больше версии "Исходной" базы данных, то выполняется конвертирование базы данных к новой версии Firebird.\\
Кнопка для выполнения операции меняет название на **"Конвертация БД"**.\\
Если конвертация доступна, то в строке состояния будет выведено сообщение "База данных готова для выполнения конвертации".\\
В случае возникновения проблем кнопка для выполнения операции становится недоступной, а в строке состояния выводится текст с информацией о проблеме.\\
Например, с случае отсутствия свободного места на диске, будет сообщение "Выполнение конвертации недоступно. Недостаточно свободного места на диске e: для создания резервной копии базы данных. Требуется 19049 M, имеется 7058 M."\\
Backup выполняется программой gbak исходной версии, Restory программой gbak новой версии.\\
В случае конвертации нет необходимости предварительно устанавливать новый Firebird.\\
Все необходимые модули, если они доступны, автоматически устанавливаются в процессе создания резервной копии.\\
===== Создание резервной копии =====
Запускается кнопкой **"Создание резервной копии"**.\\
{{:pasted:20210209-093533.png}}\\
1. Установка Firebird.\\
Для Firebird 2.5 устанавливается, если необходимо, Embedded версия в папку Firebird_2_x64_Embedded.\\
Для Firebird 3.0 устанавливается, если необходимо, Firebird 3.0.7.33374 как служба в папку Firebird_3_x64.\\
2. Настройка конфигурации
Для того чтобы во время создания пользователи не могли параллельно править базу данных Firebird переключается на временный порт.\\
В логе будет сообщение "Выполнена замена порта для "Исходной" с 3050 на 3051".\\
3. Остановка служб
Останавливаются все службы Firebird.\\
4. Создание резервной копии
Для создания резервной копии используется режим Embedded, то есть используется монопольный режим подключения к базе данных.\\
Создание резервной копии выполняется в режиме конвейера без создания промежуточного fbk-файла.\\
Запускаются одновременно две копии программы gbak.exe: первая в режиме backup, которая сразу передает данные на вторую копию gbak.exe, которая работает в режиме restory.\\
Резервная копия размещается в файле с суффиксом "_NEW".\\
Например, пусть файл базы данных ARM.FDB, тогда копия будет иметь имя ARM_NEW.FDB.\\
5. Запуск Firebird
Запускается служба Firebird на временном порту, что гарантирует монопольное подключение к базе данных.\\
Подключаются обе базы данных: "Исходная" и "Новая".\\
6. Проверка структуры
Прежде чем переключит работу на новую базу делается проверка структуры новой базы данных:\\
* сравнивается количество доменов
* сравнивается количество представлений
* сравнивается количество процедур
* сравнивается количество триггеров
* сравнивается количество генераторов
* сравнивается количество исключений
* сравнивается количество UDF
* сравнивается количество ролей
* сравнивается количество индексов
Если количество элементов в исходной и новой базах данных совпадает, то считается что копия успешно создана.\\
В логе появится сообщение: "Проверка структуры успешно завершена. Различия не найдены."\\
7. Остановка Firebird
8. Замещение "Исходной" БД на "Новую"
* Если новая база успешно создана, то "Исходную" базу переименовываем добавлением суффикса _дата_время.\\
В нашем примере это ARM_20210209_133237.FDB.\\
Новая база переименовывается в "Исходную" ARM.FDB\\
* Если новая база создана с ошибками, то "Исходная" база остается без изменения, новая переименовывается добавлением суффикса _bad.\\
В нашем примере это ARM_NEW_BAD.FDB.\\
При успешном завершении создания новой базы данных дефектная база данных (с суффиксом _BAD) удаляется.\\
9. Запуск служб
Серверу Firebird возвращается исходный порт и запускается служба Firebird.\\
В строке состояния появится сообщение **"Резервная копия успешно создана."**\\
Процесс завершен. Пользователи Химчистки могут продолжить работать.
===== Конвертация базы данных =====
Запускается кнопкой **"Конвертация БД"**.\\
{{:pasted:20210209-093622.png}}\\
Процесс выполняется аналогично процессу описанному в пункте "Создание резервной копии".\\
Отличия возникают в пунктах: "4. Создание резервной копии", "5. Запуск Firebird" и "9. Запуск служб".\\
4. Создание резервной копии
В режиме backup запускаются программы gbak.exe из Firebird 2, а в режиме restory запускаются программы gbak.exe из Firebird 3.\\
В результате получается конвертирование базы данных к новой версии Firebird.\\
5. Запуск Firebird
Запускаются обе службы Firebird на временных портах.
"Исходная" база подключается к Firebird 2, а новая база подключается к Firebird 3.
9. Запуск служб
* Если новая база успешно создана, то Firebird 3 получает исходный порт на котором раньше работал Firebird 2, а Firebird 2 получает новый порт. \\
* Если новая база создана с ошибками, то Firebird 2 получает исходный порт и работал раньше, а Firebird 3 получает новый порт, чтобы через него случайно не смогли подключиться к исходной базе. \\
===== Дополнительная информация =====
* [[dbc_agbdbconvertor|Проект "Агбис Конвертор БД"]]\\
* [[:dba_TFormFirebird|Форма "Настройка Firebird"]]\\