Skrypt SQL do synchronizacji dwóch baz danych

0

Witam, chcę napisać skrypt SQL, który synchronizuje dane pomiędzy dwoma bazami danych. Obie bazy mają identyczną strukturę. Do tej pory znalazłem jedynie poniższe rozwiązanie.

-- insert
INSERT INTO Target (ID, Value)
SELECT ID, Value FROM Source
WHERE NOT EXISTS (SELECT * FROM Target WHERE Target.ID = Source.ID);

-- update
UPDATE Target
SET Value = Source.Value
FROM Target INNER JOIN Source ON Target.ID = Source.ID

-- delete
DELETE FROM Target
WHERE NOT EXISTS (SELECT * FROM Source WHERE Target.ID = Source.ID)

Czyli dla wszystkich tabel w bazie danych trzeba pisać te 3 operacje. Czy jest jakiś inny, optymalny sposób?
Byłbym bardzo wdzięczny za każdą pomoc :)

1

Głupio. Dodaj chociaż jakiś timestamp ostatniej synchronizacji i timestamp ostatniej aktualizacji bo będziesz updatowal cała dziedzinę zawsze. Zresztą nie pisz tego bo to już napisane - poczytaj o replikatorach.

0

Tak - replikacja baz danych i użycie mechanizmów replikacji. Zdecydowanie wydajniejsze i bezpieczniejsze.
Mam jednak pytanie. Wytłumacz mi co to za magiczny system, który korzysta w taki dziwny sposób z dwóch baz danych. Przecież to nie zapewnia żadnej spójności a skoro nie zapewnia spójności to po co synchronizować takie bazy?

0

Mamy bazę testową i normalną używaną przez aplikację, i chciałbym w łatwy sposób co jakiś czas tę bazę testową zsynchronizować z tą "normalną", aby przeprowadzić testy na tych samych danych co mamy w aplikacji.

0

No to replikacja lub odbijaj bazę z produkcji co jakiś czas lub automatem co noc.

0

Biorąc gotowca unikniesz deadlockow, deduplikacji, obsługi bledow, schedulingu i masy rzeczy.

1

Najprościej to chyba backup produkcji i restore na teście.

Bo to nie jest synchronizacja, ręczne klepanie może być trudne, bo trzeba to robić w odpowiedniej kolejności, dodatkowo utrzymywać skrypt i aktualizować po każdej zmianie producenta...

0
katakrowa napisał(a):

Tak - replikacja baz danych i użycie mechanizmów replikacji. Zdecydowanie wydajniejsze i bezpieczniejsze.
Mam jednak pytanie. Wytłumacz mi co to za magiczny system, który korzysta w taki dziwny sposób z dwóch baz danych. Przecież to nie zapewnia żadnej spójności a skoro nie zapewnia spójności to po co synchronizować takie bazy?

Co ci tu da replikacja? No chyba, że testy nie piszą nic do bazy. W innym przypadku dane nie są już identyczne i replikacja nie zadziała z powodu konfliktów. Backup i restore jest ok, dopóki baza jest mała i nie trwa to za długo.

Chcąc podążać ścieżką, o której myśli autor, to trzeba mieć narzędzie do porównania dwóch baz i wygenerować skrypt, który wyrównuje bazy. Takie narzędzia są dostępne.

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