Udostępnij za pośrednictwem


Publikowanie wykonanie procedury przechowywanej w replikacji transakcyjnej

Jeśli jeden lub więcej procedur przechowywanych, które wykonane na Wydawca i wpływają na opublikowanych tabel, należy rozważyć tych procedur przechowywanych w publikacja jako artykuły wykonać procedura składowana.Definicja procedury (Instrukcja CREATE PROCEDURE) jest replikowany do subskrybenta podczas inicjowania subskrypcja; gdy procedura jest wykonywana w Wydawca, odpowiednią procedurą subskrybent wykonuje replikacja.Może to znacznie lepszą wydajność w przypadkach, gdzie wykonywane są operacje partia duże, ponieważ jest replikowany tylko wykonanie procedury pomijanie konieczności replikowania zmiany indywidualnie dla każdego wiersza.Załóżmy na przykład, utworzyć następującą procedura składowana w baza danych publikacja:

CREATE PROC give_raise AS
UPDATE EMPLOYEES SET salary = salary * 1.10

Poniższa procedura umożliwia każde 10 000 pracowników w firmie podwyżkę 10 procent.Podczas wykonywania tej procedura składowana w Wydawca, aktualizuje wynagrodzenia dla każdego pracownika.Bez replikacja wykonanie procedura składowana aktualizacja będzie wysłanych do subskrybentów jako duże, wieloetapowy transakcji:

BEGIN TRAN
UPDATE EMPLOYEES SET salary = salary * 1.10 WHERE PK = 'emp 1'
UPDATE EMPLOYEES SET salary = salary * 1.10 WHERE PK = 'emp 2'

I to powtarza aktualizacje 10 000.

Replikacja wykonać procedura składowana replikacji wysyła tylko polecenie do wykonać procedura składowana na subskrybenta zamiast pisania aktualizacje do baza danych dystrybucji i wysyłając je przez sieć do subskrybenta:

EXEC give_raise
Ważna informacjaWażne:

Procedura przechowywana replikacja nie jest odpowiedni dla wszystkich aplikacji.Jeżeli artykuł jest filtrowana poziomo, tak aby były różne zestawy wierszy wydawca niż przez subskrybenta, wykonywanie tej samej procedura składowana w obu zwraca różne wyniki.Podobnie, jeśli aktualizacja jest oparty na podzapytanie niezreplikowanej bazie innej tabela, wykonywanie taka sama procedura składowana w obu Wydawca i subskrybenta zwraca różne wyniki.

Aby opublikować wykonanie procedura składowana

Modyfikowanie procedury subskrybent

Domyślnie definicji procedura składowana na Wydawca propagowane poszczególnym subskrybentom.Jednakże można także modyfikować procedura składowana przez subskrybenta.Jest to przydatne, jeśli chcesz, aby różne logiki do wykonania w Wydawca i abonenta.Rozważmy na przykład sp_big_delete, procedura składowana przez wydawcę, który ma dwie funkcje: Usuwa średnio 1 000 000 wierszy z tabela w zreplikowanej big_table1 i aktualizuje tabela niezreplikowanej bazie big_table2.Zmniejszyć zapotrzebowanie na zasoby sieci, powinien propagować usunięcie wiersza 1 milion jako procedura składowana według publikacji sp_big_delete.Subskrybent, można zmodyfikować sp_big_delete usunąć tylko 1 miliona wierszy i nie wykonywania kolejnych aktualizacji big_table2.

Ostrzeżenie

Domyślnie, wszystkie zmiany wprowadzone przy użyciu ALTER PROCEDURE na Wydawca są propagowane do subskrybenta.Aby temu zapobiec, należy wyłączyć propagację zmian schematu przed wykonaniem ALTER PROCEDURE.Aby uzyskać informacje dotyczące zmiany schematu, zobacz Wprowadzanie zmian schematu na publikację baz danych.

Typy artykułów wykonanie procedury przechowywanej

Istnieją dwa różne sposoby, w których mogą być publikowane wykonanie procedura składowana: Artykuł wykonanie procedury serializować i procedury realizacji artykułu.

  • Serializować opcja jest zalecana, ponieważ replikuje wykonywania procedury, tylko wtedy, gdy procedura jest wykonywany w kontekście transakcji możliwy do serializacji.Jeżeli procedura składowana jest wykonywane z poza serializować transakcji, zmiany danych w tabelach opublikowane są replikowane jako seria DML instrukcji.Zachowanie to przyczynia się do wprowadzania danych przez subskrybenta zgodne z danymi na Wydawca.Jest to szczególnie użyteczne dla partia operacji, takich jak duże czyszczenia.

  • Opcja wykonanie procedury jest możliwe, że wykonanie może zreplikowane do wszystkich subskrybentów, niezależnie od tego, czy poszczególne instrukcje w procedura składowana pomyślne.Ponadto, ponieważ zmiany wprowadzone przez procedura składowana danych może wystąpić w wielu transakcji, dane u abonentów mogą być zgodne z danymi na Wydawca.Aby rozwiązać te problemy, wymagane jest że subskrybentów są tylko do odczytu i użyć większą niż Odczyt nieprzekazany poziom izolacji.Jeśli używasz Odczyt nieprzekazany zmiany danych w tabelach opublikowane są replikowane jako seria DML instrukcji.Aby uzyskać więcej informacji na temat poziomów izolacji, zobacz Poziom izolacji w aparacie bazy danych.

Poniższy przykład ilustruje Dlaczego zalecane jest, które zestaw replikacja procedur jak procedura serializować artykułów.

BEGIN TRANSACTION T1
SELECT @var = max(col1) FROM tableA
UPDATE tableA SET col2 = <value> 
   WHERE col1 = @var 

BEGIN TRANSACTION T2
INSERT tableA VALUES <values>
COMMIT TRANSACTION T2

W poprzednim przykładzie zakłada się, że wybór transakcji T1 wcześniejsza WSTAW w transakcji T2.

Jeśli procedura nie jest wykonywane w obrębie zatwierdzanie serializować (poziom izolacji zestaw do SERIALIZABLE), będzie mógł wstawić nowy wiersz w zakresie instrukcja SELECT T1 T2 zatwierdzanie i będzie zatwierdzenia przed T1.Oznacza to również, że będą stosowane przez subskrybenta przed T1.Po zastosowaniu T1 subskrybent wybierz potencjalnie może zwracać wartość inną niż w Wydawca i może skutkować inny wynik z aktualizacji.

Jeśli procedura jest wykonywana w obrębie transakcji serializować, aby wstawić w nie będą dozwolone transakcji T2 zakres objętych instrukcja SELECT w T2.Będą zablokowane, dopóki T1 zatwierdza, zapewnienie takich samych wyniki przez subskrybenta.

Blokad odbędą się dłużej, gdy użytkownik wykonać procedury serializować transakcji i prowadzić do zmniejszonej współbieżność.

Ustawienie XACT_ABORT

Podczas replikowania wykonanie procedura składowana, ustawienie dla sesja, wykonywanie procedura składowana, należy określić na XACT_ABORT.Jeśli jest XACT_ABORT zestaw do OFF, i wystąpi błąd podczas wykonywania procedury w programie Publisher, tym samym subskrybent, wystąpi błąd powoduje agenta dystrybucji nie powiedzie się.Określanie na XACT_ABORT zapewnia, że wszelkich błędów napotkanych podczas wykonywania w przyczyną Wydawca cały wykonanie wycofać, unikanie awarii agenta dystrybucji.Aby uzyskać więcej informacji o ustawianiu XACT_ABORT, zobacz ZESTAW XACT_ABORT (Transact-SQL).

Jeśli wymagane jest ustawienie XACT_ABORT OFF, określ - skiperrors parametr agenta dystrybucji.Dzięki temu agent kontynuowanie stosowania zmian przez subskrybenta, nawet jeśli wystąpi błąd.Aby uzyskać więcej informacji dotyczących tego parametru, zobacz Pomijanie błędy replikacji transakcyjnej.

Zobacz także

Koncepcje