Wprowadzanie zmian schematu na bazy danych w publikacja
Replikacja obsługuje szeroki 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 tabela
ALTER tabela zestaw eskalacja blokad nie powinny być używane, jeśli jest włączona replikacja zmiany schematu, zawiera topologię SQL Server 2005 lub SQL Server Compact 3.5 Subscribers.ALTER VIEW
ZMIENIANIE PROCEDURY
ZMIENIANIE funkcja
ZMIENIANIE WYZWALACZA
ALTER TRIGGER można użyć tylko dla danych manipulacji na język [DML] wyzwalaczy, ponieważ nie można zreplikować wyzwalaczy [DDL] języka definicja danych.
Important Note: |
---|
Zmiany schematu do tabel muszą być wykonywane za pomocą Transact-SQL lub SQL Server Obiekty zarządzania (obiekty SMO). Po dokonaniu zmian schematu w SQL Server Management Studio, Management Studio próbuje ponownie w tabela i upuść. Nie można usunąć opublikowanej obiektów, dlatego zmiany schematu nie powiodło się. |
Dla replikacja transakcyjnej i scalania replikacja zmiany schematu są propagowane przyrostowo po uruchomieniu Agent dystrybucji lub agenta korespondencji seryjnej.Replikacja migawka zmiany schematu są propagowane po zastosowaniu nowego migawka przez subskrybent.W przypadku replikacja migawka nowa kopia schematu jest wysyłane do subskrybent każdej synchronizacji czas.Dlatego wszystkie zmiany schematu (nie tylko wymienionych) do obiektów poprzednio opublikowanej automatycznie są propagowane z każdej synchronizacji.
Aby uzyskać informacje dotyczące dodawania lub usuwania artykuły z publikacji Zobacz Adding Articles to and Dropping Articles from Existing Publications.
Replikowanie zmian schematu
Domyślnie są replikowane zmiany schematu, wymienione 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 replikacja języka Transact-SQL)
Zagadnienia dotyczące zmiany schematu
Podczas replikowania zmian schematu, należy pamiętać o następujących zagadnień.
Zagadnienia ogólne
Zmiany schematu są objęte wszystkie ograniczenia nakładane przez Transact-SQL. Na przykład ALTER tabela nie zezwala na ALTER kolumny klucz podstawowy.
Mapowanie typu danych jest wykonywane tylko dla początkowego migawka.Zmiany schematu nie są mapowane do poprzednich wersji typów danych.Na przykład jeśli w instrukcja ALTER TABLE ADD datetime2 column jest używana w SQL Server 2008, typ danych nie jest tłumaczony nvarchar dla SQL Server 2005 Subskrybentów. W niektórych przypadkach zmiany schematu są zablokowane na Wydawca.
Jeśli publikacja ustawiono umożliwiają rozprzestrzenianie zmiany schematu, zmiany schematu są propagowane niezależnie od konfiguracji opcji powiązanych schematu artykuł w publikacja.Na przykład jeśli wybierzesz opcję nie, aby replikować ograniczenia na klucz obcy artykuł tabela, ale następnie wydać to polecenie instrukcji ALTER tabela, które dodaje klucza obcego do tabela przez wydawcę, klucz obcy jest dodawane do tabela przez subskrybent.Aby temu zapobiec, należy wyłączyć propagacji zmiany schematu przed wydaniem polecenia instrukcji ALTER tabela.
Zmiany schematu, należy dokonać tylko Wydawca, nie na subskrybentów (w tym ponowne publikowanie subskrybentów).replikacja łączenia uniemożliwia zmiany schematu przez subskrybent.Replikacji transakcyjnej nie zapobiega zmiany, ale zmiany mogą spowodować, że replikacja nie powiedzie się.
Zmiany te będą propagowane do subskrybent republishing są domyślnie te będą propagowane do jego subskrybent.
Schemat zmiany odwołań do obiektów lub ograniczenia istniejące na Wydawca, a nie na subskrybent, zmiany schematu powiodą się na Wydawca, ale nie będzie działać na subskrybent.
Wszystkie obiekty na abonenta, do których istnieją odwołania przy dodawaniu klucz obcy musi mieć tę samą nazwę i właściciela jako odpowiedni obiekt na Wydawca.
Jawne dodanie, usunięcie lub zmiany indeksów nie jest obsługiwana.Indeksy tworzone niejawnie ograniczeń (np. ograniczenia na klucz podstawowy) są obsługiwane.
Zmiana lub usunięcie kolumny identyfikacji, które są zarządzane przez replikacja nie jest obsługiwana.Aby uzyskać więcej informacji na temat automatycznego zarządzania kolumny identyfikacji zobacz Replikowanie kolumny tożsamości.
Zmiany schematu, które zawierają funkcje nondeterministic nie są obsługiwane, ponieważ może spowodować dane z szybkością do Wydawca i subskrybent podlegającego różnych (zwane zbieżności nie).Na przykład wydać następujące polecenie w Wydawca: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), wartości są różne, gdy polecenie jest replikowany do subskrybent i wykonany.Aby uzyskać więcej informacji na temat funkcji nondeterministic zobacz Deterministic and Nondeterministic Functions.
Zaleca się, że jawnie nazwę ograniczenia.Jeśli ograniczenie nie jest jawnie nazwę, SQL Server generuje nazwę ograniczenia, a ich nazwy będą różne w Wydawca i poszczególnych subskrybentów. Może to powodować problemy podczas replikacja zmian schematu.Na przykład, jeśli upuścisz kolumna na Wydawca i zależne od ograniczeń zostanie usunięte, replikacja będzie próbował usunąć ograniczenie przez subskrybent.Kropla subskrybent nie powiedzie się, ponieważ nazwa ograniczenia jest inny.Jeśli synchronizacja nie powiedzie się z powodu problemu ograniczenia nazewnictwa, ręcznie usunąć ograniczenie przez subskrybent, a następnie uruchom ponownie agenta korespondencji seryjnej.
Jeśli tabela jest publikowana dla replikacja, nie jest możliwe zmienić kolumna w tabeli typ danych XML, jeśli publikacja migawka już został wygenerowany, aby zmienić kolumna, należy najpierw usunąć replikacja.Aby uzyskać więcej informacji zobacz Usuwanie replikacja.
Dodawanie kolumny
Aby dodać nową kolumna do tabeli i dołączyć tę kolumna w istniejącej publikacja, wykonać instrukcji ALTER TABLE <Tabela> DODAWANIE <kolumna>. Domyślnie kolumna jest następnie replikowane do wszystkich subskrybentów.kolumna należy zezwolić na wartości NULL lub zawierać ograniczenie domyślne.Aby uzyskać więcej informacji o dodawaniu kolumn zobacz sekcję "Scalania replikacja" w tym temacie.
Aby dodać nową kolumna do tabeli i nie zawiera tej kolumna w istniejącej publikacja, należy wyłączyć replikacja zmian schematu, a następnie wykonać instrukcji ALTER TABLE <Tabela> DODAWANIE <kolumna>.
Aby dołączyć istniejącą kolumna w istniejącej publikacja, należy użyć sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), lub Właściwości publikacja — <publikacja> okno dialogowe.
Aby uzyskać więcej informacji zobacz Jak Definiowanie i modyfikowanie filtr kolumn (Programowanie replikacja języka Transact-SQL) i Jak Definiowanie i modyfikowanie filtr kolumn (SQL Server Management Studio). Wymaga to subskrypcji, aby się ustawienie ponownie inicjowane.
Dodawanie kolumna tożsamości do opublikowanych tabela nie jest obsługiwana, może powodować w innych niż zbieżności, gdy kolumny są replikowane do subskrybent.Wartości kolumna tożsamości w Wydawca zależy od kolejności, w jakiej fizycznie przechowywane są wiersze z tabela, których dotyczy problem.Wiersze mogą być przechowywane w inny sposób przez subskrybent, dlatego mogą być różne dla tych samych wierszach wartości kolumna tożsamości.
Upuszczanie kolumn
Aby usunąć kolumna z istniejącej publikacja i usunąć kolumna z tabeli w Wydawca, wykonać instrukcji ALTER TABLE <Tabela> UPUŚĆ <kolumna>. Domyślnie następnie kolumna zostanie usunięte z tabela na wszystkich subskrybentów.
Aby usunąć kolumna z istniejącej publikacja, zachowując kolumna w tabela na Wydawca, za pomocą sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), lub Właściwości publikacja — <publikacja> okno dialogowe.
Aby uzyskać więcej informacji zobacz Jak Definiowanie i modyfikowanie filtr kolumn (Programowanie replikacja języka Transact-SQL) i Jak Definiowanie i modyfikowanie filtr kolumn (SQL Server Management Studio). Wymaga to nowe migawka został wygenerowany.
Nie można użyć kolumna połączenie ma być przerwane w klauzulach filtru każdy artykuł publikacja w bazie danych.
Podczas usuwania kolumna z opublikowanego artykuł, wziąć pod uwagę ograniczenia, indeksy lub właściwości kolumna, które mogą wpłynąć na bazie danych.Na przykład:
Nie można usuwać kolumn używanych w kluczu podstawowym z artykułów w publikacjach transakcyjnych, ponieważ są one używane przez replikacja.
Ponieważ są one używane przez replikację, nie można usunąć kolumna rowguid z artykułach w publikacji korespondencji seryjnej lub kolumnie mstran_repl_version z artykułów w publikacji transakcyjnych, które obsługują aktualizowania subskrypcji.
Indeks zmiany nie są propagowane do subskrybentów: Jeśli upuścisz kolumna przez wydawcę i zależne od indeksu zostało porzucone, nie są replikowane upuszczania indeksu. Indeks subskrybent należy upuścić przed upuszczanie kolumn Wydawca, tak, aby upuszczania kolumna powiedzie się, gdy jest replikowany od Wydawca do subskrybenta.Jeśli synchronizacja nie powiedzie się z powodu indeksu przez subskrybent, należy ręcznie usunąć indeks, a następnie uruchom ponownie agenta korespondencji seryjnej.
Warunki ograniczające nazwy powinny mieć jawnie umożliwiające upuszczanie.Aby uzyskać więcej informacji zobacz sekcję "" zagadnienia ogólne"we wcześniejszej części tego tematu.
Transakcyjne replikacja
Zmiany schematu są propagowane do subskrybent, na których działają poprzednie wersje SQL Server, ale w instrukcja DDL powinna zawierać tylko składni obsługiwane w wersja przez subskrybent.
Jeśli subskrybent republishes danych, zmiany jedynym obsługiwanym schematu są Dodawanie i upuszczając kolumna.Należy wprowadzić te zmiany na Wydawca przy użyciu sp_repladdcolumn (języka Transact-SQL) i sp_repldropcolumn (Transact-SQL) zamiast składni instrukcji ALTER tabela DDL.
Zmiany schematu są propagowane do innych niż-SQL Server Subskrybentów.
Zmiany schematu nie są propagowane z innych niż-SQL Server Wydawców.
Nie można zmieniać widoki indeksowane, które są replikowane jako tabele.Indeksowane widoki, które są replikowane jako Widoki indeksowane może zostać zmieniony, ale ich modyfikacji spowoduje ich stają się regularne widoków, a nie widoków indeksowanych.
Jeśli publikacja obsługuje natychmiastowe aktualizowanie lub aktualizowanie subskrypcji w kolejce, system musi być quiesced przed wprowadzeniem zmian w schemacie: Wydawca i subskrybentów musi zostać zatrzymana, wszystkie operacje wykonywane na opublikowaną tabela i dane do czasu zmiany muszą być propagowane do wszystkich węzłów. Po zmiany schematu są propagowane do wszystkich węzłów, opublikowanych tabel może wznowić działania.
Jeśli publikacja jest w topologii typu peer-to-peer, system musi być quiesced przed wprowadzeniem zmian w schemacie.Aby uzyskać więcej informacji zobacz How to: Quiesce a Replication Topology (Replication Transact-SQL Programming).
Dodawanie kolumna sygnatury czasowej do tabela i mapowanie sygnatury czasowej do binary(8) powoduje artykuł, aby ustawienie ponownie być inicjowane dla wszystkich aktywnych subskrypcji.
replikacja łączenia
W jaki sposób zmiany schematu uchwyty replikacja łączenia zależy od tego, poziom zgodności publikacja i czy migawka jest ustawiony na tryb macierzysty (domyślnie) lub w trybie znaków:
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żywać sp_repladdcolumn (języka Transact-SQL) i sp_repldropcolumn (Transact-SQL) Dodawanie i usuwanie kolumn. Procedury te są jednak zastąpiona.
Podczas próby dodania do istniejącego artykuł kolumna o typie danych, który został wprowadzony w SQL Server 2008, SQL Server zawiera następujące zachowanie:
100RTM macierzystym migawka
100RTM migawka znaków
Wszystkie inne poziomy zgodności
hierarchyid
Zezwalaj na zmiany
Blokowanie zmian
Blokowanie zmian
geography i geometry
Zezwalaj na zmiany
Zezwalaj na zmiany1
Blokowanie zmian
filestream
Zezwalaj na zmiany
Blokowanie zmian
Blokowanie zmian
date, time, datetime2, a datetimeoffset
Zezwalaj na zmiany
Zezwalaj na zmiany1
Blokowanie zmian
1 Program SQL Server Compact subskrybent przekonwertować te typy danych przez subskrybent.
Aby uzyskać więcej informacji dotyczących zgodności publikacja zobacz sekcję "Poziom zgodności dla publikacja korespondencji seryjnej" w Using Multiple Versions of SQL Server in a Replication Topology.
Ustawienie ponownie, jeśli wystąpi błąd podczas stosowania zmian schematu (na przykład wynikające z dodawania klucz obcy, które odwołuje się do tabela nie są dostępne przez subskrybent błąd), synchronizacja nie powiedzie się i subskrypcja musi być inicjowane.
Jeżeli zmiany schematu na kolumna w łączyć filtr lub filtr sparametryzowana, należy ponownie zainicjować wszystkie subskrypcje i ponownie wygenerować migawkę.
replikacja łączenia zawiera procedur przechowywanych, aby pominąć zmiany schematu podczas rozwiązywania problemów.Aby uzyskać więcej informacji zobacz sp_markpendingschemachange (Transact-SQL) i sp_enumeratependingschemachanges (języka Transact-SQL).
See Also