Zagadnienia dotyczące replikacja transakcji

Istnieje kilka zagadnienia dotyczące replikacja transakcyjnej:

  • Miejsca dziennik transakcji.

  • Miejsce na dysku dla baza danych dystrybucji.

  • Klucze podstawowe dla każdej tabela opublikowane.

  • Wyzwalacze.

  • Typy danych dużych obiektów (LOB).

  • Subskrypcje mogą być aktualizowane (jeśli są one używane).Aby uzyskać więcej informacji na temat zagadnień dla subskrypcji mogą być aktualizowane zobacz Można aktualizować subskrypcji dla transakcji replikacja.

Obszar dziennik transakcji

Dla każdej bazy danych, który będzie publikowany stosowaniu replikacja transakcyjnej upewnij się, że dziennik transakcji ma wystarczającą ilość miejsca przydzielonego.Dziennik transakcji z opublikowaną bazą danych może wymagać więcej miejsca niż w dzienniku identyczne niepublikowanego 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 o baza danych publikacja jest kontynuowany na powiększenie.W dzienniku nie mogą być obcinane, poza najstarsze opublikowanych transakcji, która nie została dostarczona do baza danych dystrybucji.Zaleca się, że użytkownik zestaw powiększyć plik dziennik transakcji, aby automatycznie tak, aby dziennik może pomieścić tych okolicznościach.Aby uzyskać więcej informacji zobacz CREATE DATABASE (Transact-SQL) i ALTER DATABASE języka Transact-SQL).

Zaleca się ustawienie Synchronizacja z kopia zapasowa opcję baza danych dystrybucji, która opóźnia obcinania dziennika na baza danych publikacja aż do odpowiednich transakcji w bazie danych dystrybucji kopia zapasowa.Może to spowodować rozmiar dziennik transakcji w bazie danych publikacja.Aby uzyskać więcej informacji na temat tej opcji zobacz Strategie wykonywanie kopii zapasowych i przywracanie replikacja migawka i transakcji.

Miejsce na dysku dla baza danych dystrybucji

Upewnij się, że masz wystarczającą ilość miejsca na dysku do przechowywania replikowanych transakcji w bazie danych dystrybucji:

  • Jeśli nie zostanie dokonany migawka pliki natychmiast dostępne dla subskrybentów (która jest to ustawienie domyślne): transakcje są przechowywane, dopóki nie zostały one zreplikowane do wszystkich subskrybentów lub do momentu osiągnięcia okres zachowywania, zależnie od tego, który jest krótszy.

  • Po utworzeniu publikacja transakcyjnych i udostępnić pliki migawka subskrybentów natychmiast: transakcje są przechowywane, dopóki nie zostały one zreplikowane do wszystkich subskrybentów lub dopóki migawka Agent działa i tworzy nowe migawka, zależnie od tego, który jest dłuższy. Jeśli czas upływający między działa agent migawka jest większa niż maksymalna dystrybucji okres zachowywania dla publikacja, w której ma domyślnie 72 godzin, starsze niż okres zachowywania transakcji są usuwane z baza danych dystrybucji.Aby uzyskać więcej informacji zobacz Data wygaśnięcia subskrypcja i dezaktywacja.

Chociaż tworzenie migawka dostępne dla subskrybentów natychmiast zwiększa szybkość, z jaką subskrybenci nowych mają dostęp do publikacja i opcji może spowodować zwiększenie pojemność dla baza danych dystrybucji.Oznacza to również, że nowe zdjęcie jest generowana za każdym razem, działa migawka Agent.Jeżeli opcja nie jest używana, nowe zdjęcie jest generowany tylko wtedy, gdy nie ma nowej subskrypcja.

Klucze podstawowy dla każdej tabela opublikowanych

Wszystkie tabele opublikowanych w replikacja transakcyjnej musi zawierać deklarowanej klucz podstawowy.Istniejące tabele mogą być przygotowane do publikowania przez dodanie klucz podstawowy using Transact-SQL Instrukcja ALTER tabela (języka Transact-SQL).

: q

Należy pamiętać o następujących problemów przy użyciu wyzwalaczy z bazą danych subskrypcja:

  • Domyślnie wyzwalacze wykonywania z XACT_ABORT, ustawienie włączone.Jeśli instrukcja w wyzwalacz powoduje błąd w czasie, gdy agent dystrybucji jest stosowania zmian przez subskrybent, całej partia zmiany zakończy się niepowodzeniem, a nie poszczególnych instrukcji.W replikacja transakcyjnej, można użyć -SkipErrors parametr agenta dystrybucji, aby pominąć instrukcji, które powodują błędy.Jeśli -SkipErrors jest używana z ON XACT_ABORT, całej partia zmian jest pomijany, jeśli oświadczenie powoduje błąd.O ile nie wymagają XACT_ABORT się zestaw on w wyzwalaczy, zaleca się, że użytkownik zestaw będzie wyłączona w przypadku korzystania z -SkipErrors parametr.Aby ustawić opcję, określanie SET XACT_ABORT OFF w definicji wyzwalacza. Aby uzyskać więcej informacji na temat XACT_ABORT zobacz zestaw XACT_ABORT (języka Transact-SQL). Aby uzyskać więcej informacji na temat -SkipErrors patrz parametrSkipping Errors in Transactional Replication.

  • Zaleca się, bez uwzględnienia jawne transakcji w wyzwalacze przez subskrybent.replikacja transakcyjnej wykorzystuje tworzenie plików wsadowych w celu zmniejszenia żądań krążących powinna zostać sieci zminimalizowana, a tym samym zwiększając wydajność transakcji.Jeśli wyzwalaczy, które zawierają instrukcje ROLLBACK zostaną dodane przez subskrybent, anulowane partii transakcji i może być błąd serwera 266 wywoływane (liczba transakcji po wykonać wskazuje brak instrukcja zatwierdzanie lub ROLLBACK TRANSACTION.Liczba poprzednich = % ld, liczba bieżących = % ld.).Zadanie partia może zawierać polecenia z wielu transakcji lub być częścią dużych transakcji w Wydawca, więc wycofywanie transakcji mogą wpłynąć na spójności transakcyjnej.

    Jeśli zostanie jawnie transakcji, należy się upewnić, że wszystkie instrukcje zatwierdzanie w wyzwalacza są odpowiadające im instrukcje instrukcji BEGIN TRANSACTION.zatwierdzanie bez odpowiedniej instrukcji BEGIN TRANSACTION powoduje, że nietransakcyjna stosowania zmian wiersza subskrybent.Ponadto później błąd może wystąpić, jeśli Agent dystrybucji napotka błąd serwera 266 i próbuje wykonać wycofanie transakcji lub seria poleceń tak, aby go może stosować je ponownie.Gdy agent podejmie próbę zastosowania polecenia, które zostały już zastosowane, powoduje jego duplikat klucz błędów.

Aby uzyskać więcej informacji na temat wyzwalaczy zobacz Kontrolowanie ograniczenia tożsamości i wyzwalaczy z nie dla replikacja.

Typy danych dużych obiektów (LOB)

replikacja transakcyjnej obsługuje LOBs publikacji i dokonuje aktualizacji częściowej LOB kolumn: Jeśli kolumna LOB zostanie zaktualizowany, tylko fragment danych, zmiany są replikowane zamiast wszystkie dane w kolumnie.

Jeśli opublikowanych tabela zawiera wszelkie LOBs, należy wziąć pod uwagę przy użyciu następujących parametrów Agent dystrybucji: -UseOledbStreaming, -OledbStreamThreshold, and -PacketSize.Najbardziej prosty sposób zestaw tych parametrów jest do korzystania z profilu Agent dystrybucji: Profil dystrybucji do przesyłania strumieniowego OLEDB.Aby uzyskać więcej informacji zobacz Replication Agent Profiles. Oprócz tego profilu wstępnie zdefiniowane można określić parametr w profilu programu agent, można tworzyć lub modyfikować lub w wierszu polecenia.Aby uzyskać więcej informacji, zobacz:

Typy danych tekst, ntext i obraz

Proces replikacji text, ntext i image typy danych w publikacja transakcyjnych podlega wiele czynników. Firma Microsoft zaleca użycie typów danych varchar(max), nvarchar(max), varbinary(max) zamiast text, ntext, a image typy danych, odpowiednio.

Jeśli jest używany text, ntext, lub image, należy zwrócić uwagę na następujące:

  • Instrukcje WRITETEXT i UPDATETEXT powinny być otoczona transakcji jawnej.

  • Tekst zarejestrowanych czynności mogą być replikowane przy użyciu WRITETEXT i UPDATETEXT przy użyciu opcji WITH dziennik opublikowanych tabel.Opcja WITH dziennik jest wymagana, ponieważ replikacja transakcyjnej śledzi zmiany dziennik transakcji.

  • UPDATETEXT operacje mogą być używane tylko wtedy, gdy są uruchomione wszystkie subskrybentów SQL Server. Operacje WRITETEXT są replikowane jako instrukcji UPDATE, tak aby można ich używać także z innych niż-SQL Server Subskrybentów.

  • Parametr można konfigurować, Maksymalny rozmiar repl, określa maksymalny rozmiar (w bajtach) text, ntext, varchar(max), nvarchar(max), a image dane, które mogą być replikowane. Pozwala to na obsługę: ODBC sterowników i dostawców OLE DB; wystąpień SQL Server Database Engine który nie jest w stanie obsłużyć duże wartości dla tych typów danych; a dystrybutorów, w których występują ograniczenia zasób (pamięć wirtualna) systemu. Gdy kolumna z jednej z tych typów danych jest opublikowane i operacja INSERT, UPDATE, WRITETEXT lub UPDATETEXT jest uruchamiany, przekracza skonfigurowany limit, operacja kończy się niepowodzeniem.

    Użycie sp_configure (języka Transact-SQL) System przechowywanej procedury, aby ustawić Maksymalny rozmiar repl parametr.

  • Podczas publikowania text, ntext, a image powinien można pobrać kolumny tekstu wskaźnik myszy w obrębie tej samej transakcji operacji UPDATETEXT lub WRITETEXT (i z powtarzalności odczytu). Na przykład nie pobierać wskaźnik tekstu w jednej transakcji i używać go w innym.Może być zostały przeniesione i stają się nieprawidłowe.

    Ponadto po uzyskaniu wskaźnik tekstu, należy wykonać nie wszystkie operacje, które można zmienić w lokalizacji wskazywanej przez kursor tekstu (na przykład aktualizacja klucz podstawowy), przed wykonaniem instrukcja UPDATETEXT lub WRITETEXT tekstu.

    Jest to zalecany sposób korzystania z operacji UPDATETEXT i WRITETEXT z danymi powinny być replikowane:

    1. Rozpoczęcie transakcji.

    2. Uzyskaj wskaźnik tekstu przy użyciu funkcja TEXTPTR() odczyt POWTARZALNY poziom izolacji.

    3. Za pomocą wskaźnika tekstu w operacji UPDATETEXT lub WRITETEXT.

    4. zatwierdzanie transakcji.

      Uwaga

      Jeśli nie uzyskać wskaźnik tekstu w tej samej transakcji, zmiany są dozwolone przez wydawcę, 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
    

Uwaga

W tym przykładzie jest oparty na bazie danych Northwind, która nie jest instalowana domyślnie.Aby uzyskać informacje o instalowaniu tej bazy danych zobacz Northwind i przykładowe bazy danych pubs at the Microsoft Centrum pobierania.

Rozważenie, w przypadku sortowania bazy danych subskrybent się, że replikowane wskaźnik tekstu text, ntext, a image kolumny musi być zainicjowany subskrybent tabel, nawet wtedy, gdy nie są one inicjowane na Wydawca. W rezultacie każdy text, ntext, a image kolumna dodawane do tabela subskrybent przez zadanie dystrybucji zajmuje co najmniej 43 bajtów magazynu bazy danych, nawet wtedy, gdy zawartość jest pusta.