Domanda

Sto creando un'app Web Intranet con un back-end Oracle. Oracle DB verrà replicato su un altro server per motivi non importanti per questa discussione. Sono ragionevolmente certo che useremo Oracle Basic Replication, non Advanced.

Qualcuno può spiegarmi perché la maggior parte delle discussioni sulle chiavi primarie sono simili a:

  • L'uso di ints con incremento automatico per PK è solo il 99% delle volte
  • TRANNE se si sta eseguendo la replica. Quindi utilizzare i GUID per i tuoi PK.

Nessuno sembra mai spiegare perché l'eccezione per la replica e non capisco perché.

È stato utile?

Soluzione

Credo che l'argomento GUID per la replica si applichi davvero solo se entrambi i server riceveranno nuovi dati. Quindi non vuoi che nuove righe siano in conflitto, quindi usa GUID come PK - la replica può andare in entrambi i modi.

Replichiamo continuamente le tabelle di incremento automatico, ma è una rigida replica master / slave in cui i dati vengono scritti solo sul Master.

Altri suggerimenti

Una sola parola: MERGE

L'unico modo in cui la replica di tipo merge può funzionare è se tutte le " master " le caselle possono creare una nuova chiave senza che sia in conflitto con le altre.

Se si considera cosa succede quando due server replicati tra loro e con dati aggiunti ad essi tra la sincronizzazione, il problema diventa evidente:

Time  Server  NewID
001   A       1
002   A       2
003 <sync of server A and B>
004   A       3
005   B       3
006 <sync of server A and B>

< --- due record diversi hanno lo stesso ID ora, quindi c'è un conflitto!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top