4.8. Odstraňování problémů

4.8.1. Uzamčení DB

Po aktualizaci se v logu objevuje chyba `Waiting for changelog lock....`

Chyba znamená, že při posledním startu aplikace se nepodařilo dokončit změnu databáze. Je nutné se ujistit, že nad danou instancí DB běží jen jedna Elza. Pokud jiná Elza neběží, tak je možné databázový zámek uvolnit a znovu aplikaci spustit.

Zámek je v tabulce db_databasechangeloglock, odstranění zámku se provede pomocí:

delete from db_databasechangeloglock;

4.8.2. Chybné zobrazení českých znaků

V některých případech jsou v Elza chybně zobrazeny české znaky při vytváření jednotek popisu. V takovém případě je nutné aplikaci spustit s příznakem požadovaného kódování.

java "-Dfile.encoding=UTF-8" "-Dsun.jnu.encoding=UTF-8" -jar elza.jar

V případě provozu v Linuxu a spouštění přímým voláním elza.jar souboru je možné toto nastavení udělat v konfiguračním souboru elza.conf. Soubor musí být umístěn vedle souboru elza.jar.

Příklad konfiguračního souboru elza.conf:

JAVA_OPTS="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"

4.8.3. Nekonzistence v DB při přechodu na verzi 2.1.2 a vyšší

Při přechodu na verzi 2.1.2 z nižších verzí může dojít k detekci nekonzistencí pocházejících z předchozích verzí. Problém bude v logu zaznamenán takto:

Migration failed for change set db/changelog/db.elza-1.5.xml::20210330155924::ppyt:
     Reason: liquibase.exception.DatabaseException: ERROR: could not create unique index "arr_item_object_pidx"
  Detail: Key (desc_item_object_id)=(45647) is duplicated. [Failed SQL: (0) CREATE UNIQUE INDEX arr_item_object_pidx
                             ON arr_item(desc_item_object_id)
                             WHERE delete_change_id IS NULL]

Pro odstranění problému je vhodné provést zhodnocení vážnosti zjištěných nekonzistencí. Automatický skript pro jejich odstranění (3 samostatné příkazy):

delete from arr_cached_node where node_id in( select distinct node_id from arr_desc_item di where item_id in (select distinct i1.item_id from arr_item i1 join arr_item i2 on i1.desc_item_object_id = i2.desc_item_object_id where i1.item_id<i2.item_id and i1.delete_change_id is null and i2.delete_change_id is null));
delete from arr_desc_item where item_id in ( select distinct item_id from arr_desc_item di where item_id in (select distinct i1.item_id from arr_item i1 join arr_item i2 on i1.desc_item_object_id = i2.desc_item_object_id where i1.item_id<i2.item_id and i1.delete_change_id is null and i2.delete_change_id is null));
delete from arr_item where item_id in (select distinct i1.item_id from arr_item i1 join arr_item i2 on i1.desc_item_object_id = i2.desc_item_object_id where i1.item_id<i2.item_id and i1.delete_change_id is null and i2.delete_change_id is null);