Zagadnienia dotyczące replikacji transakcyjnej
Istnieje wiele uwagi dotyczące replikacja transakcyjna:
Miejsca w dzienniku transakcji.
Miejsce na dysku dla baza danych dystrybucji.
Klucze podstawowe dla każdej tabela opublikowane.
Wyzwalacze.
Typy danych dużego obiektu (LOB).
Subskrypcje aktualizowalny (jeśli są używane).Aby uzyskać więcej informacji na temat zagadnień dotyczących subskrypcji aktualizowalna Zobacz Aktualizowalna subskrypcji dla replikacji transakcyjnej.
Miejsca w dzienniku transakcji
Dla każdej bazy danych, który będzie publikowany za pomocą replikacja transakcyjna, upewnij się, że dziennik transakcji ma za mało miejsca przydzielonego.Dziennik transakcji opublikowana baza danych może wymagać więcej miejsca niż dziennik identyczne niepublikowanych bazy danych, ponieważ rekordy dziennika nie są obcinane, dopóki nie zostały przeniesione do baza danych dystrybucji.
Baza danych dystrybucji jest niedostępna lub dziennik agenta czytnik nie działa, dziennik transakcji baza danych publikacja stale rośnie.Dziennik nie może być obcięta w przeszłości najstarsze opublikowanych transakcji, która nie została dostarczona do baza danych dystrybucji.Zalecane zestaw pliku dziennika transakcji, Auto, powiększać, dzięki czemu dziennik może pomieścić w tych okolicznościach.Aby uzyskać więcej informacji, zobacz Tworzenie bazy danych (Transact-SQL) i ALTER DATABASE (Transact-SQL).
Zaleca się zestaw synchronizacji z kopia zapasowa opcji na bazie dystrybucji opóźnienia obcinania dziennika na baza danych publikacja do momentu zapasowe zostały odpowiednich transakcji w bazie danych dystrybucji.Może to skutkować większą dziennika transakcji w baza danych publikacja.Aby uzyskać więcej informacji na temat tej opcji, zobacz Strategii tworzenia kopii zapasowych i przywracanie migawki i transakcyjnych replikacji.
Miejsce na dysku dla bazy danych dystrybucji
Należy zapewnić wystarczającą ilość miejsca na dysku do przechowywania transakcji zreplikowanej baza danych dystrybucji:
Jeśli nie migawka pliki natychmiast dostępne dla subskrybentów (co jest ustawieniem domyślnym): transakcje są przechowywane do momentu ich zostały zreplikowane do wszystkich subskrybentów lub do momentu osiągnięcia okresu przetrzymania, jest krótszy.
Jeśli tworzenie publikacja transakcyjnych i udostępnianie plików migawka subskrybentom niezwłocznie: transakcje są przechowywane, dopóki nie zostały zreplikowane do wszystkich subskrybentów lub dopóki Agent migawka działa i tworzy nową migawkę, jest dłuższy.Jeśli czas upływający między działa Agent migawki jest większa niż maksymalna okres przechowywania dystrybucji publikacja, która ma domyślnie 72 godzin, starsze niż okres zachowywania transakcji są usuwane z baza danych dystrybucji.Aby uzyskać więcej informacji, zobacz Wygaśnięcia subskrypcji i dezaktywacji.
Chociaż udostępnianie migawka subskrybentom natychmiast zwiększa szybkość, z jaką subskrybenci nowe mają dostęp do publikacja, opcja może spowodować zwiększoną dyskowa baza danych dystrybucji.On również oznacza, że Nowa migawka jest generowany, każdy czas Agent migawki jest uruchamiany.Jeśli opcja nie jest używana, Nowa migawka jest generowany tylko w przypadku nowego subskrypcja.
Klucze podstawowe dla każdej tabeli opublikowanych
Wszystkie opublikowane tabel w replikacja transakcyjna musi zawierać deklarowanych klucz podstawowego.Istniejące tabele można przygotować do publikowania przez dodanie klucz podstawowy za pomocą Transact-SQL Instrukcja ALTER TABLE (Transact-SQL).
Wyzwalacze
Należy pamiętać o następujących problemów przy użyciu wyzwalaczy na baza danych subskrypcja:
Domyślnie uruchamia wykonać z XACT_ABORT na ustawienie.Jeśli instrukcja w wyzwalacz powoduje błąd podczas dystrybucji agenta jest stosowanie zmian subskrybent cały partia zmian zakończy się niepowodzeniem, a nie poszczególnych instrukcji.W replikacja transakcyjna, można użyć - skiperrors parametr agenta dystrybucji pominięcia instrukcji, które powodują błędy.Jeśli - skiperrors jest używana z XACT_ABORT na całej partia zmian jest pomijany, jeśli instrukcja powoduje błąd.Chyba że wymagają XACT_ABORT zestaw on wyzwalaczy, zaleca się zestaw go na OFF Jeśli używasz - skiperrors parametru.Aby zestaw określić opcję Wył., SET XACT_ABORT OFF w definicji wyzwalacza.Aby uzyskać więcej informacji o XACT_ABORT, zobacz ZESTAW XACT_ABORT (Transact-SQL).Więcej informacji o - skiperrors parametru, zobaczPomijanie błędy replikacji transakcyjnej.
Zaleca się, nie włączając transakcje w wyzwalaczy subskrybent.replikacja transakcyjnej korzysta z transakcji tworzenie plików wsadowych zmniejszyć natężenie ruchu sieciowego, a tym samym zwiększając wydajność.Jeśli wyzwalaczy, które zawierają instrukcje WYCOFYWANIA są dodawane przez subskrybenta, instancje transakcji można anulować i błąd serwera 266 mogą być wywoływane (liczba transakcji po EXECUTE wskazuje brak instrukcja COMMIT albo TRANSAKCJĘ ROLLBACK.Liczba poprzednich = % ld, liczba bieżących = % ld.).Partia może zawierać polecenia z wielu transakcji lub być częścią dużych transakcji w Wydawca, więc wycofywanie transakcji może naruszyć integralność transakcyjnych.
Jeśli transakcje, zapewnić wszystkie instrukcje zatwierdzeń w wyzwalacz odpowiednie oświadczenia instrukcji BEGIN TRANSACTION.ZATWIERDŹ bez odpowiednich instrukcji BEGIN TRANSACTION powoduje-transakcyjnych aplikacji zmiany wiersza subskrybenta.Ponadto nowszy błąd może wystąpić, jeśli napotka błąd serwera 266 i próbuje Agent dystrybucji wycofać transakcji lub partia poleceń, tak aby je zastosować ponownie.Gdy agent próbuje zastosować polecenia, które zostały już zastosowane, on wyniki błędy zduplikowanych kluczy.
Aby uzyskać więcej informacji na temat wyzwalaczy, zobacz Kontrolowanie ograniczenia, tożsamości i wyzwalaczy z nie dla replikacji.
Duże typy danych obiektu (LOB)
replikacja transakcyjnej obsługuje obiektów LOB publikowania i wykonuje aktualizacje częściowe LOB kolumn: aktualizacji kolumna LOB tylko fragment danych zmiany są replikowane zamiast wszystkie dane kolumna.
Opublikowane tabela zawiera wszelkie obiektów LOB, należy rozważyć przy użyciu następujących parametrów agenta dystrybucji: -UseOledbStreaming, - oledbstreamthreshold, i - packetsize.Najprostszą metodą zestaw tych parametrów jest do korzystania z profilu agenta dystrybucji zatytułowany Dystrybucji profilu dla OLEDB streaming.Aby uzyskać więcej informacji, zobacz Profile Agent replikacji.Oprócz tego profilu wstępnie zdefiniowanych w profilu agenta, tworzyć lub modyfikować lub w wierszu polecenia można określić parametr.Aby uzyskać więcej informacji, zobacz:
Jak Praca z profilami Agent replikacji (SQL Server Management Studio)
Jak Praca z profilami Agent replikacji (Programowanie replikacji Transact-SQL)
Typy danych tekst, ntext i image
Proces replikowania text, ntext i image typów danych w publikacja transakcyjnych podlega numer zagadnienia.Zalecane użycie typów danych varchar(max), nvarchar(max), varbinary(max) zamiast text, ntext, i image typy danych, odpowiednio.
Jeśli używasz text, ntext, lub image, należy pamiętać o następujących:
Instrukcje WRITETEXT i UPDATETEXT powinny być zapakowane w transakcji jawnej.
Zarejestrowany tekst operacje mogą być replikowane przy użyciu opcji dziennika z opublikowanych tabel WRITETEXT i UPDATETEXT.Opcja z dziennika jest wymagana, ponieważ replikacja transakcyjna śledzi zmiany w dzienniku transakcji.
UPDATETEXT operacji mogą być używane tylko wtedy, gdy wszystkie subskrybentów są uruchomione SQL Server.Operacje WRITETEXT są replikowane jako instrukcji UPDATE, aby można było ich używać z innych niż-SQL Server abonentów.
Parametr można konfigurować, tekst maksymalny rozmiar repl, określa maksymalny rozmiar (w bajtach) text, ntext, varchar(max), nvarchar(max), i image dane mogą być replikowane.Umożliwia obsługę: Sterowniki ODBC i dostawcy OLE DB; wystąpienia Aparat baz danych programu SQL Server , nie może obsługiwać duże wartości dla tych typów danych; i dystrybutorów, których system ograniczeń zasób (pamięć wirtualna).Gdy kolumna z jednego z tych typów danych jest opublikowane i uruchomieniu INSERT, UPDATE, WRITETEXT lub UPDATETEXT operacji, która przekracza skonfigurowany limit operacja kończy się niepowodzeniem.
Użyj sp_configure (języka Transact-SQL) systemowa procedura składowana ustawić tekst maksymalny rozmiar repl parametru.
Podczas publikowania text, ntext, i image kolumny, wskaźnik tekstu ma być pobrana w obrębie tej samej transakcji operacja UPDATETEXT lub WRITETEXT (i z powtarzalności odczytu).Na przykład nie pobierać wskaźnik tekstu w jednej transakcji i użyć go w innym.Może mieć przeniesiony i stają się nieprawidłowe.
Ponadto, gdy uzyskano wskaźnik tekstu należy nie wykonać żadnych operacji, które można zmienić w lokalizacji wskazywanej przez kursor tekstowy tekst (np. aktualizowanie klucz podstawowy), przed wykonaniem instrukcja UPDATETEXT lub WRITETEXT.
Jest to zalecany sposób przy użyciu operacji UPDATETEXT i WRITETEXT dane zostaną zreplikowane:
Rozpoczęcie transakcji.
Uzyskać wskaźnik tekstu przy użyciu funkcja TEXTPTR() z odczyt POWTARZALNY poziom izolacji.
Wskaźnik tekstu użyć w operacji UPDATETEXT lub WRITETEXT.
Zatwierdzenia transakcji.
Ostrzeżenie
Jeśli nie uzyskać wskaźnik tekstu w tej samej transakcji, modyfikacje są dozwolone na Wydawca, ale zmiany nie są publikowane do subskrybentów.
Na przykład:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ BEGIN TRAN DECLARE @mytextptr varbinary(16) SELECT @mytextptr = textptr(Notes) FROM Employees WHERE EmployeeID = '7' IF @mytextptr IS NOT NULL BEGIN UPDATETEXT Employees.Notes @mytextptr 0 NULL 'Terrific job this review period.' -- Dummy update to fire trigger that will update metadata and ensure the update gets propagated to other Subscribers. UPDATE Employees -- Set value equal to itself. SET Notes = Notes WHERE EmployeeID = '7' END COMMIT TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Ostrzeżenie
Ten przykład jest oparty na bazie Northwind nie jest instalowany domyślnie.Aby uzyskać informacje dotyczące instalowania tej bazy danych, zobacz Northwind i pubs przykładowe bazy danych na Microsoft Centrum pobierania.
Uwagę podczas zmiany rozmiaru bazy danych subskrybenta jest, że replikowane wskaźnik tekstu dla text, ntext, i image kolumny musi być zainicjowany subskrybenta tabel, nawet jeśli nie są one inicjowane Wydawca.W konsekwencji każdego text, ntext, i image kolumna dodawane do tabela subskrybenta przez zadanie dystrybucji zużywa co najmniej 43 bajtów magazynu bazy danych, nawet jeśli zawartość jest pusta.