Wprowadzanie zmian schematu na publikację baz danych
Replikacja obsługuje szerokiego zakres zmian schematu do opublikowanych obiektów.When you make any of the following schema changes on the appropriate published object at a Microsoft SQL Server Publisher, that change is propagated by default to all SQL Server Subscribers:
ALTER TABLE
ALTER ESKALACJĘ blokady dla zestawu tabeli nie powinny być używane, jeśli jest włączona replikacja zmian schematu i obejmuje topologię SQL Server 2005 lub SQL Server Compact 3.5 Subscribers.ALTER widok
ZMIENIANIE PROCEDURY
ZMIENIANIE FUNKCJI
ZMIENIANIE WYZWALACZA
ZMIENIĆ WYZWALACZ może być używany tylko do języka manipulacji danych [DML] wyzwalaczy, ponieważ nie można zreplikować wyzwalaczy [DDL] języka definicja danych.
Ważne: |
---|
Zmiany schematu do tabel należy wprowadzać za pomocą Transact-SQL lub SQL Server Zarządzanie obiektami (SMO).Po dokonaniu zmian schematu w SQL Server Management Studio, Management Studio próbuje usunąć i ponownie utworzyć tabela.Nie można usunąć obiekty publikowane, dlatego zmiany schematu nie powiedzie się. |
Dla replikacja transakcyjna i replikacja scalająca zmiany schematu są propagowane stopniowo po uruchomieniu dystrybucji agenta lub przedstawiciela korespondencji seryjnej.Replikacja migawki zmiany schematu są propagowane podczas Nowa migawka jest stosowana przez subskrybenta.W replikacja migawka nową kopię schematu jest wysyłane do subskrybentów każdego czas synchronizacji.Dlatego wszystkie zmiany schematu (nie tylko wymienionych) do obiektów poprzednio opublikowane automatycznie są propagowane z każdej synchronizacji.
Aby uzyskać informacje dotyczące dodawania i usuwania artykułów z publikacji, zobacz Artykuły Dodawanie i usuwanie artykułów z istniejącej publikacji.
Replikowanie zmian schematu
Domyślnie są replikowane zmiany schematu wymienionych powyżej.Aby uzyskać informacje dotyczące wyłączania replikacja zmian schematu zobacz następujące tematy:
SQL Server Management Studio: Jak Replikowanie zmian schematu (SQL Server Management Studio)
Replikacja Transact-SQL programowania: Jak Replikowanie zmian schematu (Programowanie replikacji Transact-SQL)
Zagadnienia dotyczące zmiany schematu
Podczas replikowania zmian schematu, należy pamiętać o następujące uwagi.
Uwagi ogólne
Zmiany schematu są z zastrzeżeniem wszelkich ograniczeń nałożonych przez Transact-SQL.Na przykład, ALTER TABLE nie zezwalają na ALTER klucz podstawowy kolumny.
Mapowanie typu danych jest wykonywane tylko dla migawka początkowa.Zmiany schematu nie są mapowane na typy danych poprzednich wersji.Na przykład jeśli instrukcja ALTER TABLE ADD datetime2 column używane w SQL Server 2008, typ danych nie jest tłumaczony na nvarchar dla SQL Server 2005 abonentów.W niektórych przypadkach zmiany schematu są blokowane Wydawca.
Jeśli publikacja jest zestaw , aby umożliwić propagację zmian schematu, zmiany schematu są propagowane niezależnie od tego, jak opcja schematu jest zestaw artykuł w publikacja.Na przykład, jeśli nie mają replikować ograniczeń klucza obcego dla artykuł tabela, ale następnie wydać polecenie ALTER tabela, dodaje klucza obcego do tabela na Wydawca, klucz obcy jest dodany do tabela przez subskrybenta.Aby temu zapobiec, należy wyłączyć propagację zmian schematu przed wydaniem polecenia ALTER TABLE.
Zmiany schematu powinny być dokonywane jedynie w Wydawca, nie na subskrybentów (w tym ponowne opublikowanie subskrybentów).Replikacja scalania uniemożliwia zmiany schematu przez subskrybenta.Replikacji transakcyjnej nie uniemożliwia zmiany, ale zmiany powodują replikacja nie powiedzie się.
Zmiany te będą propagowane do subskrybenta republishing są domyślnie propagowane do jego subskrybentów.
Jeśli zmiana schematu odwołania do obiektów lub ograniczenia istniejących na Wydawca , ale nie na subskrybenta, zmień schemat powiodą się na Wydawca , ale nie na subskrybenta.
Wszystkie obiekty na subskrybenta, które odwołuje się do dodawania klucz obcy musi mieć tę samą nazwę i właściciela jako odpowiedni obiekt Wydawca.
Jawnie dodając, upuszczając lub zmieniając indeksów nie jest obsługiwane.Indeksy tworzone niejawnie ograniczenia (np. ograniczenia na klucz podstawowy) są obsługiwane.
Zmienianie lub usuwaniem kolumny tożsamości, które są zarządzane przez replikacja nie jest obsługiwane.Aby uzyskać więcej informacji na temat automatycznego zarządzania kolumny tożsamości Zobacz Replikowanie kolumny tożsamości.
Zmiany schematu, które obejmują rodzaju funkcje nie są obsługiwane, ponieważ może spowodować danych na Wydawca i subskrybenta różnych (zwaną zbieżności nie).Na przykład, jeśli Wydaj następujące polecenie na Wydawca: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), wartości są różne, gdy polecenie jest replikowany do subskrybenta i wykonany.Aby uzyskać więcej informacji na temat rodzaju funkcji, zobacz Przewidywalne i rodzaju funkcje.
Zalecane jest, że ograniczenia należy jawnie o nazwie.Jeśli ograniczenie nie jest jawnie nazwany, SQL Server generuje nazwę ograniczenia, a te nazwy będą różne w Wydawca i każdy abonent.Może to powodować problemy podczas replikacja zmian schematu.Na przykład, jeśli upuścisz kolumna w Wydawca i ograniczenia zależne jest odrzucany, spróbuje upuść ograniczenie subskrybent replikacja.Drop subskrybent nie powiedzie się, ponieważ nazwa ograniczenia jest inny.Jeśli synchronizacja nie powiedzie się z powodu problemu nazewnictwa ograniczenie, ręcznie usunąć ograniczenie przez subskrybenta, a następnie ponownie uruchom agenta scalania.
Jeśli tabela jest publikowana w replikacja, nie jest możliwe zmiany kolumna w tabeli typ danych XML, jeśli migawka publikacja został wygenerowany do kolumna, należy najpierw usunąć replikacja.Aby uzyskać więcej informacji, zobacz Usuwanie replikacji.
Dodawanie kolumn
Aby dodać nową kolumna do tabela i dołączyć kolumna do istniejącej publikacja, wykonać instrukcji ALTER tabela <tabela> Dodaj <kolumna>.Domyślnie kolumna jest następnie replikowane do wszystkich subskrybentów.Zezwalaj na wartości NULL lub zawierać domyślne ograniczenie musi kolumna.Aby uzyskać więcej informacji na temat dodawania kolumn zobacz "Scalania replikacji" sekcję w tym temacie.
Aby dodać nową kolumna do tabela i nie zawierają kolumna w istniejącej publikacja, należy wyłączyć replikacja zmian schematu, a następnie wykonać ALTER tabela <tabela> Dodaj <kolumna>.
Aby dołączyć istniejącą kolumna w istniejącej publikacja, należy użyć sp_articlecolumn (języka Transact-SQL), sp_mergearticlecolumn (języka Transact-SQL), lub Właściwości publikacja - <publikacja> okna dialogowego.
Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru kolumny (Programowanie replikacji Transact-SQL) i Jak Definiowanie i modyfikowanie filtru kolumny (SQL Server Management Studio).Wymaga to należy ponownie zainicjować subskrypcję.
Dodawanie kolumna tożsamości do opublikowanych tabela nie jest obsługiwana, może powodować w innych niż zbieżności, gdy kolumna jest replikowany do subskrybenta.Wartości kolumna tożsamości w Wydawca zależy od kolejności, w jakiej fizycznie przechowywane są wiersze z tabela usterce.Wiersze mogą być przechowywane w inny sposób przez subskrybenta; Dlatego wartość kolumna tożsamości może różnić się w tych samych wierszach.
Upuszczanie kolumn
Aby usunąć kolumna z istniejącej publikacja i usunąć kolumna z tabela w Wydawca, wykonać instrukcji ALTER tabela <tabela> DROP <kolumna>.Domyślnie kolumna jest następnie usunięte z tabela na wszystkich subskrybentów.
Aby usunąć kolumna z istniejącej publikacja, zachowując kolumna w tabela na Wydawca, użyj sp_articlecolumn (języka Transact-SQL), sp_mergearticlecolumn (języka Transact-SQL), lub Właściwości publikacja - <publikacja> okna dialogowego.
Aby uzyskać więcej informacji, zobacz Jak Definiowanie i modyfikowanie filtru kolumny (Programowanie replikacji Transact-SQL) i Jak Definiowanie i modyfikowanie filtru kolumny (SQL Server Management Studio).Wymaga to Nowa migawka mają zostać wygenerowane.
Nie można użyć kolumna ma być przerwane w klauzulach filtr jakimkolwiek artykuł publikacja w bazie danych.
Podczas upuszczania kolumna z opublikowanego artykuł, wziąć pod uwagę wszystkie ograniczenia, indeksy lub właściwości kolumna, które mogą wpłynąć na bazie danych.Na przykład:
Nie można usunąć kolumn używanych w klucz podstawowy z artykułów w publikacjach transakcyjnych, ponieważ są one używane przez replikacja.
Nie można usunąć rowguid kolumna z artykułów w publikacjach lub mstran_repl_version kolumna z artykułów w publikacjach transakcyjnej obsługi aktualizacji subskrypcji, ponieważ są one używane w replikacja.
Indeks zmiany nie są propagowane do subskrybentów: Jeśli upuścisz kolumny w Wydawca i indeks zależne jest odrzucany, drop indeks nie jest replikowana.Indeks należy upuścić subskrybent przed upuszczeniem kolumna Wydawca, tak, aby upuszczania kolumna powiedzie się, gdy jest replikowany do subskrybenta od wydawcy.Jeśli synchronizacja nie powiedzie się z powodu indeksu przez subskrybenta, ręcznie usunąć indeks, a następnie ponownie uruchom agenta scalania.
Ograniczenia powinny wyraźnie nazwane umożliwiające upuszczanie.Aby uzyskać więcej informacji zobacz sekcję "Uwagi ogólne" sekcja wcześniej w tym temacie.
Replikacji transakcyjnej
Zmiany schematu są propagowane do abonentów, na których działają poprzednie wersje SQL Server, ale w instrukcja DDL powinien zawierać składni obsługiwane w wersja subskrybenta.
Jeśli subskrybenta je opublikuje danych, zmiany tylko schematu obsługiwane są Dodawanie i upuszczając kolumna.Należy wprowadzić te zmiany w Wydawca za pomocą sp_repladdcolumn (języka Transact-SQL) i sp_repldropcolumn (języka Transact-SQL) zamiast zmieniać DDL tabeli składni.
Zmiany schematu nie są replikowane do abonentów innych niż SQL.
Zmiany schematu nie są propagowane z innych niż-SQL Server wydawcy.
Nie można zmieniać widoki indeksowane, które są replikowane jako tabele.Indeksowane widoki, które są replikowane jako Widoki indeksowane może być zmieniony, ale ich modyfikacji spowoduje ich stają się regularne widoki zamiast Widoki indeksowane.
Jeśli publikacja obsługuje natychmiastowej aktualizacji lub w kolejce subskrypcje aktualizacji, system musi być w stanie spoczynku przed wprowadzeniem zmian schematu: muszą być zatrzymane wszystkie czynności na opublikowanych tabela Wydawca i abonentów, a dane do czasu zmiany musi propagowane do wszystkich węzłów.Po zmiany schematu są propagowane do wszystkich węzłów, opublikowanych tabel można wznowić działania.
Poprzednie wersje SQL Server wymagane publikacje w topologii peer-to-peer, aby być w stanie spoczynku przed wprowadzeniem zmian schematu.Począwszy od programu SQL Server 2008 jest nie dłuższa konieczne quiesce publikacja, z wyjątkiem jak wspomniano w tej sekcji.
Dodawanie kolumna sygnatury czasowej do tabela i mapowanie sygnatury czasowej do typu binary(8) powoduje artykuł należy ponownie zainicjować dla wszystkich aktywnych subskrypcji.
Scalania replikacji
Sposób zmiany schematu uchwyty replikacja scalająca zależy od publikacja poziom zgodności i czy jest migawka zestaw do trybu macierzystego (domyślnie) lub znak:
Replikowanie zmian schematu, poziom zgodności publikacja musi wynosić co najmniej 90RTM.Subskrybenci korzystający z poprzednich wersji SQL Server lub poziom zgodności jest mniejsza niż 90RTM, można użyć sp_repladdcolumn (języka Transact-SQL) i sp_repldropcolumn (języka Transact-SQL) Dodawanie i usuwanie kolumn.Jednakże te procedury zostały zaniechane.
Podczas próby dodania do istniejącego artykuł kolumna o typie danych, którą wprowadzono w SQL Server 2008, SQL Server ma następujące zachowanie:
100RTM macierzystego migawka
100RTM znak migawka
Inne poziomy zgodności
hierarchyid
Zezwalaj na zmiany
Zmień blok
Zmień blok
geography i geometry
Zezwalaj na zmiany
Zezwalaj na zmianę1
Zmień blok
filestream
Zezwalaj na zmiany
Zmień blok
Zmień blok
date, time, datetime2, and datetimeoffset
Zezwalaj na zmiany
Zezwalaj na zmianę1
Zmień blok
1 SQL Server Compact subskrybentów przekonwertować te typy danych przez subskrybenta.
Aby uzyskać więcej informacji dotyczących zgodności publikacja zobacz "Zgodność poziomu dla scalone publikacje" sekcja w W topologii replikacji przy użyciu wielu wersji programu SQL Server.
Jeśli wystąpi błąd podczas stosowania zmian schematu (takie jak błąd wynikające z dodaniem klucz obcy, który odwołuje się do tabela nie jest dostępna przez subskrybenta), synchronizacja kończy się niepowodzeniem i subskrypcja należy ponownie zainicjować.
Schemat dokonywane są zmiany kolumna zaangażowanych w filtr łączyć lub sparametryzowanych filtr, należy ponownie zainicjować wszystkie subskrypcje i ponownie wygenerować migawka.
Replikacja scalania zawiera procedur przechowywanych, aby pominąć zmiany schematu podczas rozwiązywania problemów.Aby uzyskać więcej informacji, zobacz sp_markpendingschemachange (języka Transact-SQL) i sp_enumeratependingschemachanges (języka Transact-SQL).
Zobacz także
Odwołanie
Koncepcje
Historia zmian
Zaktualizowana zawartość |
---|
Dodać uwagę do replikacji transakcyjnej; topologie peer-to-peer, nie musi być w stanie spoczynku dla każdej zmiany schematu. |