Publikuj dane i obiekty bazy danych

Dotyczy:SQL ServerAzure SQL Managed Instance

Podczas tworzenia publikacji wybierasz tabele i inne obiekty bazy danych, które chcesz opublikować. Następujące obiekty bazy danych można opublikować przy użyciu replikacji.

Obiekt bazy danych Replikacja migawki i replikacja transakcyjna Replikacja scalająca
Tables X X
Tabele partycjonowane X X
Procedury składowane — definicja (Transact-SQL i CLR) X X
Procedury składowane — wykonywanie (Transact-SQL i CLR) X no
Views X X
Widoki indeksowane X X
Indeksowane widoki jako tabele X no
Typy zdefiniowane przez użytkownika (CLR) X X
Funkcje zdefiniowane przez użytkownika (Transact-SQL oraz CLR) X X
Typy danych aliasu X X
Indeksy pełnotekstowe X X
Obiekty schematu (ograniczenia, indeksy, wyzwalacze DML użytkownika, właściwości rozszerzone i sortowanie) X X

Tworzenie publikacji

Aby stworzyć publikację, podaj następujące informacje:

  • Dystrybutor.
  • Lokalizacja plików migawek.
  • Baza danych publikacji.
  • Typ publikacji do utworzenia (migawka, transakcyjna, transakcyjna z aktualizowalnymi subskrypcjami lub scalanie).
  • Obiekty danych i bazy danych (artykuły) do uwzględnienia w publikacji.
  • Statyczne filtry wierszy i filtry kolumn dla wszystkich typów publikacji oraz sparametryzowane filtry wierszy i filtry sprzężeń dla publikacji korespondencji.
  • Harmonogram agenta Snapshot.
  • Konta, pod którymi działają następujący agenci: Snapshot Agent dla wszystkich publikacji; Log Reader Agent dla wszystkich publikacji transakcyjnych; Queue Reader Agent dla publikacji transakcyjnych umożliwiających aktualizację subskrypcji.
  • Nazwa i opis publikacji.

Aby uzyskać informacje o pracy z publikacjami, zobacz następujące artykuły:

Note

Usunięcie artykułu lub publikacji nie usuwa obiektów z Subscriber.

Tabele publikacyjne

Najczęściej publikowanym obiektem jest tabela. Poniższe linki zawierają więcej informacji o publikowaniu tabel:

Gdy publikujesz tabelę do replikacji, możesz określić, które obiekty schematu skopiować do Abonenta, na przykład deklarowaną integralność referencyjną (ograniczenia klucza głównego, ograniczenia referencyjne, unikalne ograniczenia), indeksy, wyzwalacze DML użytkownika (wyzwalacze DDL nie mogą być replikowane), rozszerzone właściwości oraz sortowanie. Właściwości rozszerzone są replikowane tylko w początkowej synchronizacji między wydawcą i subskrybentem. Jeśli dodasz lub zmodyfikujesz właściwość rozszerzoną po początkowej synchronizacji, zmiana nie zostanie zreplikowana.

Aby określić opcje schematu, zobacz Określanie opcji schematu lub SchemaOption.

Partycjonowane tabele i indeksy

Replikacja obsługuje publikację tabel partycjonowanych i indeksów. Poziom wsparcia zależy od rodzaju replikacji, którego używasz, oraz od opcji określonych dla publikacji i artykułów powiązanych z tabelami partycjonowanymi. Aby uzyskać więcej informacji, zobacz Replikowanie partycjonowanych tabel i indeksów.

Publikowanie procedur przechowywanych

Wszystkie typy replikacji pozwalają na replikację definicji procedur przechowywanych: instrukcja CREATE PROCEDURE jest kopiowana do każdego Subskrybenta. W przypadku procedur składowanych środowiska uruchomieniowego języka wspólnego (CLR) skojarzony zestaw jest również kopiowany. Zmiany procedur są replikowane do subskrybentów; zmiany w powiązanych zespołach nie.

Oprócz replikowania definicji procedury składowanej replikacja transakcyjna umożliwia replikowanie wykonywania procedur składowanych. Ta funkcja jest przydatna do replikacji wyników procedur przechowywanych zorientowanych na utrzymanie, które wpływają na duże ilości danych. Aby uzyskać więcej informacji, zobacz Publikowanie wykonywania procedury składowanej w replikacji transakcyjnej.

Publikowanie widoków

Wszystkie typy replikacji umożliwiają replikowanie widoków. Możesz skopiować widok i towarzyszący mu indeks (jeśli jest to widok indeksowy) do Subscriber, ale musisz też odtworzyć podstawową tabelę.

W przypadku widoków indeksowanych replikacja transakcyjna umożliwia również replikowanie indeksowanego widoku jako tabeli, a nie widoku, eliminując również konieczność replikowania tabeli podstawowej. W tym celu określ dla parametru @type procedury sp_addarticle (Transact-SQL) jedną z opcji „indexed view logbased”. Aby uzyskać więcej informacji na temat korzystania z sp_addarticle, zobacz Definiowanie artykułu.

Publikowanie funkcji definiowanych przez użytkownika

Instrukcje CREATE FUNCTION dotyczące funkcji CLR i funkcji Transact-SQL są kopiowane do każdego subskrybenta. W przypadku funkcji CLR powiązany zestaw jest również kopiowany. Zmiany funkcji są replikowane do Subskrybentów; zmiany w powiązanych zespołach nie.

Publikowanie typów zdefiniowanych przez użytkownika i aliasowych typów danych

Replikacja traktuje kolumny wykorzystujące typy zdefiniowane przez użytkownika lub typy danych alias, jak inne kolumny i replikuje je subskrybentom. Proces uruchamia polecenie CREATE TYPE dla każdego replikowanego typu u Subskrybenta przed utworzeniem tabeli. Dla typów definiowanych przez użytkownika replikacja kopiuje również powiązany asembl do każdego Subskrybenta. Replikacja nie replikuje zmian typów zdefiniowanych przez użytkownika i typów danych aliasów do Subskrybentów.

Jeśli zdefiniujesz typ w bazie danych, ale nie odwołujesz się do niego w kolumnach podczas tworzenia publikacji, replikacja nie kopiuje tego typu do Subscribers. Jeśli później utworzysz kolumnę tego typu w bazie danych i chcesz ją zreplikować, najpierw musisz ręcznie skopiować typ (oraz powiązany asembl dla typu zdefiniowanego przez użytkownika) do każdego Subskrybenta.

Publikowanie indeksów pełnotekstowych

Instrukcja CREATE FULLTEXT INDEX jest kopiowana do każdego Subskrybenta, a indeks pełnotekstowy jest tworzony u Subskrybenta. Zmiany wprowadzone w indeksach pełnotekstowych za pomocą polecenia ALTER FULLTEXT INDEX nie są replikowane.

Wprowadzanie zmian w schemacie opublikowanych obiektów

Replikacja obsługuje szeroką gamę zmian schematu w opublikowanych obiektach. Gdy wprowadzisz dowolną z poniższych zmian schematu we właściwym opublikowanym obiekcie u Wydawcy programu SQL Server, replikacja domyślnie propaguje te zmiany do wszystkich Subskrybentów programu SQL Server:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

Aby uzyskać więcej informacji, zobacz Wprowadzanie zmian schematu w bazach danych publikacji.

Rozważania dotyczące publikacji

Należy pamiętać o następujących aspektach przy publikowaniu obiektów bazy danych:

  • Użytkownicy mogą uzyskiwać dostęp do bazy danych podczas tworzenia publikacji i początkowej migawki, ale najlepiej tworzyć publikacje w okresach mniejszej aktywności na serwerze Publisher.

  • Nie możesz zmienić nazwy bazy danych po utworzeniu w niej publikacji. Aby zmienić nazwę bazy danych, najpierw musisz usunąć replikację z bazy.

  • Jeśli publikujesz obiekt bazy danych, który zależy od jednego lub więcej innych obiektów bazy danych, musisz opublikować wszystkie obiekty z referencji. Jeśli na przykład opublikujesz widok zależny od tabeli, musisz również opublikować tabelę.

    Note

    Jeśli dodasz artykuł do publikacji scalonej, a istniejący artykuł zależy od nowego artykułu, musisz określić kolejność przetwarzania dla obu artykułów, używając parametrów @processing_ordersp_addmergearticle i sp_changemergearticle. Weźmy pod uwagę następujący scenariusz: publikujesz tabelę, ale nie publikujesz funkcji, do której tabela się odwołuje. Jeśli nie opublikujesz funkcji, tabela nie będzie mogła zostać utworzona u subskrybenta. Dodając funkcję do publikacji: określ wartość 1 dla parametru @processing_order procedury sp_addmergearticle; i określ wartość 2 dla parametru @processing_order procedury sp_changemergearticle, podając nazwę tabeli dla parametru @article. Ta kolejność przetwarzania zapewnia utworzenie funkcji u Subskrybenta przed utworzeniem tabeli, która jest od niej zależna. Dla każdego artykułu można użyć różnych liczb, o ile liczba funkcji jest niższa niż liczba tabeli.

  • Nazwy publikacji nie mogą zawierać następujących znaków: % * [ ] | : " ? \ / <>.

Ograniczenia w publikowaniu obiektów

  • Maksymalna liczba artykułów i felietonów, które możesz opublikować, różni się w zależności od rodzaju publikacji. Aby uzyskać więcej informacji, zobacz sekcję "Obiekty replikacji" specyfikacji maksymalnej pojemności dla SQL Server.

  • Nie możesz publikować procedur przechowywanych, widoków, wyzwalaczy ani funkcji definiowanych przez użytkownika, które są zdefiniowane jako Z SZYFROWANIEM w ramach replikacji SQL Server.

  • Możesz replikować kolekcje schematów XML, ale zmiany nie są replikowane po początkowym snapshotie.

  • Tabele opublikowane na potrzeby replikacji transakcyjnej muszą mieć klucz podstawowy. Jeśli tabela znajduje się w publikacji replikacji transakcyjnej, nie można wyłączyć żadnych indeksów powiązanych z kolumnami klucza głównego. Replikacja wymaga tych indeksów. Aby wyłączyć indeks, należy najpierw usunąć tabelę z publikacji.

  • Powiązane wartości domyślne utworzone za pomocą polecenia sp_bindefault (Transact-SQL) nie są replikowane (powiązane wartości domyślne są przestarzałe i zastępowane przez wartości domyślne tworzone za pomocą słowa kluczowego DEFAULT w elementach ALTER TABLE lub CREATE TABLE).

  • Nie możesz publikować funkcji zawierających wskazówkę NOEXPAND w widokach indeksowanych w tej samej publikacji co tabele i widoki indeksowane, ze względu na kolejność, w jakiej agent dystrybucji je dostarcza. Aby obejść ten problem, umieść tabelę i indeksowany widok w pierwszej publikacji i dodaj funkcje zawierające wskazówkę NOEXPAND dotyczącą indeksowanych widoków do drugiej publikacji, która zostanie opublikowana po zakończeniu pierwszej publikacji. Możesz też utworzyć skrypty dla tych funkcji i dostarczyć skrypt przy użyciu parametru @post_snapshot_script sp_addpublication.

Schematy i własność obiektu

Replikacja ma następujące domyślne zachowanie w Kreatorze nowej publikacji w odniesieniu do schematów i własności obiektów:

  • W przypadku artykułów w publikacjach scaleniowych z poziomem zgodności 90 lub wyższym, publikacjach migawek i publikacjach transakcyjnych: domyślnie właściciel obiektu u Subskrybenta jest taki sam jak właściciel odpowiedniego obiektu u Wydawcy. Jeśli schematy, do których należą obiekty, nie istnieją u subskrybenta, są tworzone automatycznie.

  • W przypadku artykułów w publikacjach scalających o poziomie zgodności niższym niż 90: domyślnie właściciel pozostaje pusty i zostaje określony jako dbo podczas tworzenia obiektu na subskrybencie.

  • W przypadku artykułów w publikacjach Oracle: domyślnie właściciel jest określany jako dbo.

  • W przypadku artykułów w publikacjach korzystających z migawek trybu znaków (które są używane dla subskrybentów innych niż subskrybenci programu SQL Server i subskrybenci programu SQL Server Compact): domyślnie właściciel pozostaje pusty. Właścicielem domyślnym jest właściciel przypisany do konta używanego przez agenta dystrybucji lub agenta scalania w celu połączenia z subskrybentem.

Możesz zmienić właściciela obiektu przez okno dialogowe Article Properties - <Article> oraz za pomocą następujących procedur przechowywanych: sp_addarticle, sp_addmergearticle, sp_changearticle i sp_changemergearticle. Aby uzyskać więcej informacji, zobacz Wyświetlanie i modyfikowanie właściwości publikacji, Definiowanie artykułu oraz Wyświetlanie i modyfikowanie właściwości artykułu.

Publikowanie danych dla subskrybentów z poprzednimi wersjami SQL Server

  • Jeśli publikujesz do subskrybenta działającego na wcześniejszej wersji SQL Server, jesteś ograniczony do funkcjonalności tej wersji. To ograniczenie dotyczy zarówno funkcjonalności specyficznej dla replikacji, jak i ogólnej funkcjonalności produktu.

  • Publikacje scalane wykorzystują poziom kompatybilności, który określa, jakie funkcje możesz wykorzystać w publikacji i pozwala wspierać subskrybentów uruchamiających poprzednie wersje SQL Server.

Publikowanie tabel w więcej niż jednej publikacji

Replikacja wspiera publikowanie artykułów w wielu publikacjach, w tym ponowne publikowanie danych, z następującymi ograniczeniami:

  • Jeśli publikujesz artykuł zarówno w publikacji transakcyjnej, jak i w publikacji scalanej, ustaw właściwość @published_in_tran_pub na TRUE dla artykułu scalonego. Aby uzyskać więcej informacji na temat ustawiania właściwości, zobacz Wyświetlanie i modyfikowanie właściwości publikacji oraz Wyświetlanie i Modyfikowanie właściwości artykułu.

    Ustaw właściwość @published_in_tran_pub, jeśli artykuł należy do subskrypcji transakcyjnej i jest uwzględniony w publikacji scalającej. Domyślnie replikacja transakcyjna zakłada, że tabele u Subskrybenta będą tylko do odczytu. Jeśli replikacja łączona powoduje zmiany danych w tabeli w subskrypcji transakcyjnej, może wystąpić brak zbieżności danych. Aby uniknąć tego problemu, w publikacji merge określ każdą taką tabelę jako tylko do pobrania. To ustawienie uniemożliwia subskrybentowi scalania przesyłanie zmian danych do tabeli. Aby uzyskać więcej informacji, zobacz Optymalizacja wydajności replikacji scalającej przy użyciu artykułów tylko do pobierania.

  • Nie można opublikować artykułu jednocześnie w publikacji łączonej i w publikacji transakcyjnej z subskrypcjami aktualizowanymi w kolejce.

  • Nie można ponownie publikować artykułów zawartych w publikacjach transakcyjnych, które wspierają aktualizację subskrypcji.

  • Jeśli publikujesz artykuł w więcej niż jednej publikacji transakcyjnej, która obsługuje kolejkowe aktualizacje subskrypcji, artykuł musi mieć tę samą wartość dla następujących właściwości we wszystkich publikacjach:

    Majątek Parametr procedury sp_addarticle
    Zarządzanie zakresem tożsamości @auto_identity_range (przestarzałe) i @identityrangemangementoption
    zakres tożsamości wydawcy @pub_identity_range
    Zakres tożsamości @identity_range
    Próg zakresu tożsamości @threshold

    Aby uzyskać więcej informacji na temat tych parametrów, zobacz sp_addarticle (Transact-SQL).

  • Jeśli publikujesz artykuł w więcej niż jednej publikacji scalonej, artykuł musi mieć tę samą wartość dla następujących właściwości we wszystkich publikacjach:

    Majątek Parametr procedury sp_addmergearticle
    Śledzenie kolumn @column_tracking
    Opcje schematu @schema_option
    Filtrowanie kolumn @vertical_partition
    Opcje przesyłania subskrybenta @subscriber_upload_options
    Śledzenie warunkowego usuwania @delete_tracking
    Kompensacja błędów @compensate_for_errors
    Zarządzanie zakresem tożsamości @auto_identity_range (przestarzałe) i @identityrangemangementoption
    zakres tożsamości wydawcy @pub_identity_range
    Zakres tożsamości @identity_range
    Próg zakresu tożsamości @threshold
    Opcje partycji @partition_options
    Przesyłanie strumieniowe kolumn BLOB @stream_blob_columns
    Typ filtru @filter_type (parametr w procedurze sp_addmergefilter)

    Aby uzyskać więcej informacji na temat tych parametrów, zobacz sp_addmergearticle (Transact-SQL) i sp_addmergefilter (Transact-SQL).

  • Replikacja transakcyjna i niefiltrowana replikacja scalająca obsługują publikowanie tabeli w wielu publikacjach, a następnie utworzenie subskrypcji w ramach jednej tabeli w subskrybowanej bazie danych (co jest powszechnie określane jako scenariusz sumowania (rollup)). Rollup często służy do agregowania podzbiorów danych z wielu lokalizacji w jednej tabeli na centralnym Subskrybencie. Publikacje scalane z filtrowaniem nie obsługują scenariusza centralnego subskrybenta. Dla replikacji merge rollup jest zazwyczaj realizowany przez jedną publikację z parametryzowanymi filtrami wierszowymi. Aby uzyskać więcej informacji, zobacz Sparametryzowane filtry wierszy.