Baza danych "osadzona", "podzielona" oraz w "trybie serwera"

Dokumentacja tworzona przez użytkowników dla użytkowników
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Baza danych "osadzona", "podzielona" oraz w "trybie serwera"

Post autor: Rafkus »

Porządkowałem swoje pliki w pracy i poznajdywałem parę ciekawych notatek dotyczących użytkowania Base. A jako, że mamy mało ciekawych poradników w naszym języku, postanowiłem udostępnić je tutaj. Cała ta wiedza przedstawiona tutaj i udostępnione pliki to dzieło Villeroy i DCAM dwóch członków angielskiego forum AOO. W dostarczonych plikach pozwoliłem sobie na drobne, kosmetyczne zmiany oraz na przetłumaczenie komunikatów na nasz język. Linki do źródeł:
1. Jak uniknąć utraty danych w bazie:
https://forum.openoffice.org/en/forum/v ... 83&t=17567
2. Szablon podzielonej bazy danych:
https://forum.openoffice.org/en/forum/v ... 83&t=61183
3. Uruchomienie HSQLDB w trybie serwera (dla wielu użytkowników):
https://forum.openoffice.org/en/forum/v ... 85#p257585
https://forum.openoffice.org/en/forum/v ... 50#p298250
4. Do napisania tego posta skorzystam również z informacji zawartych tutaj:
https://wiki.openoffice.org/wiki/FAQ_(Base)#HSQLDB

(1,4) WPROWADZENIE:
BASE nie jest bazą danych i to musi być jasne. Base to interfejs do bazy danych.
Przykładowo weźmy pod uwagę jakieś biuro turystyczne, posiada sporo rożnych danych: ofert wakacyjnych, dane klientów, dane hoteli … więc można powiedzieć, że jest bazą danych. I teraz pytanie czy o osobie tam pracującej można powiedzieć że też jest biurem turystycznym? Nie, po prostu tam tylko pracuje, pomaga zarządzać danymi. Jeśli tego pracownika przydzieliłoby się do innego biura, to dzięki jego wiedzy będzie mógł pracować w nowym miejscu, z pewnymi drobnymi wyjątkami, równie skutecznie. Lećmy dalej z przykładem. Szef postanowił wyjść z biura do klientów, rozejrzał się po rynku i znalazł rozwiązanie, cud techniki: samochodzik marki OpenOffice.org (nawiązuję do wcześniejszych wersji), wyposażonego w maszynę do pisania (Writer), kalkulator (Calc), blok rysunkowy (Draw) a ponadto przenośne biuro (Base) czyli namiocik, składany stolik, krzesła i karton na dokumenty. I to wszystko oczywiście mieści się w bagażniku. Ten namiocik z kartonem stanowi tzw. silnik bazy danych. I w ten sposób pracownik może teraz jechać gdziekolwiek aby otworzyć biuro w dowolnym miejscu.
Mam nadzieję, że to porównanie pomogło zrozumieć zastosowanie BASE, a więc pomaga ono zarządzać danymi: posiada narzędzia do tworzenia zapytań do tabel (SQL), formularzy i raportów odzwierciedlają ce dane zawarte w „silniku bazy”.
W praktyce Base może czytać lub inaczej pracować z różnymi silnikami baz danych (np. PostgreSQL, MySQL , Firebrid ...), a każdy z nich ma swój własny specjalny SQL lub własne funkcje, ale możemy mieć ten sam interfejs graficzny dla formularzy niezależnie od zastosowanego silnika.
AOO i LO standardowo jest wyposażony w silnik, wykonany w JAVA (dlatego base go wymaga): HSQLDB w wersji 1.8. Jest to dość stary silnik i istnieją jego nowsze wersje, lecz AOO i LO wydają się nie być nimi zainteresowani (LO od niedawna proponuje Firebird).
Niestety BASE jest bardzo wrażliwe na zakłócenia. Głównym problemem ze stabilnością, jest to, że cały plik AOO lub LO po zamknięciu jest zapisywany w skompresowanym pliku (takim jak .zip), a po otwarciu jest dekompresowany (w przykładzie odpowiada to rozłożeniu/złożeniu namiotu wraz dokumentami z bagażnika). Taki pojedynczy plik base (zapisany w formacie*.odb) jest tzw.: OSADZONĄ bazą danych. W pewnym momencie (de)kompresji dokument może ulec uszkodzeniu i chociaż zdarza się to czasami również w programie Writer czy też w Calc, w Base występuje niestety znacznie częściej.

Na angielskim forum można znaleźć pewne rozwiązanie zaproponowane przez DCAM, Villeroy i innych, polegające na PODZIELENIU bazy danych. W powyższym przykładzie odpowiadało by to podpięciu do samochodu przyczepki z szafą na dokumenty. W ten sposób odpada cała zabawa z rozkładaniem i składaniem namiotu oraz danych. Zatem podzielona baza danych składa się z dwóch głównych elementów:
1. Z podstawowego pliku, zapisanego w formacie .odb, zawierającego informacje o połączeniu z bazą danych oraz wszelkie zapytania, formularze, raporty i stosowane makra. Ja nazywam go sobie plikiem prezencji (”frontend”).
2. Z plików bazy danych HSQL, którymi są najczęściej cztery oddzielne pliki z rozszerzeniami: *.script, *.properties, *.data, *.backup. Pliki te stanowią zaplecze bazy (”backend”).
Dzięki podzieleniu można również zapewnić jednoczesny dostęp do danych kilku użytkownikom jednocześnie w sieci lub lokalnie – baza danych pracuje w TRYBIE SERWERA.

PS. Wydaje mi się, że już od około dwóch lat używam podzielonej bazy i nie przypominam sobie, żeby wystąpiła na niej jakaś awaria...

Jak utworzyć nową podzieloną bazę danych.
Jest na to kilka sposobów, przedstawię tylko ten który przypadł mi do gustu.
(2) Jeśli w bazie chcesz zastosować nowszy silnik HSQL to proponuję pobrać ten szablon: Split_HSQLDB_2.3.2_Wizard_v3d_pl.odb. Jest to przetłumaczona na język polski i nieznacznie zmieniona przeze mnie wersja pliku dostarczonego przez DACM.
DACM pisze:"Szablon łączy wstępnie zdefiniowany dokument podstawowy (.odb) z popularnym silnikiem HSQLDB 2.3 - łącznie zapewnia jedną z najpotężniejszych i najbardziej elastycznych, wieloplatformowych opcji baz danych dostępnych obecnie na komputery stacjonarne. Najważniejsze funkcje obejmują: nowy kreator tworzenia baz danych; Metoda przeciągnij i upuść zapewnia przenośność bazy danych ; bezproblemowa integracja HSQLDB 2.3.x; oraz poprawka błędu konfiguracji AutoValue w podstawowym interfejsie użytkownika . (…) Podobnie starszy plik „ osadzonej bazy danych ” może zostać przekonwertowany na „podzieloną bazę danych”, jeśli jest to konieczne, aby uniknąć niespodziewanego uszkodzenia danych w programie Base"
Zaproponowany szablon jest w rzeczywistości dokumentem wykorzystującym zapisane w nim makro do poprawnej konfiguracji podzielonej bazy. Aby działał poprawnie, ten plik radzę umieścić umieścić w zaufanym katalogu (proszę zapoznać się z opracowaniem Jermora dotyczący użytkowania makr w AOO i LO: https://yestok.pl/ooo/y58.php) . Makro początkowo monituje użytkownika o podanie nazwy dla tworzonej bazy danych. Następnie dodaje kopię mechanizmu HSQLDB 2.3.2 do folderu podzielonej bazy danych (podfolder „driver”) i konfiguruje szablon do dostępu do bazy danych dla jednego użytkownika na podstawie bieżącej ścieżki folderu. Po kliknięciu ikony Tabele w Base, nawiązywane jest połączenie z HSQLDB. Silnik automatycznie tworzy nową bazę danych w folderze podzielonej bazy danych (podfolderze „database”).

Jeśli chodzi o przekonwertowanie starszych baz na podzielone to w dostarczonym szablonie jest biblioteka FreeHSQLDB, trzeba ją całą skopiować do interfejsu OO/LO czyli do „Moich makr” a następnie z modułu FreeHSQLDB uruchomić makro Main. W celu ułatwienia tej procedury wyeksportowałem tą bibliotekę do pliku Wyodrębnij_bazę.otx. Dzięki temu wystarczy teraz kliknąć 2 razy ten plik aby rozpocząć proces instalacji rozszerzenia. Dodatkowo w menu Narzędzia zostanie dodane nowe polecenie „Wyodrębnij osadzone pliki” będące skrótem do makra Main. Wersja w tym rozszerzeniu różni się nieco od tej w szablonie, bo podczas użytkowania oryginalnej wersji natknąłem się na pewne błędy więc postarałem się je usunąć; zmieniłem też nieco interfejs.
Jak używać tego rozszerzenia.
  • 1. Uruchom bazę do podzielenia (albo dla bezpieczeństwa kopię), z menu Narzędzia → Wyodrębnij osadzone pliki
    2. Kliknij przycisk wyodrębnij
    3. Przyciskiem Set wskaż ścieżkę do pliku hsqldb.jar, u mnie znajduje się on:
    • ◦ dla OO: C:/Program Files (x86)/OpenOffice 4/program/classes/hsqldb.jar
      ◦ dla LO: C:/Program Files /LibreOffice/program/classes/hsqldb.jar
      W tych lokacjach HSQLDB jest w wersji 1.8, ewentualnie możesz podać ścieżkę do nowszej wersji
    4. Kliknij przycisk ”Wyodrębnij & połącz” zamknij okno i to już wszystko – masz podzieloną bazę danych.
UWAGA: Uważaj przy testowaniu nowszej wersji silnika, dane zostaną zaktualizowane do zastosowanej wersji silnika i nie będą już działały w wersji 1.8. Dlatego TESTUJ sobie NA KOPIACH danych.
Jeśli teraz przyjrzysz się wielkości pliku przed podziałem i po stwierdzisz, że praktycznie nic się nie zmieniło. Jest to spowodowane tym, że dane bazy tak naprawdę nie zostały wyodrębnione ale tylko skopiowane do zewnętrznego folderu. Jak go odchudzić: uważam że najwygodniej:
  • 1. Pobierz plik mydb.server.odb (nazwę oczywiście można zmienić). Będzie on plikiem front-endu (prezencji);
    2. Z menu Narzędzia → Wyodrębnij osadzone pliki
    3. Kliknij przycisk ustawienia połączenia
    4. Przyciskiem Set wskaż ścieżkę do pliku hsqldb.jar…
    5. Przyciskiem Podłącz pliki zaplecza HSQL… wskaż z którą "wyodrębnioną" bazą chcesz się połączyć, trzeba wskazać ścieżkę do folderu z plikami bazy, wskazać plik *.script
    6. Uruchom oryginalną bazę danych, przeciągnij i upuść wszystkie kwerendy, formularze, raporty ze starej bazy do nowej, w razie konieczności skopiuj wszystkie makra ze starej bazy.
    7. Zapisz zmiany, plik powinien być znacznie ”chudszy”.
Niestety trzeba wspomnieć o pewnej irytującej WADZIE PODZIELONEJ bazy.
Na początku wszystko działa dobrze, można tworzyć nowe tabele, z auto numerycznym polem kluczem, można tworzyć zapytania, formularze raporty… Gdzie zatem tkwi problem? Właśnie w mechanizmie tworzenia tabel. W nowo utworzonej tabeli auto numeryczne pole NIE BĘDZIE Z AUTOPRZYROSTEM a dodatkowo NIE MA MOŻLIWOŚCI EDYCJI PÓL TABEL (przynajmniej prostego), będzie możliwość dodania nowego pola, ale poprawić starego już nie. Wszelkie zmiany w strukturze tabeli musi odbywać się przy pomocy instrukcji SQL. Aby naprawić automatyczną numerację z panelu tabeli, z menu Narzędzia wybierz> SQL:
  • • Jeżeli używasz HSQLDB w wersji 1.8 do okna wpisz polecenie:

    Kod: Zaznacz cały

    ALTER TABLE "NazwaTabeli" ALTER COLUMN "NazwaKolumnyID" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1) PRIMARY KEY
    • Jeżeli używasz HSQLDB w wrsji 2.3:

    Kod: Zaznacz cały

    ALTER TABLE "NazwaTabeli" ALTER COLUMN "NazwaKolumnyID" INT GENERATED BY DEFAULT AS IDENTITY
    SHUTDOWN COMPACT
    po poleceniu SHUTDOWN COMPACT należy zamknąć bazę i uruchomić ponownie.
    • Jeśli chcesz zresetować klucz podstawowy z określonego numeru np. 100, trzeba użyć takiego kodu

    Kod: Zaznacz cały

    ALTER TABLE "NazwaTabeli" ALTER COLUMN "NazwaKolumnyID" RESTART WITH 100
Każdą zmianę na właściwości jakiegoś pola (np. rozszerzyć maksymalny rozmiar pola tekstowego), wymaga zastosowania jakieś instrukcji SQL, czyli poszukiwań wiedzy w internecie.
Załączniki
Wyodrębnij_bazę.oxt
Rozszerzenie do base:
(10.6 KiB) Pobrany 220 razy
mydb.server.odb
Plik front-endu (prezencji):
(2.1 KiB) Pobrany 237 razy
Split_HSQLDB_2.3.2_Wizard_v3d_pl.odb
Szablon podzielonej bazy danych HSQL w wersji 2.3.2
(1.48 MiB) Pobrany 245 razy
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Baza danych "osadzona", "podzielona" oraz w "trybie serwera"

Post autor: Rafkus »

Na takiej "podzielonej" bazie danych może pracować kilku użytkowników jednocześnie w tzw. "trybie serwera" (współużytkowanie bazy danych).
Przyznam, że troszkę się zastanawiałem czy "pisać" tutaj o tym zagadnieniu - nie jestem informatykiem a cała ta wiedza została ściągnięta i przetłumaczona z angielskiego forum (patrz linki do źródeł, punkt 3 w pierwszym poście). Ja sam tylko skorzystałem z instrukcji tam zawartych, dzięki nim udało mi się uruchomić serwer HSQLDB. Niestety nie wiem jak by to działało w sieci - na naszym zakładowym serwerze nie ma zainstalowanej JAVY a ja nie posiadam uprawnień aby dokonać na nim jakiś zmian.
DACM pisze: (...)Podczas gdy plik Base .odb jest używany do uruchamiania / zatrzymywania silnika HSQLDB w trybie plików pojedynczego użytkownika, (program)Base nie jest zaangażowany w uruchamianie HSQLDB w trybie serwera. Zwykle używamy plików wsadowych lub skryptów do wydawania niezbędnych poleceń uruchamiania i zamykania [Java] z poziomu konsoli / okna wiersza poleceń. Do tego zadania możesz również użyć javascript. W przypadku OS-X lub Linux może być konieczne dostosowanie plików wsadowych systemu Windows (server.START.bat i server.STOP.bat). Zasadniczo potrzebujesz jednego polecenia do uruchomienia aplikacji serwera HSQLDB, a drugiego do zamknięcia serwera.
(...)
Po uruchomieniu HSQLDB w trybie serwera przy użyciu pliku wsadowego / skryptu rozpoczyna nasłuchiwanie żądań dostępu do bazy danych na porcie.Teoretycznie można uruchomić wiele serwerów HSQLDB na różnych portach, ale najpierw należy wyczerpać możliwości wielu baz danych w jednej instancji w trybie serwera. Podstawowy plik .odb musi być skonfigurowany, aby uzyskać dostęp do serwera HSQLDB lokalnie (na tym samym komputerze, na którym działa serwer HSQLDB) lub zdalnie przy użyciu adresu IP lub nazwy komputera hosta HSQLDB. W sieci LAN adres IP hosta-serwera jest zazwyczaj przypisywany przez router (podlega zmianie za każdym razem, gdy router jest resetowany). Możesz ustawić statyczny adres IP dla maszyny host-serwer lub może być łatwiejsze użycie nazwy komputera serwera hosta w adresie URL źródła danych (jak opisano poniżej)
(...)
Plik bazy .odb jest skonfigurowany do HSQLDB dostępu trybie serwera przy użyciu polecenia z menu Edytuj ---> Baza danych> Właściwości ...> URL źródła danych'. 
(...)
mydb.server.odb jest skonfigurowany do uzyskiwania dostępu do działającej bazy danych HSQLDB działającej w trybie serwera, przy czym obie aplikacje działają na tym samym komputerze (w oddzielnych procesach). Innymi słowy, adres URL źródła danych przechowywany w pliku .odb zawiera tylko "localhost" (mydb.server.odb), co oznacza, że ​​nie wygląda dalej niż maszyna lokalna dla serwera hosta HSQLDB. 

Dostęp do tego samego komputera przy użyciu „localhost” (wykorzystane w pliku):

Kod: Zaznacz cały

hsqldb:hsql://localhost/;default_schema=true;get_column_name=false
Dostęp do sieci LAN z komputera klienckiego przy użyciu sieciowej nazwy komputera hosta-serwera ( zalecane ):

Kod: Zaznacz cały

hsqldb:hsql://db_host_computer_network_name/;default_schema=true;get_column_name=false
Dostęp do sieci LAN z komputera klienckiego przy użyciu adresu IP komputera host-serwer (ostatecznie wymaga statycznego adresu IP na komputerze host-serwer):

Kod: Zaznacz cały

hsqldb:hsql://192.168.1.123/;default_schema=true;get_column_name=false
DACM udostępnił m.in. 6 plików, przydatnych w procesie konfigurowania domyślnego HSQLDB 1.8.0.10 lub HSQLDB 2.x w trybie serwera :
  • • mydb.server.odb - plik front-endu podzielonej bazy
    • server.START.bat, server.STOP.bat, server.CHECKPOINT.bat - pliki wsadowe specyficzne dla systemu Windows; wymagają edycji według instrukcji w nich zawartych;
    • START.vbs oraz STOP.vbs – skrypty VBS specyficzne dla systemu Windows; uruchamia po cichu (w tle) server.start.bat oraz server.stop.bat
Należy je umieścić w tym samym folderze co pliki zaplecza bazy danych (czyli czyli obok plików : *.script, *.properties, *.data, *.backup). Trzy pliki *.bat (są to pliki tekstowe, których rozszerzenie zostało zmienione), są napisane w języku Java, umożliwiają uruchomienie HSQLDB w trybie serwera
Pliki te będą muszą zostać odpowiednio prze-edytowane, ponieważ odnoszą się one do położenia i wersji Javy, która jest zainstalowana na danym komputerze. Przy jej kolejnych aktualizacjach trzeba będzie samodzielnie zmieniać ścieżkę do pliku.
Aby edytować wskaż kursorem myszy plik server.START.bat i kliknij prawy przycisk, wybierz edytuj. REM na początku wiersza oznacza, że ta linia jest komentarzem - nie jest brana pod uwagę podczas uruchamiania serwera. Znajdź i zmień kolejne linijki kodu w tekście:
1. W poniższej linijce zdecydujesz z jakiej wersji silnika bazy danych chcesz korzystać, jeśli to pozostawisz bez zmian będziesz pracować w bazie danych z silnikiem HSQLDB 1.8. Jeśli zamiast "1" wpiszesz "2" będzie to oznaczać że chcesz zastosować HSQLDB 2.3.

Kod: Zaznacz cały

set hsqldb=1
2. Podaj TWOJĄ ścieżkę do Javy (twoja może być inna);PAMIĘTAJ, że:
  • * istniejąca numeracja w ścieżce zmienia się wraz z wersjami Javy, tą numerację trzeba będzie zmieniać samodzielnie;
    * w przypadku stosowania AOO i HSQLDB w wersji 1.8 wymagana jest java 32 bitowa;
    * HSQLDB w wersji 2.3 wymaga javy 64 bitowa.

Kod: Zaznacz cały

set javapath=C:\Program Files\Java\jre1.8.0_261\bin\java.exe 
3. Pierwsze wystąpienie "jarpath", Jest to ścieżka do hsqldb.jar zainstalowanej standardowo wraz z AOO lub LO

Kod: Zaznacz cały

set jarpath=C:\Program Files (x86)\OpenOffice 4\program\classes\hsqldb.jar
4. Drugie wystąpienie "jarpath", jeśli wcześniej ustawiłeś w linii "set hsqldb=2" wskaż, gdzie zainstalowałeś hsqldb.jar w wersji 2.3.
UWAGA: w plikach server.STOP.bat oraz server.CHECKPOINT.bat należy tutaj wskazać ścieżkę do pliku sqltool.jar

Kod: Zaznacz cały

set jarpath=C:\Pliki serwera\driver\hsqldb.jar
5.Jeżeli skasujesz REM, oraz wpiszesz nazwę swojego pliku front-endu zamiast mydb.odb, to uruchamiając serwer uruchomi się twoja baza danych

Kod: Zaznacz cały

REM start mydb.odb
6.Zamiast mydb podaj jaką wspólną nazwę noszą pliki zaplecza bazy danych (czyli pliki : mydb .script, mydb .properties, mydb .data, mydb .backup)

Kod: Zaznacz cały

"%javapath%" -cp "%jarpath%" org.hsqldb.Server -database.0 file:mydb;hsqldb.default_table_type=cached
Podobnie należy pozmieniać w plikach server.STOP.bat oraz server.CHECKPOINT.bat – postępuj zgodnie z komentarzami.

Przed uruchomieniem serwera należy najpierw W AOO lub LO ustawić globalną ścieżkę do klasy na każdym stanowisku, który będzie używany Base:
• Z manu Narzędzia → wybierz Opcje → Java (W LO: wybierz Narzędzia → Opcje → Zaawansowane)
• Naciśnij przycisk Ścieżka do klas...
• Naciśnij przycisk Dodaj archiwum...
• Przejdź między zainstalowanymi programami, aby zlokalizować plik hsqldb.jar
◦ W przypadku AOO lub OOo przejdź do: ...OpenOffice X\basis\program\classes\hsqldb.jar
◦ W przypadku LibreOffice przejdź do: ...LibreOffice X\program\classes\hsqldb.jar
◦ Możesz również podać lolalizację do nowszej wersji np.: 2.3.2,
• Kliknij: OK dwukrotnie i ponownie uruchom AOO lub LO
UWAGA: Jeśli zdecydowałeś się korzystać z nowszej wersji HSQLDB, to PRZYPOMINAM – nie należy wówczas próbować uruchamiać starszych baz danych bo dane w plikach zostaną uszkodzone.
  • To tylko PRZYPUSZCZENIE, którego DACM nie wyklucza:
    BYĆ MOŻE, powyższy krok, obecnie jest zbędny. Zamiast niego ścieżkę do klasy można by zapisać bezpośrednio w pliku front-endu (w pliku mydb.server.odb). Można to zrobić przy pomocy wcześniejszego rozszerzenia Wyodrębnij_bazę.oxt, na "karcie wyodrębnij" przyciskiem Set ustawić ścieżkę do pliku hsqldb.jar. W tym przypadku należy zadbać aby ten plik (hsqldb) był w tej samej lokalizacji na wszystkich stanowiskach. Ale powtarzam, to trzeba przetestować samodzielnie.
Jak można wywnioskować, Start służy do uruchomienia serwera, a Checkpoint do uporządkowania danych.
Po poprawnym uruchomieniu server.START.bat pojawi się okno wiersza polecenia:
server.jpg
Aby wyłączyć serwer, uruchom plik Stop, unikaj zamknięcia konsoli C:/ krzyżykiem z prawego górnego rogu. Podobno może to doprowadzić do zawieszenia całego serwera.

Istnieją jeszcze dwa inne pliki .vbs, które robią praktycznie to samo co poprzednie, ale pliki .bat otwierają konsolę C: /, w której widać, komunikaty po których można stwierdzić czy serwer działa. W przypadku tych dwóch one działają w tle (konsoli C:/ nie widać), a jeśli z jakiegoś powodu połączenie zostało przerwane, nie zobaczymy, co się stało.
Załączniki
Pliki serwera.zip
(5.85 KiB) Pobrany 230 razy
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
ODPOWIEDZ