# Использование базы данных приложения H2 или миграция из нее Вы установили GlarusBI, но: - Вы пытаетесь перенести базу данных приложения из H2 в другую базу данных, и что-то пошло не так, - Вы пытаетесь откатиться на предыдущую версию, а не обновить на новую, - GlarusBI регистрирует сообщение об ошибке `liquibase`, когда вы пытаетесь запустить его, - GlarusBI регистрирует другое сообщение об ошибке, в котором упоминается `H2`, или - Вы используете Windows 10 и получаете предупреждение о правах доступа к файлам. ## Используете ли вы в настоящее время H2 в качестве базы данных вашего приложения? **Основная причина.** GlarusBI хранит информацию о пользователях, вопросах и т. д. в собственной базе данных, которая называется «база данных приложения». По умолчанию GlarusBI использует H2, но мы не рекомендуем его для промышленной эксплуатации, потому что файл этой базы данных расположен на диске и таким образом чувствителен к ошибкам файловой системы. **Действия:** 1. Чтобы проверить, что вы используете в качестве базы данных приложения, перейдите в **Панель администратора**, откройте вкладку **Устранение неполадок**, прокрутите вниз до «Информация о диагностике» и найдите ключ «база данных приложения» 2. См. [Миграция с H2](../installation-and-operation/migrating-from-h2.md) для получения инструкций о том, как перейти на более надежную базу данных приложения. ## Вы пытаетесь перенести базу данных приложения с H2 на что-то другое? **Основная причина:** Вы пытаетесь [мигрировать](../installation-and-operation/migrating-from-h2.md) базу данных приложения из H2 в производственную базу данных, такую как PostgreSQL или MySQL/MariaDB, используя `load-from-h2`, но это не удалось, и вы получили ошибку следующего характера: ``` Command failed with exception: Unsupported database file version or invalid file header in file ``` **Действия:** 1. Создайте копию экспортированной базы данных H2 (см. [Резервное копирование данных приложения GlarusBI][backup]). _Не продолжайте, пока не сделаете это_ на случай, если что-то пойдет не так. 2. Убедитесь, что файл базы данных H2, который вы экспортировали, называется `metabase.db.mv.db`. 3. H2 автоматически добавляет расширение `.mv.db` к пути к базе данных, который вы указываете в командной строке, поэтому убедитесь, что путь к файлу базы данных, который вы передаете команде, _не_ включает расширение `.mv.db`. Например, если вы экспортировали базу данных приложения и хотите загрузить данные из этой базы данных H2 в базу данных PostgreSQL с помощью `load-from-h2`, ваша команда будет выглядеть примерно так: ``` export MB_DB_TYPE=postgres export MB_DB_DBNAME=metabase export MB_DB_PORT=5432 export MB_DB_USER= export MB_DB_PASS= export MB_DB_HOST=localhost java -jar glarusBI.jar load-from-h2 /path/to/metabase.db # do not include .mv.db ``` ## Вы пытаетесь понизить версию? **Основная причина:** GlarusBI не поддерживает понижение версии (т. е. возврат к ранней версии приложения). **Действия:** 1. Закройте GlarusBI. 2. Восстановите резервную копию базы данных приложения, которую вы сделали перед попыткой обновления или понижения версии. 3. Восстановите файл JAR или контейнер более старой версии, к которой вы хотите вернуться. 4. Перезапустите GlarusBI. ## База данных приложения заблокирована? **Основная причина:** Иногда GlarusBI не запускается из-за того, что блокировка базы данных приложения не была снята должным образом во время предыдущего запуска. Сообщение об ошибке выглядит примерно так: ``` liquibase.exception.DatabaseException: liquibase.exception.LockException: Could not acquire change log lock. ``` **Действия:** 1. Откройте bash на сервере, где установлена GlarusBI, и вручную снимите блокировки, выполнив: ``` java -jar glarusBI.jar migrate release-locks ``` 2. После завершения этой команды перезапустите экземпляр GlarusBI в обычном режиме (_без_ флага `migrate release-locks`). ## База данных приложения повреждена? **Основная причина:** H2 менее надежен, чем системы управления базами данных, предназначенные для промышленной эксплуатации, и иногда файл базы данных может повредиться. Это может привести к потере метаданных, но _не_ повредит данные в источниках, к которым подключен GlarusBI. **Действующие действия:** Сообщения об ошибках могут различаться в зависимости от того, как была повреждена база данных приложения, но в большинстве случаев в сообщении журнала упоминается `h2`. Вот пример типичной команды и сообщения: ``` myUser@myIp:~$ java -cp glarusBI.jar org.h2.tools.RunScript -script whatever.sql -url jdbc:h2:~/metabase.db Exception in thread "main" org.h2.jdbc.JdbcSQLException: Row not found when trying to delete from index """"".I37: ( /* key:7864 */ X'5256470012572027c82fc5d2bfb855264ab45f8fec4cf48b0620ccad281d2fe4', 165)" [90112-194] at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) [etc] ``` **Как это исправить:** не все ошибки H2 подлежат восстановлению (поэтому, если вы используете H2, _пожалуйста_, создайте стратегию резервного копирования для файла базы данных приложения). Если вы используете последнюю версию и используете H2, база данных приложения хранится в `metabase.db.mv.db`. - Откройте оболочку на сервере, на котором работает экземпляр GlarusBI, и попытайтесь восстановить поврежденный файл H2, выполнив следующие четыре команды: ``` java -cp glarusBI.jar org.h2.tools.Recover mv metabase.db.mv.db metabase-old.db.mv.db touch metabase.db.mv.db java -cp target/uberjar/glarusBI.jar org.h2.tools.RunScript -script metabase.db.h2.sql -url jdbc:h2:`pwd`/metabase.db ``` ## Вы используете GlarusBI с H2 в Windows 10? **Основная причина:** В некоторых случаях в Windows 10 файл JAR GlarusBI должен иметь разрешения на создание локальных файлов для базы данных приложения. При запуске JAR вы увидите сообщение об ошибке, подобное этому: ``` Exception in thread "main" java.lang.AssertionError: Assert failed: Unable to connect to GlarusBI DB. ``` **Действия:** 1. Щелкните правой кнопкой мыши файл JAR GlarusBI (_не_ файл базы данных приложения). 2. Выберите «Свойства». 3. Выберите «Разблокировать». ## Не слишком ли долго загружается база данных приложения? **Основная причина:** вы используете H2 в качестве базы данных приложения, а база данных приложения настолько велика, что ее нельзя загрузить менее чем за 5 секунд (это значение тайм-аута по умолчанию). Вы увидите сообщение «Тайм-аут» в консоли, когда попытаетесь запустить GlarusBI. **Действия:** 1. Используйте базу данных предназначенную для промышленной эксплуатации, такую как PostgreSQL,. 2. Перейдите в **Панель администратора** и увеличьте время ожидания для базы данных приложения. 3. Переместите GlarusBI на более быстрый сервер (в частности, на сервер с более быстрыми дисками). [backup]: ../installation-and-operation/backing-up-metabase-application-data.md [enterprise]: https://www.metabase.com/pricing [serialization-docs]: ../installation-and-operation/serialization.md [serialization-learn]: https://www.metabase.com/learn/administration/serialization