Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zsynchronizować dwa (lub n) procesy replikacji dla baz danych SQL Server?

Wydaje się, że dane zadanie nie może być rozwiązane przy danych ograniczeniach. Jeśli dobrze zrozumiałem, liczba baz danych i schemat wierszy są stałymi.

Zatem zmienne, które pozostały:

  • Dodatkowe „wstrzyknięcia” do bazy danych
  • Sztuczki czasowe
  • Sztuczki wyzwalające
  • "Późne wiązanie" zmian, które nie zostały zreplikowane na czas

Obecnie znalazłem tylko jeden pomysł, który wydaje się działać:

  1. Dodaj wyzwalacz do tabeli „Linie”, aby zmodyfikować znacznik czasu rekordu „Zamówienie” (last_line_time)
  2. W replice poczekaj, aż pojawi się Linia z czasem równym last_line_time.
    • Jeśli max(lines.line_time)> order.last_line_time to zamówienie jest przestarzałe
    • Jeśli max(lines.line_time)
    • Jeśli max(lines.line_time) ==order.last_line_time to na razie wszystko jest w porządku :)

Ale ten przypadek może zakończyć się niepowodzeniem w nieskończonej pętli, jeśli linie są stale modyfikowane, a replika tabeli linii zawsze pozostaje w tyle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Niestandardowa funkcja agregująca (concat) w SQL Server

  2. Jak ograniczyć NULL jako parametr do procedury składowanej SQL Server?

  3. Jak pisać za pomocą BCP do zdalnego serwera SQL?

  4. Wybór danych z dwóch różnych serwerów w SQL Server

  5. Używanie GROUP BY z FIRST_VALUE i LAST_VALUE