Udostępnij za pośrednictwem


Sparametryzowana filtry wierszy

Filtry sparametryzowana zezwalać na różnych partycjach danych, które mają być wysyłane do subskrybentów różnych bez konieczności wiele publikacji, które ma zostać utworzony (sparametryzowana filtry zostały określone jako dynamiczne filtry w poprzednich wersjach SQL Server). Partycja jest po prostu podzbiór wierszy w tabela, w zależności od ustawień wybranych przy tworzeniu filtrów sparametryzowana, każdy wiersz w tabela opublikowanych może należeć do jednej partycji (co daje nonoverlapping partycje) lub do dwóch lub więcej partycji (co daje partycje zachodzących na siebie).

Nonoverlapping partycje mogą być współużytkowane przez subskrypcja lub mogą one być ograniczona w taki sposób, aby tylko jeden subskrypcja odbiera danej partycji.Ustawień, które kontrolują zachowanie partycji są opisane w "Using odpowiedni filtrowania opcje" w dalszej części tego tematu.Używając tych ustawień można dopasować filtrowanie parametryczne zgodnie z wymaganiami aplikacji i wydajności.Ogólnie rzecz biorąc nakładające się partycje pozwalają na większą elastyczność i nonoverlapping partycje replikowane do pojedynczej subskrypcja zapewniają lepszą wydajność.

Sparametryzowana filtry są używane w jednej tabela i zazwyczaj są łączone z filtrami łączyć rozszerzenie filtrowania w tabelach pokrewnych.Aby uzyskać więcej informacji zobacz łączyć Filtry.

Aby zdefiniować lub zmodyfikować sparametryzowany filtr wierszy

W jaki sposób sparametryzowana Praca filtrów

sparametryzowany filtr wierszy użyto klauzula WHERE, aby wybrać odpowiednie dane, które zostaną opublikowane.Zamiast określania wartości literału w klauzula (tak jak przy użyciu filtru statyczne wiersza), można określić jedną lub obie z następujących funkcje systemowe: SUSER_SNAME() i HOST_NAME(). Można również użyć funkcja zdefiniowanych przez użytkownika, ale należy dołączyć SUSER_SNAME() lub HOST_NAME() treści funkcja lub jedna z tych funkcja systemu (takich jak ocena MyUDF(SUSER_SNAME()). Jeśli funkcja zdefiniowana przez użytkownika zawiera SUSER_SNAME() lub HOST_NAME() w treści tej funkcji, nie może przekazać do funkcji parametry.

funkcje systemowe SUSER_SNAME() i HOST_NAME() nie są specyficzne dla scalania replikacja, ale są one używane w korespondencji seryjnej replikacja sparametryzowana filtrowania:

  • SUSER_SNAME() zwraca informacje logowania dla połączenia z wystąpienie programu SQL Server. Używany w filtrze sparametryzowana, zwraca identyfikator logowania, używana przez agenta korespondencji seryjnej, aby połączyć się z wydawcą (należy określić identyfikator logowania podczas tworzenia subskrypcja).

  • HOST_NAME() zwraca nazwę komputera, który łączy się z wystąpienie SQL Server. Gdy używane w filtrze sparametryzowana, domyślnie zwraca nazwę komputera, na którym uruchomiony jest Agent korespondencji seryjnej.Dla subskrypcji ściąganej jest nazwą subskrybent; dla subskrypcji wypychanych jest nazwą dystrybutor.

    Możliwe jest także do zastąpienia tej funkcja z wartości innej niż Nazwa subskrybent lub dystrybutor.Zwykle aplikacje zastąpić tę funkcja z wartościami bardziej opisową, na przykład nazwisko sprzedawcy lub identyfikator sprzedawcy.Aby uzyskać więcej informacji zobacz sekcję "Zastępowanie HOST_NAME() wartość" w tym temacie.

Wartość zwracana przez funkcja systemu jest porównywany z wskazanej w tabela zostanie filtrowania, a odpowiednie dane są pobierane do subskrybent.To porównanie jest wykonywana podczas inicjowania subskrypcja (tylko odpowiednie dane zawarte w początkowym migawka) i za każdym razem subskrypcja jest synchronizowany.Domyślnie, jeśli powoduje zmianę przy Wydawca w wierszu, zostanie przeniesione z partycji, wiersz zostanie usunięty przez subskrybent (to zachowanie jest kontrolowany za pomocą @ allow_partition_realignment parametrsp_addmergepublication (języka Transact-SQL)).

Uwaga

Gdy porównania dla filtrów parametrami, jest zawsze używana sortowanie bazy danych.Na przykład jeśli sortowanie bazy danych jest rozróżniana wielkość liter sortowanie tabela lub kolumna, porównanie będzie rozróżniana wielkość znaków.

Filtrowanie z SUSER_SNAME()

Należy wziąć pod uwagę Tabela pracowników in the Adventure Works Przykładowa baza danych. Ta tabela zawiera kolumna LoginID, która zawiera identyfikator logowania dla każdego pracownika w formularzu „domena\login'.Aby filtrować w tej tabela Pracownicy otrzymują tylko dane związane z nimi, określić klauzula filtru:

LoginID = SUSER_SNAME()

Na przykład wartość dla jednego z pracowników jest adventure-works\john5.Gdy Agent Scal łączy się z Wydawca, korzysta z logowania, określone podczas tworzenia subskrypcja (w tym przypadek adventure-works\john5).Scal Agent następnie porównuje wartość zwracana przez SUSER_SNAME() wartości z tabela i pobiera tylko wiersz, który znajduje się wartość adventure-works\john5 w LoginID kolumna.

Filtrowanie z HOST_NAME()

Należy wziąć pod uwagę HumanResources.Employee tabela.Załóżmy, że takie jak zawarte w tej tabela kolumna Nazwa_komputera o nazwie komputera każdego pracownika w postaci „name_computertype'.Aby filtrować w tej tabela Pracownicy otrzymują tylko dane związane z nimi, określić klauzula filtru:

ComputerName = HOST_NAME()

Na przykład wartość dla jednego z pracowników może być "john5_laptop".Gdy Agent Scal łączy się z Wydawca, porównuje wartość zwracana przez HOST_NAME() do wartości w tabela, a pliki do pobrania tylko wiersz zawiera wartość "john5_laptop" w Nazwa_komputera kolumna.

Możliwe jest także łączyć funkcje w filtrze.Na przykład jeśli trzeba zapewnić, że pracownik odbierane dane tylko wtedy, gdy są używane ich logowania na komputerze, może być klauzulę filtru:

LoginID = SUSER_SNAME() AND ComputerName = HOST_NAME()

O ile zachodzą wartość HOST_NAME(), filtrowanie z HOST_NAME() jest zazwyczaj używany tylko w przypadku ściągać subskrypcji.Wartość zwracana przez funkcja jest nazwa komputera, na którym uruchomiony jest Agent korespondencji seryjnej.Dla ściągać subskrypcja, wartość jest inny dla każdej subskrypcja, ale dla subskrypcja wypychanych wartość jest taka sama (wszystkie Scal agenci w dystrybutor dla subskrypcja wypychanych).

Security noteSecurity Note:

Wartość funkcja HOST_NAME() może zostać zastąpiona, dlatego nie jest możliwe stosowanie filtrów, które zawierają HOST_NAME() do sterowania dostępem do partycji danych.Do sterowania dostępem do partycji danych, należy użyć SUSER_SNAME() SUSER_SNAME() w połączeniu z HOST_NAME(), lub za pomocą wiersza statycznych filtrów.

Zastępowanie wartości HOST_NAME()

Jak wspomniano wcześniej, HOST_NAME() domyślnie zwraca nazwę komputera, który łączy się z wystąpienie SQL Server. W przypadku korzystania z filtrów parametrami, jest wspólne, aby zastąpić tę wartość podczas tworzenia subskrypcja, podając wartość.Następnie funkcja HOST_NAME() zwraca wartość określoną przez użytkownika zamiast nazwy komputera.

Uwaga

Jeśli HOST_NAME() zostanie zmieniona, wszystkie wywołania funkcja HOST_NAME() zwróci wartość określoną przez użytkownika.Upewnij się, że inne aplikacje nie są zależności HOST_NAME() zwracająca nazwę komputera.

Należy wziąć pod uwagę HumanResources.Employee tabela.Ta tabela zawiera kolumna Pole IDPracownika.Aby filtrować w tej tabela, dzięki czemu każdy pracownik otrzymuje tylko dane związane z nimi, określić klauzula filtru:

EmployeeID = CONVERT(int,HOST_NAME())

Na przykład pracownik Pamela Ansman-Wolfe został przypisany identyfikator pracownika z 280.Określ wartość Identyfikator pracownika (280 w naszym przykładzie) dla wartości HOST_NAME() podczas tworzenia subskrypcja dla tego pracownika.Gdy agent korespondencji seryjnej łączy się z wydawcą, porównuje wartość zwracana przez HOST_NAME() wartości z tabela i pobiera tylko wiersz, który znajduje się wartość 280 w Pole IDPracownika kolumna.

Important noteImportant Note:

Zwraca wartość funkcja HOST_NAME() nchar wartość tak, należy użyć CONVERT kolumna w filtrze klauzula jest typ danych numerycznych, jak w powyższym przykładzie. Ze względu na wydajność zaleca się że użytkownik nie mają zastosowania funkcji nazw kolumn w klauzul sparametryzowany filtr wierszy, takich jak CONVERT(nchar,EmployeeID) = HOST_NAME(). Zamiast tego zaleca się, aby w sposób, w przykładzie: EmployeeID = CONVERT(int,HOST_NAME()).This clause can be used for the @subset_filterclause parameter of sp_addmergearticle, but it typically cannot be used in the New Publication Wizard (the wizard executes the filter clause to validate it, which fails because the computer name cannot be converted to an int).Jeżeli używasz Kreatora nowej publikacja, zaleca się określenie CONVERT(nchar,EmployeeID) = HOST_NAME() w kreatorze, a następnie użyj sp_changemergearticle zmiany klauzulaEmployeeID = CONVERT(int,HOST_NAME()) Przed utworzeniem migawkę w publikacja.

Aby zastąpić wartość HOST_NAME()

Należy użyć jednej z następujących metod, aby zastąpić wartość HOST_NAME():

Inicjowanie subskrypcja na publikacja w sieci z filtrami sparametryzowana

Użyto filtrów parametrami wiersza w publikacji seryjnej replikacja inicjuje każdego subskrypcja z dokładną dwóch części.Aby uzyskać więcej informacji zobacz Migawki publikacji korespondencji seryjnej z filtrami sparametryzowana.

Korzystając z opcji filtrowania odpowiedni

Istnieją dwóch podstawowych obszarach, w którym użytkownik ma kontrolę podczas korzystania z parametrami filtrów:

  • W jaki sposób filtry są przetwarzane przez replikacja łączenia, które są kontrolowane przez jedną z dwóch ustawień publikacja: użyć grup partycji and Zachowaj zmiany partycji.

  • W jaki sposób dane współużytkowany subskrybentów, które muszą być odzwierciedlone przez ustawienie artykuł opcje partycji.

Aby zestaw opcje filtrowania

Ustawienie "grup partycji" i "Zachowaj zmiany partycji"

Oba użyć grup partycji and Zachowaj zmiany partycji opcje poprawić wydajność synchronizacji dla publikacja z filtrowanym artykuły dzięki przechowywaniu dodatkowe metadane w bazie danych publikacja.The use partition groups option provides greater performance improvement through the use of the precomputed partitions feature.Ta opcja jest ustawiona na true Domyślnie, jeśli zestaw wymagań zgodne w artykułach w publikacja. Aby uzyskać więcej informacji na temat tych wymagań zobacz Optymalizacja sparametryzowana wydajności filtr z Precomputed partycji. Jeśli Twój artykuł nie spełniają wymagania dotyczące korzystania z partycji precomputed, Zachowaj zmiany partycji możliwość zestaw do true.

Ustawienie „ partition opcji „

Określ wartość w polu opcje partycji właściwość podczas tworzenia artykuł, zgodnie ze sposobem, w którym dane w filtrowanej tabela będą udostępniane przez subskrybentów.Właściwość zestaw jedną z czterech wartości przy użyciu sp_addmergearticle, sp_changemergearticle, and the Właściwości artykuł -okno dialogowe.Właściwość zestaw jedną z dwóch wartości za pomocą Dodawanie filtru or Edytuj filtr oknach dialogowych, które są dostępne z Kreatora nowych publikacja i Właściwości publikacja -okno dialogowe.W poniższej tabela zestawiono dostępne wartości:

Description

Dodaj wartość filtru i edytowanie filtru

Wartość właściwości artykuł

Wartość w procedurach przechowywanych

Dane w partycjach jest nakładających się i subskrybent można aktualizować kolumn, do którego odwołuje się sparametryzowana filtru.

Wiersz z tej tabela zostaną wysłane do wielu subskrypcji

Nakładające się

0

Dane w partycjach jest nakładających się i subskrybent nie może zaktualizować kolumny, do którego odwołuje się sparametryzowana filtru.

NIE DOTYCZY1

Nakładające się, nie zezwalaj na zmiany limitu z partycji danych

1

Dane w partycji nie jest nakładających się i dane są współużytkowane przez subskrypcji.Subskrybent nie może zaktualizować kolumny, do którego odwołuje się sparametryzowana filtru.

NIE DOTYCZY1

Nonoverlapping współużytkowane subskrypcji

2

Dane w partycji nie jest nakładających się i pojedynczej subskrypcja dla każdej partycji.Subskrybent nie może zaktualizować kolumny, do którego odwołuje się sparametryzowana filtru. 2

Wiersz z tej tabela zostaną wysłane do pojedynczej subskrypcja

Subskrypcja nonoverlapping, pojedynczy

3

1 Jeśli ustawiono podstawowych opcji filtrowania0, or 1, or 2, the Dodawanie filtru and Edytuj filtr , okno dialogowe wyświetli Wiersz z tej tabela zostaną wysłane do wielu subskrypcji.

2 Jeżeli określono tę opcję, może istnieć tylko jeden subskrypcja dla każdej partycji danych w tym artykule.Jeśli tworzony jest drugim subskrypcja, w którym kryterium filtrowania nowej subskrypcja zamienia się na tej samej partycji co istniejących subskrypcja, zostanie usunięte istniejących subskrypcja.

Important noteImportant Note:

The partition options value must be zestaw according to how data is shared by Subscribers.Jeśli na przykład, można określić, że partycja jest nonoverlapping z pojedynczej subskrypcja dla każdej partycji, ale dane są wówczas zaktualizowany przez subskrybent innego, Agent korespondencji seryjnej może się nie powieść podczas synchronizacji, a zbieżności nie może występować.

Wybranie opcji trzeba partycji

Partycje nonoverlapping działa w połączeniu z precomputed partycji w celu poprawy wydajności w sytuacjach, w których akceptowane są pewne ograniczenia funkcjonalności.Partycje precomputed quicken pliki do pobrania dla subskrybentów, ale wolne przekazywania.Partycje nonoverlapping zminimalizować koszty wysyłania, związane z precomputed partycji.Zaletą wydajności nonoverlapping partycji jest bardziej zauważalnych podczas sparametryzowana filtrów i filtry łączyć używane są bardziej złożone.

Podejmując decyzję, które opcje partycji w publikacja, należy wziąć pod uwagę następujące scenariusze.

  • Adventure Works ma mobilnych pracowników działu sprzedaży z każdego Sprzedawca odpowiedzialny za klientów w danym kod pocztowy.Aplikacja wymaga to, że kod pocztowy można zaktualizować Jeśli klienta przemieszcza się z jednego obszaru sprzedaży do innego, dzięki czemu klient jest przypisany do innego sprzedawcy.Filtr sparametryzowana opiera się na kod pocztowy nabywcy, a aktualizacja jednego sprzedaży osoby partycji powoduje usunięcie kodu pocztowego i wstawi go do innego sprzedawcy na partycji.Wymaga to nakładających się partycje z możliwością aktualizowania kolumny, do którego odwołuje się sparametryzowana filtru.Opcja maksymalizuje elastyczność, ale nie może wykonać także nonoverlapping partycji.

  • Agencja rządowa zawiera dane, które są dostarczane do biur regionalnych, w każdej powiatu województwa.Dane nie nakłada się; każdy wiersz w tabela w siedzibie głównej Agencji znajduje się w tylko jedną partycję, ale ta partycja jest wysyłany do wielu biur w ten sam kod województwa.Opcja nonoverlapping partycję partycji współużytkowane subskrypcji jest właściwe, zapewniając poprawa wydajności przez siebie partycji podczas spełniający wymagania aplikacji.

  • Jeśli masz nonoverlapping partycji i tylko jeden subskrypcja odbiera i aktualizację danych na partycji, dalsze wydajność można uzyskać.W tym scenariuszu jest wspólne dla punktu sprzedaży systemów, a pole wymuszać aplikacji, w którym dane są przede wszystkim zebrane przez subskrybent i przekazać do Wydawca.Należy wziąć pod uwagę Pakiet tabela w aplikacji dostawy: jak każdy pakiet jest załadowana do wózek, stan pakiet zmienia się w Pakiet tabela, a zmiany są replikowane do siedzibie głównej.Sterowniki nie może zaktualizować stan ten sam pakiet na dwa różne wózków to Pakiet tabela jest odpowiednie do pełnienia funkcji nonoverlapping partycję z pojedynczej subskrypcja dla każdej partycji.

Uwagi dotyczące Nonoverlapping partycji

Podczas korzystania z partycji nonoverlapping, należy pamiętać o następujących zagadnień.

Zagadnienia ogólne

  • Publikacja musi używać precomputed partycji.

  • Wiersz musi się znajdować tylko jedna partycja.

  • Artykuły nie może być częścią rekord logiczny.

  • Partnerów do synchronizacji alternatywnej nie są obsługiwane (funkcja ta została zaniechana).

  • Subskrybent nie może zaktualizować kolumny, do którego odwołuje się sparametryzowana filtru.

  • Jeśli wstawiania na subskrybent nie należy do partycji, nie jest usuwany.Jednakże go będą nie będą replikowane na innych subskrybentów.

  • W pewnych okolicznościach z nakładających się partycje tożsamości zakresów są korygowane wstawianych Agent scalania danych.Nonoverlapping partycji zakresów można tylko skorygować podczas wstawia przez użytkownika, który ma uprawnienia do dostosowania zakresów tożsamości w bazie danych subskrypcja.Użytkownik musi albo własnej tabela lub być członkiem sysadmin stała rola serwera db_owner stałe rola bazy danych lub db_ddladmin stała rola bazy danych.

Dodatkowe zagadnienia dla Nonoverlapping partycji z pojedynczego subskrypcja na partycji

Dodatkowe zagadnienia dla filtrów łączyć

  • W łączyć filtrowanie hierarchii, artykuł z partycją nakładających się nie pojawia się powyżej artykuł nonoverlapping partycja.Oznacza to artykuł nadrzędnej trzeba użyć nonoverlapping partycji jest artykuł podrzędność.Aby uzyskać informacje o filtrach łączyć zobacz łączyć Filtry.

  • filtr łączenia, w których jest nonoverlapping partycji podrzędność musi mieć Unikatowy klucz łączyć właściwość jest ustawiona na 1.Aby uzyskać więcej informacji zobacz łączyć Filtry.

  • Artykuł powinien mieć tylko jeden filtr sparametryzowana lub łączyć filtru.Sparametryzowana filtru, przy czym do obiektu nadrzędnego w łączyć filtr jest dozwolony.Sparametryzowana filtru, są podrzędność w filtrze łączyć jest niedozwolone.Mających więcej niż jeden łączyć filtru również jest niedozwolone.

  • Jeśli dwie tabele w Wydawca istnieje relacja filtr łączenia i tabela podrzędnej ma wierszy, w których nie odpowiedni wiersz w tabela nadrzędnej, nie spowoduje wstawiania brakujących wierszy nadrzędnych w powiązane wiersze pobierane do subskrybent (wiersze pobierania z nakładających się partycje).Na przykład jeśli SalesOrderDetail tabela ma wierszy bez odpowiedniego wiersza w SalesOrderHeader tabeli, a wstawić brakujący wiersz SalesOrderHeaderpobierania subskrybent, ale odpowiadające im wiersze w , wierszSalesOrderDetail nie są.