Ana içeriğe geç

Bir H2 uygulama veritabanını kullanma veya ondan geçiş yapma

Patrona'yı kurdunuz, ancak:

  • Uygulama veritabanını H2'den başka bir veritabanına geçirmeye çalışıyorsunuz ve bir şeyler ters gitti,
  • Yükseltmek yerine düşürmeye çalışıyorsunuz,
  • Patrona, çalıştırmayı denediğinizde bir liquibase hata mesajı günlüğe kaydediyor,
  • Patrona, çalışırken H2 veya h2'den bahseden başka bir hata mesajı günlüğe kaydediyor veya
  • Windows 10'dasınız ve dosya izinleri hakkında bir bildirim alıyorsunuz.

Şu anda uygulama veritabanınız olarak H2'yi mi kullanıyorsunuz?

Temel neden: Patrona, kullanıcılar, sorular vb. hakkındaki bilgileri kendi "uygulama veritabanı" veya kısaca "uygulama veritabanı" olarak adlandırılan bir veritabanında saklar. Varsayılan olarak Patrona, uygulama veritabanı için H2'yi kullanır, ancak üretim için önermiyoruz --- çünkü bu disk üzerinde bir veritabanıdır, sürücünün bozulması veya bir dosyanın düzgün şekilde temizlenmemesi gibi dosya sistemi hatalarına karşı hassastır.

Atılacak adımlar:

  1. Uygulama veritabanı olarak ne kullandığınızı kontrol etmek için Yönetim Paneli'ne gidin, Sorun Giderme sekmesini açın, "Tanılama Bilgileri"ne gidin ve görüntülediği JSON'da application-database anahtarını arayın.
  2. Daha sağlam bir uygulama veritabanına nasıl geçeceğinizle ilgili talimatlar için H2'den Geçiş Yapma bölümüne bakın.

Uygulama veritabanını H2'den başka bir şeye geçirmeye mi çalışıyorsunuz?

Temel neden: Uygulama veritabanını H2'den PostgreSQL veya MySQL/MariaDB gibi bir üretim veritabanına load-from-h2 komutunu kullanarak geçirmeye çalışıyorsunuz, ancak veritabanı dosya adı yanlış olduğu için şu gibi bir hata mesajıyla başarısız oldu:

Command failed with exception: Unsupported database file version or invalid file header in file <DOSYA ADINIZ>

Atılacak adımlar:

  1. Dışa aktarılan H2 veritabanının bir kopyasını oluşturun (bkz. Patrona Uygulama Verilerini Yedekleme). Bir şeyler ters gitmesi ihtimaline karşı bunu yapana kadar devam etmeyin.

  2. Dışa aktardığınız H2 veritabanı dosyasının patrona.db.mv.db olarak adlandırıldığını kontrol edin.

  3. H2, komut satırında belirttiğiniz veritabanı yoluna otomatik olarak .mv.db uzantısını ekler, bu nedenle komuta ilettiğiniz DB dosyasının yolunun .mv.db uzantısını içermediğinden emin olun. Örneğin, bir uygulama veritabanını dışa aktardıysanız ve load-from-h2 kullanarak bu H2 veritabanındaki verileri bir PostgreSQL veritabanına yüklemek istiyorsanız, komutunuz şöyle görünecektir:

    export MB_DB_TYPE=postgres
    export MB_DB_DBNAME=patrona
    export MB_DB_PORT=5432
    export MB_DB_USER=<kullanıcı adı>
    export MB_DB_PASS=<parola>
    export MB_DB_HOST=localhost
    java --add-opens java.base/java.nio=ALL-UNNAMED -jar patrona.jar load-from-h2 /path/to/patrona.db # .mv.db'yi dahil etmeyin

Bir Patrona'nın Pro veya Enterprise sürümünü kullanıyorsanız, uygulama veritabanınızın anlık görüntüsünü almak için serileştirme kullanabilirsiniz. Serileştirme, yeni bir Patrona örneğinde soruları ve panoları önceden yüklemek istediğinizde kullanışlıdır.

Düşürmeye mi çalışıyorsunuz?

Temel neden: Patrona, düşürmeyi (yani, uygulamanın önceki bir sürümüne geri dönmeyi) desteklemez.

Atılacak adımlar:

  1. Patrona'yı kapatın.
  2. Yükseltmeyi veya düşürmeyi denemeden önce yaptığınız uygulama veritabanının yedek kopyasını geri yükleyin.
  3. Geri dönmek istediğiniz eski sürümün JAR dosyasını veya kapsayıcısını geri yükleyin.
  4. Patrona'yı yeniden başlatın.

Uygulama veritabanı kilitli mi?

Temel neden: Bazen Patrona, önceki bir çalıştırma sırasında bir uygulama veritabanı kilidi düzgün şekilde temizlenmediği için başlatılamaz. Hata mesajı şöyle görünür:

liquibase.exception.DatabaseException: liquibase.exception.LockException: Could not acquire change log lock.

Atılacak adımlar:

  1. Patrona'nın kurulu olduğu sunucuda bir kabuk açın ve şu komutu çalıştırarak kilitleri manuel olarak temizleyin:

    java --add-opens java.base/java.nio=ALL-UNNAMED -jar patrona.jar migrate release-locks
  2. Bu komut tamamlandıktan sonra, Patrona örneğinizi normal şekilde yeniden başlatın (migrate release-locks bayrağı olmadan).

Uygulama veritabanı bozuk mu?

Temel neden: H2, üretim kalitesinde veritabanı yönetim sistemlerinden daha az güvenilirdir ve bazen veritabanının kendisi bozulur. Bu, uygulama veritabanında veri kaybına neden olabilir, ancak Patrona'nın bağlı olduğu veritabanlarındaki verilere zarar veremez.

Atılacak adımlar: Hata mesajları, uygulama veritabanının nasıl bozulduğuna bağlı olarak değişebilir, ancak çoğu durumda günlük mesajında h2'den bahsedilecektir. Tipik bir komut ve mesaj şöyledir:

myUser@myIp:~$ java --add-opens java.base/java.nio=ALL-UNNAMED -cp patrona.jar org.h2.tools.RunScript -script whatever.sql -url jdbc:h2:~/patrona.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)
[vb.]

Bu nasıl düzeltilir: Tüm H2 hataları kurtarılamaz (bu nedenle H2 kullanıyorsanız, lütfen uygulama veritabanı dosyası için bir yedekleme stratejiniz olsun).

Yakın zamanda bir sürüm çalıştırıyorsanız ve H2 kullanıyorsanız, uygulama veritabanı patrona.db.mv.db içinde saklanır. - Patrona örneğinin çalıştığı sunucuda bir kabuk açın ve aşağıdaki dört komutu çalıştırarak bozuk H2 dosyasını kurtarmayı deneyin:

java -cp patrona.jar org.h2.tools.Recover

mv patrona.db.mv.db patrona-old.db.mv.db

touch patrona.db.mv.db

java --add-opens java.base/java.nio=ALL-UNNAMED -cp target/uberjar/patrona.jar org.h2.tools.RunScript -script patrona.db.h2.sql -url jdbc:h2:`pwd`/patrona.db

Patrona'yı Windows 10'da H2 ile mi çalıştırıyorsunuz?

Temel neden: Windows 10'daki bazı durumlarda, Patrona JAR'ının uygulama veritabanı için yerel dosyalar oluşturma iznine sahip olması gerekir. JAR'ı çalıştırırken, şöyle bir hata mesajı görürsünüz:

Exception in thread "main" java.lang.AssertionError: Assert failed: Unable to connect to Patrona DB.

Atılacak adımlar:

  1. Patrona JAR dosyasına sağ tıklayın (uygulama veritabanı dosyasına değil).
  2. "Özellikler"i seçin.
  3. "Engellemeyi kaldır"ı seçin.

Uygulama veritabanının yüklenmesi çok uzun mu sürüyor?

Temel neden: Uygulama veritabanınız olarak H2 kullanıyorsunuz ve uygulama veritabanı o kadar büyük ki 5 saniyeden daha kısa sürede yüklenemiyor (bu varsayılan zaman aşımı değeridir). Patrona'yı başlatmaya çalıştığınızda konsolda "Zaman Aşımı" mesajı görünecektir.

Atılacak adımlar:

  1. Uygulama veritabanı için PostgreSQL gibi üretim kalitesinde bir veritabanı kullanın (tercih edilir).
  2. Yönetim Paneli'ne gidin ve uygulama veritabanı için zaman aşımı ayarını artırın.
  3. Patrona'yı daha hızlı bir sunucuya taşıyın (özellikle daha hızlı disklere sahip bir sunucuya).