Le istruzioni UPDATE possono essere replicate come coppie DELETE/INSERT
Questo articolo descrive che le istruzioni Update possono essere replicate come coppie DELETE/INSERT.
Versione originale del prodotto: SQL Server
Numero KB originale: 238254
Riepilogo
Se una colonna che fa parte di un vincolo univoco viene aggiornata, SQL Server implementa l'aggiornamento come "aggiornamento posticipato", ovvero come coppia di DELETE
/INSERT
operazioni. Questo "aggiornamento posticipato" fa sì che la replica invii una coppia di DELETE
/INSERT
istruzioni ai sottoscrittori. Esistono anche altre situazioni che potrebbero causare un aggiornamento posticipato. Pertanto, qualsiasi logica di business implementata nei trigger o nelle UPDATE
stored procedure personalizzate nel Sottoscrittore deve essere inclusa anche nei trigger o nelle DELETE
/INSERT
stored procedure personalizzate.
Ulteriori informazioni
Il comportamento predefinito nella replica transazionale consiste nell'usare INSERT
UPDATE
e DELETE
stored procedure personalizzate per applicare le modifiche ai sottoscrittori.
INSERT
Le istruzioni eseguite nel server di pubblicazione vengono applicate ai sottoscrittori tramite una INSERT
chiamata di stored procedure. Analogamente, un'istruzione DELETE
viene applicata tramite una DELETE
chiamata di stored procedure.
Tuttavia, quando un'istruzione UPDATE
viene eseguita come "aggiornamento posticipato", l'agente di lettura log inserisce una coppia di chiamate di stored procedure nel database di DELETE
/INSERT
distribuzione da applicare ai Sottoscrittori anziché una chiamata alla stored procedure di aggiornamento. Si supponga, ad esempio, di avere una tabella di pubblicazione denominata TABLE1
, con queste tre colonne:
- col1 int
- col2 int
- col3 varchar(30)
L'unico vincolo univoco in TABLE1
viene definito in col1
tramite un vincolo di chiave primaria. Si supponga di avere un record (1,1,'Dallas').
Quando si esegue questo codice:
UPDATE TABLE1 set col1 = 3 where col3 = 'Dallas'
L'istruzione UPDATE
viene implementata da SQL Server come coppia diINSERT
DELETE
/istruzioni poiché si aggiorna col1
, che ha un indice univoco definito. Pertanto, il lettore di log inserisce una coppia di chiamate nel database di DELETE
/INSERT
distribuzione. Ciò può influire su qualsiasi logica di business presente nei trigger o nelle stored procedure personalizzate nel Sottoscrittore. È consigliabile incorporare la logica di business aggiuntiva nei DELETE
trigger e INSERT
nelle stored procedure per gestire questa situazione.
Se si preferisce usare una sola logica e si vuole che tutti i UPDATE
comandi vengano replicati come DELETE
/INSERT
coppie, è possibile abilitare un flag di traccia.
Inoltre, se si usa un filtro orizzontale nella pubblicazione e se la riga aggiornata non soddisfa una condizione di filtro, ai sottoscrittori viene inviata solo una DELETE
chiamata di routine. Se la riga aggiornata in precedenza non soddisfa la condizione di filtro, ma soddisfa la condizione dopo l'aggiornamento, viene inviata solo la chiamata di INSERT
routine tramite il processo di replica.
Nell'esempio precedente si supponga di avere anche un filtro orizzontale definito in TABLE1
: where col3 = 'Dallas'
. Se si esegue questo codice:
UPDATE table1 set col3 = 'New York' where col1 = 3
L'agente di lettura log inserisce solo una DELETE
chiamata di stored procedure da applicare ai sottoscrittori poiché la riga aggiornata non soddisfa i criteri di filtro orizzontale.
Ora, se si esegue questo codice:
UPDATE table1 set col3 = 'Dallas' where col1 = 3
Il logreader genera solo la chiamata alla INSERT
stored procedure, poiché la riga non soddisfaceva in precedenza la condizione di filtro.
Sebbene sia stata eseguita un'operazione UPDATE
nel server di pubblicazione, nel Sottoscrittore vengono applicati solo i comandi appropriati.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per