Firebird/SQL - porównanie 2 tabel

0

Witam
Powiedzmy że jest program który działa w dwóch różnych miastach.
Jest to baza Firebird "PRACOWNICY" (pracownicy.gdb), która jest filtrowana zależnie od nazwy miasta w którym program pracuje. Czyli we Wrocławiu pracownicy z Wrocławia (filtrowania po kolumnie MIEJSCOWOSC), a w Poznaniu pracownicy z Poznania.

Rzecz w tym, że co jakiś czas jest robiona we Wrocławiu kopia pliku bazodanowego pracownicy.gdb i przywożona do Poznania, gdzie trzeba zamienić z tamtejszym plikiem pracownicy.gdb, al tu się pojawia problem.

Wtedy nadpiszę plik poznański i stracę wszystkich pracowników z Poznania, którzy byli wprowadzeni, a których ja nie miałem u siebie we Wrocławiu.

Czy da się w Firebirdzie jakoś porównać dwie tabele i przeniść brakujące rekordy za pomocą Delphi (komponenty IBX)?

Mam nadzieję, że rozumiecie o co chodzi i że zbytnio nie namieszałem. :-)

Wiem, że można byłoby zrobić bazę zdalną a nie lokalną, ale ja nie umiem i wpadłem na taki a nie inny sposób aktualizowania bazy. Ja tylko mam jeździć i paczki rozwozić. :-)

0

Po co więc ta zabawa skoro w Poznaniu nie są potrzebni Ci z Wrocka ?

To może zamiast kopii bazy danych eksportuj ją do jakiegoś skrytpu który robi inserty. Skrypt nie powinien zawierać pracowników z Poznania. Przed wykonaniem skryptu który robi inserty mógłbyś wywalić wszystkich z poza Poznania.

Inna metoda to wykorzystanie replikacji. Mechanizm możesz sobie napisać, albo skorzystać z gotowego rozwiązania (nie wiem jakie są, ale jakieś są).

b

0

Baza zdalna wydaje mi się nie być nigdy dobrym rozwiązaniem. Lepiej zrobić aplikację client-server i wtedy część serwerowa łączy się z bazą lokalną. Poza tym może po prostu zrobić kopię bazy zsynchronizowaną z nią? Wtedy dane są natychmiast aktualne w obu bazach. Robi się to przez CREATE SHADOW. Dobrze jest obie kopie umieścić na różnych serwerach plikowych podłączonych do różnych źródeł zasilania, dla bezpieczeństwa awarii sprzętowej i zasilania. Należy pamiętać, że awaria zasilania w czasie zapisu do bazy może nieodwracalnie uszkodzić plik bazy danych. Jeśli nie stosujemy UPS należy koniecznie ustawić wyłączenie buforowania w panelu administracyjnym bazy danych ForcedWrites na wartość Enabled co zmniejszy ryzyko awarii.

0
Mariusz Jędrzejowski napisał(a)

Poza tym może po prostu zrobić kopię bazy zsynchronizowaną z nią? Wtedy dane są natychmiast aktualne w obu bazach. Robi się to przez CREATE SHADOW.

Możesz to rozwinąć ?

0
b0bik napisał(a)
Mariusz Jędrzejowski napisał(a)

Poza tym może po prostu zrobić kopię bazy zsynchronizowaną z nią? Wtedy dane są natychmiast aktualne w obu bazach. Robi się to przez CREATE SHADOW.

Możesz to rozwinąć ?

CREATE SHADOW is used to guard against loss of access to a database by
establishing one or more copies of the database on secondary storage devices.
Each copy of the database consists of one or more shadow files, referred

Syntax CREATE SHADOW set_num [AUTO | MANUAL] [CONDITIONAL]
'filespec' [LENGTH [=] int [PAGE[S]]]
[secondary_file];

Resztę znajdziesz w dokumentacji do posiadanej bazy danych.
Opis dotyczy interbase ale przypuszczam że firebird ma tą samą funkcję. Nie używałem tego, więc dokładnie nie znam praktycznie jak to działa.

0

Jak działa CREATE SHADOW to ja wiem. Chciałem żebyś rozwinął jak Twoja wypowiedź ma pomóc osobie pytającej - w moim przekonaniu nijak. Chyba że myślisz że ten SHADOW może być w poznaniu a baza we wrocławiu : )

0

Są zaawansowane rozwiązania dotyczące tak zwanych "baz rozproszonych", żeby zapewnić mechanizm replikacji bazy dokładnie w tym samym czasie nawet jeśli są umieszczone w różnych miastach. Jednak nie wydaje mi się to takie proste do skonfigurowania i nie wiem czy baza firebird je wspiera. W prostszych przypadkach radziłbym jednak zrobić centralną bazę danych dostępną przez aplikację client-server bo inaczej mogą wystąpić po prostu poważne błędy logiczne jeśli będą robione sprzeczne ze sobą działania dotyczące tych samych danych przez różnych użytkowników, gdy te bazy nie będą ze sobą połączone.

0
Mariusz Jędrzejowski napisał(a)

Są zaawansowane rozwiązania dotyczące tak zwanych "baz rozproszonych", żeby zapewnić mechanizm replikacji bazy dokładnie w tym samym czasie nawet jeśli są umieszczone w różnych miastach. Jednak nie wydaje mi się to takie proste do skonfigurowania i nie wiem czy baza firebird je wspiera. W prostszych przypadkach radziłbym jednak zrobić centralną bazę danych dostępną przez aplikację client-server bo inaczej mogą wystąpić po prostu poważne błędy logiczne jeśli będą robione sprzeczne ze sobą działania dotyczące tych samych danych przez różnych użytkowników, gdy te bazy nie będą ze sobą połączone.

Czyli to co mówiłem na początku - replikacja synchroniczna lub nie. Czy Firebird ją wspiera - chyba tak, u nas od kilku lat u kilkudziesięciu klientów taka replikacja działa ..

1 użytkowników online, w tym zalogowanych: 0, gości: 1