Filtry parametrami wiersza
Filtry sparametryzowana zezwalać na różnych partycjach dane mają być wysyłane do subskrybentów różnych bez konieczności wiele publikacji do utworzenia (sparametryzowana filtry były określane jako dynamiczne filtry w poprzednich wersjach SQL Server).Partycja jest po prostu podzbiór wierszy w tabela; w zależności od ustawienia wybranego podczas tworzenia filtru sparametryzowana, każdy wiersz w tabela opublikowanych może należeć do jednej partycji tylko (wytwarzająca sasiadująco partycje) lub do dwóch lub więcej partycji (które daje nakładających się partycje).
Porządkuje partycje mogą być współużytkowane przez subskrypcja lub może być ograniczona tak, aby tylko jeden subskrypcja odbiera danej partycji.Ustawienia, które kontrolują zachowanie partycji są opisane w przy użyciu odpowiednich filtrowania "Opcje" w dalszej części tego tematu.Za pomocą tych ustawień można dopasować filtrowanie parametryczne zgodnie z wymaganiami aplikacji i wydajności.Ogólnie partycje nakładających się zezwolić na większą elastyczność i porządkuje partycje replikowane do pojedynczej subskrypcja zapewniają lepszą wydajność.
Sparametryzowana filtry są używane w jednej tabela i są zazwyczaj połączone z filtrów łączyć rozszerzenie filtrowania w tabelach pokrewnych.Aby uzyskać więcej informacji, zobacz Dołącz filtry.
Aby zdefiniować lub zmodyfikować sparametryzowany filtr wierszy
SQL Server Management Studio: Jak Definiowanie i modyfikowanie sparametryzowana filtr wiersza artykuł korespondencji seryjnej (SQL Server Management Studio)
Replikacja Transact-SQL programowania: Jak Definiowanie i modyfikowanie filtru sparametryzowana wiersz artykuł korespondencji seryjnej (Programowanie replikacji Transact-SQL)
Replikacja programowania Zarządzanie obiektami (RMO): Jak Definiowanie artykuł (Programowanie RMO)
Jak parametrami pracy filtrów
A sparametryzowany filtr wierszy korzysta z klauzula WHERE, aby wybrać odpowiednie dane, które zostaną opublikowane.Zamiast określania wartości literału w klauzula (jak w statyczny filtr wierszy), określić jedną lub obie z następujących funkcje systemowe: SUSER_SNAME() i HOST_NAME().Funkcje zdefiniowane przez użytkownika można także, ale musi zawierać w treści funkcja SUSER_SNAME() lub HOST_NAME() lub wypróbuj jeden z tych funkcje systemowe (takich jak MyUDF(SUSER_SNAME()).Jeśli funkcja zdefiniowana przez użytkownika zawiera SUSER_SNAME() lub HOST_NAME() w treści funkcji, nie można przekazać parametry funkcji.
funkcje systemowe SUSER_SNAME() i HOST_NAME() nie są specyficzne dla replikacja scalająca, ale są one używane przez replikacja scalająca sparametryzowana filtrowania:
SUSER_SNAME() zwraca informacje logowania dla połączenia z wystąpienie SQL Server.Używane w filtrze sparametryzowana, zwraca wartość logowania używane przez agenta scalić połączyć się z Wydawca (określić identyfikatora logowania podczas tworzenia subskrypcja).
HOST_NAME() zwraca nazwę komputera, który łączy się z wystąpienie SQL Server.Gdy stosowany filtr sparametryzowana, domyślnie zwraca nazwę komputera działa Agent scalania.Dla ściągać subskrypcji jest nazwa subskrybenta; dla wypychanie jest nazwą dystrybutor subskrypcji.
Jest również możliwe zastąpienie tej funkcja z wartość inną niż Nazwa subskrybenta lub dystrybutora.Zazwyczaj aplikacji zastępują tej funkcja z bardziej opisową wartości, takie jak nazwisko sprzedawcy lub identyfikator sprzedawcy.Aby uzyskać więcej informacji zobacz sekcję "Przesłanianie wartość HOST_NAME()" w tym temacie.
Wartość zwracana przez funkcja systemu jest porównywany z kolumna określić w tabela, filtrowania i subskrybenta pobierany jest odpowiednie dane.Porównanie to jest dokonywane podczas inicjowania subskrypcja (tylko odpowiednie dane zawarte w początkową migawkę) i co czas synchronizowane subskrypcja.Domyślnie, jeśli zmiana przez wydawcę wyniki w wierszu przenoszone z partycji, wiersz jest usunięty przez subskrybenta (to zachowanie jest kontrolowany za pomocą @ allow_partition_realignment parametr sp_addmergepublication (języka Transact-SQL)).
Ostrzeżenie
Porównań sparametryzowana filtrów, jest zawsze używana sortowanie bazy danych.Na przykład sortowania bazy danych jest przypadek wielkość liter, ale sortowanie tabela lub kolumna jest przypadek poufnych, będzie porównanie przypadek niewrażliwe.
Filtrowanie z SUSER_SNAME()
Należy rozważyć Employee tabela w Adventure Works przykładowej bazy danych.Ta tabela zawiera kolumna LoginID, który zawiera identyfikator logowania dla każdego pracownika w postaci "domena\login".Aby filtrować tej tabela Pracownicy otrzymują tylko dane z nimi związane, określ klauzula filtru:
LoginID = SUSER_SNAME()
Na przykład wartość dla jednego z pracowników jest "adventure works\john5".Gdy Agent scalić połączy się z Wydawca, korzysta z logowania określone podczas tworzenia subskrypcja (w tym przypadek "adventure works\john5").Agent scalić następnie porównuje wartość zwracana przez SUSER_SNAME() do wartości w tabela i pobiera tylko wiersz zawiera wartość "adventure works\john5" w LoginID kolumna.
Filtrowanie z HOST_NAME()
Należy rozważyć HumanResources.Employee tabela.Załóżmy, że takie jak zawarte w tej tabela kolumna nazwa_komputera z nazwą komputera każdego pracownika w postaci "name_computertype".Aby filtrować tej tabela Pracownicy otrzymują tylko dane z nimi związane, określ klauzula filtru:
ComputerName = HOST_NAME()
Na przykład wartość dla jednego z pracowników może być "john5_laptop".Gdy Agent scalić połączy się z Wydawca, porównuje wartość zwracana przez HOST_NAME() do wartości w tabela i pobiera tylko wiersz zawiera wartość "john5_laptop" w nazwa_komputera kolumna.
Jest również możliwe łączą funkcje w filtrze.Na przykład chcąc zapewnić, że pracownik odbierane dane tylko wtedy, gdy wykorzystane ich logowania na komputerze może być klauzula filtru:
LoginID = SUSER_SNAME() AND ComputerName = HOST_NAME()
O ile zachodzą wartość HOST_NAME(), filtrowanie z HOST_NAME() jest zazwyczaj używany tylko z ściągać subskrypcji.Wartość zwracana przez funkcja jest nazwa komputera działa Agent scalania.subskrypcja ściąganej, wartość jest inny dla każdej subskrypcja, ale dla wypychanie subskrypcja, wartość jest taka sama (Uruchom dystrybutora dla wszystkich agentów scalania wypychanie subskrypcje).
Uwaga dotycząca zabezpieczeń |
---|
Wartość funkcja HOST_NAME() może być zastąpiona; dlatego nie jest możliwe stosowanie filtrów, które zawierają HOST_NAME() do kontrolowania dostępu do partycji danych.Aby kontrolować dostęp do partycji danych, użyj SUSER_SNAME() SUSER_SNAME() w połączeniu z HOST_NAME(), lub wiersz statycznego filtry. |
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.Używanie filtrów sparametryzowana, jest wspólne zastąpić tę wartość podczas tworzenia subskrypcja, podając wartość.Następnie funkcja HOST_NAME() zwraca wartość zamiast nazwy komputera.
Ostrzeżenie
Jeśli można zastąpić HOST_NAME() wszystkie wywołania funkcja HOST_NAME() zwróci wartooć.Upewnij się, że inne aplikacje nie są zależności HOST_NAME() zwraca nazwę komputera.
Należy rozważyć HumanResources.Employee tabela.Ta tabela zawiera kolumna IDPracownika.Aby filtrować tej tabela tak, aby każdy pracownik otrzyma tylko dane z nimi związane, określ klauzula filtr:
EmployeeID = CONVERT(int,HOST_NAME())
Na przykład pracownik Pamela Ansman-Wolfe został przypisany identyfikator pracownika 280.Określ wartość Identyfikatora pracownika (280 w naszym przykładzie) dla wartości HOST_NAME() podczas tworzenia subskrypcja dla tego pracownika.Gdy Agent scalić połączy się z Wydawca, porównuje wartość zwracana przez HOST_NAME() do wartości w tabela i pobiera tylko wiersz zawiera wartość 280 w IDPracownika kolumna.
Ważne: |
---|
Funkcja HOST_NAME() zwraca nchar wartość tak, należy użyć konwersji kolumna w filtrze klauzula jest typ danych numerycznych, jak w powyższym przykładzie.Ze względu na wydajność, zaleca się funkcje nie stosuje się do nazw kolumn w sparametryzowany filtr wierszy klauzule, takie jak CONVERT(nchar,EmployeeID) = HOST_NAME().Zamiast tego zaleca się podejście 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śli używasz Kreatora nowej publikacja, zaleca się określenie CONVERT(nchar,EmployeeID) = HOST_NAME() w kreatorze, a następnie użyj sp_changemergearticle zmienić klauzula do EmployeeID = CONVERT(int,HOST_NAME()) przed utworzeniem migawka dla publikacja. |
Aby zastąpić wartość HOST_NAME()
Aby zastąpić wartość HOST_NAME(), użyj jednej z następujących metod:
SQL Server Management Studio: Określ wartość na HOST_NAME() wartości strona Kreatora nowej subskrypcji.Aby uzyskać więcej informacji o tworzeniu subskrypcji, zobacz Subskrybowanie publikacje.
Replikacja Transact-SQL programowania: Określ wartość dla @ hostname parametr sp_addmergesubscription (języka Transact-SQL) (dla wypychanie subskrypcje) lub sp_addmergepullsubscription_agent (języka Transact-SQL) (dla ściągać subskrypcje).
Scal agenta: Określ wartość dla - hostname parametru w wierszu polecenia lub poprzez agenta profilu.Aby uzyskać więcej informacji na temat scalania agenta Zobacz Agent replikacji scalania.Aby uzyskać więcej informacji o profilach agenta, zobacz Profile Agent replikacji.
Inicjowanie subskrypcji do publikacji z filtrami sparametryzowana
Użyto filtrów parametrami wiersza w publikacjach replikacja inicjuje subskrypcja z dwóch części migawka.Aby uzyskać więcej informacji, zobacz Migawki publikacji korespondencji seryjnej z filtrami sparametryzowana.
Korzystając z opcji filtrowania właściwe
Istnieją dwa klucz obszarów, nad którymi sprawuje kontrolę podczas używania sparametryzowana filtrów:
Jak filtry są przetwarzane przez replikacja scalająca jest kontrolowana przez jednego z dwóch ustawień publikacja: użyć grup partycji i zachować zmiany partycji.
Jak dane współużytkowany abonentów, które musi mieć odzwierciedlenie przez ustawienie artykuł Opcje partycji.
Aby zestaw opcje filtrowania
SQL Server Management Studio: Jak Optymalizacja sparametryzowana filtry wiersza (SQL Server Management Studio)
Replikacja Transact-SQL programowania: Jak Optymalizacja sparametryzowana filtry wiersza (Programowanie replikacji Transact-SQL)
Ustawienie 'Użyj grupy partycji' i "Zachowaj zmiany partycji"
Obie za pomocą grup partycji i zachować zmiany partycji opcje poprawić wydajność synchronizacji dla publikacja z artykułami filtrowane przez przechowywanie dodatkowe metadane w baza danych publikacja.Za pomocą grup partycji opcja zapewnia większy wzrost wydajności, korzystając z funkcji precomputed partycji.Opcja ta jest zestaw do true Domyślnie, jeśli artykuły w publikacja przylegają do zestaw wymagania.Aby uzyskać więcej informacji na temat tych wymagań, zobacz Optymalizacja sparametryzowana wydajności filtr partycji Precomputed.Jeśli artykuły nie spełniają wymagania dotyczące używania partycji precomputed zachować zmiany partycji jest opcja zestaw do true.
Ustawienie "opcje partycji"
Określ wartość dla Opcje partycji właściwość podczas tworzenia artykuł, zgodnie ze sposobem, w którym będą udostępniane dane w tabela filtrowane przez abonentów.Właściwość zestaw jedną z czterech wartości za pomocą sp_addmergearticle, sp_changemergearticleoraz Właściwości artykułu okno dialogowe.Właściwość zestaw jedną z dwóch wartości za pomocą Dodaj filtr lub Edytuj filtr okien dialogowych, które są dostępne w Kreatorze nowej publikacji i Właściwości publikacji okno dialogowe.W następującej tabela podsumowano dostępne wartości:
Opis |
Wartość dodać filtry i Edycja |
Wartość właściwości artykułu |
Wartość w procedurach przechowywanych |
---|---|---|---|
Zbieg danych w partycjach i subskrybenta można zaktualizować kolumny w filtr sparametryzowanej. |
Wiersz z tabela zostaną wysłane do wielu subskrypcji |
Nakładające się |
0 |
Zbieg danych w partycjach i subskrybent nie można zaktualizować kolumny w filtr sparametryzowanej. |
N/A1 |
Nachodzące na siebie, uniemożliwić zmiany danych poza partycji |
1 |
Dane w partycjach jest nakładania i danych jest współużytkowane subskrypcji.Subskrybent nie można zaktualizować kolumny w filtr sparametryzowanej. |
N/A1 |
Porządkuje, udostępnionych między subskrypcji |
2 |
Dane w partycjach jest nakładania i jest pojedynczym subskrypcja dla każdej partycji.Subskrybent nie można zaktualizować kolumny w filtr sparametryzowanej.2 |
Wiersz z tabela przejdzie do tylko jednego subskrypcja |
Porządkuje, pojedynczy subskrypcja |
3 |
1 Jeśli podstawowej opcja filtrowania jest zestaw do 0, lub 1, lub 2, Dodaj filtr i Edytuj filtr zostaną wyświetlone okna dialogowe wiersza z tabela zostaną wysłane do wielu subskrypcje.
2 Po określeniu tej opcji może istnieć tylko jeden subskrypcja dla każdej partycji danych w tym artykuł.Jeśli tworzony jest drugim subskrypcja, w którym kryterium filtrowania nowej subskrypcja jest rozpoznawany jako istniejącej subskrypcja tej samej partycji, istniejącej subskrypcja jest odrzucany.
Ważne: |
---|
Opcje partycji wartość musi być zestaw zgodnie z jak danych jest współużytkowana przez abonentów.Jeśli na przykład, możesz określić, że partycja jest sasiadująco w pojedynczej subskrypcja dla każdej partycji, ale dane są następnie zaktualizowany przez subskrybenta innego, scalanie agenta może się nie powieść podczas synchronizacji i zbieżności nie może występować. |
Wybranie opcji odpowiednią partycję
Porządkuje partycje działa w połączeniu z precomputed partycji w celu poprawy wydajności w sytuacji, gdy pewne ograniczenia funkcjonalności są dopuszczalne.Precomputed partycje programu quicken pobrań subskrybentów, ale wolne przekazywania.Porządkuje partycje zminimalizować koszty przekazywania skojarzonych z precomputed partycji.Poprawiać wydajność sasiadująco partycji jest bardziej odczuwalny podczas sparametryzowana filtry i filtry łączyć, stosowane są bardziej złożone.
Rozważ następujące scenariusze, wybierając opcje partycji w publikacja.
Adventure Works ma przenośnych działu sprzedaży z każdego sprzedawcy odpowiedzialnego za klientów w danym kod pocztowy.Aplikacja wymaga, że kod pocztowy aktualizowane w przypadku 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 odbiorcy i aktualizacja usuwa kod pocztowy z jednego sprzedaży osoby partycji i wstawi go do innej sprzedaży osoby partycji.Wymaga to możliwość aktualizacji kolumny w filtr sparametryzowana nakładających się partycje.Ta opcja maksymalizuje elastyczność, ale nie może wykonywać także sasiadująco partycji.
Agencja rządowa ma dane, dostarczonego do biur regionalnych w county każdego Państwa.Nie nakłada się dane; Każdy wiersz w tabela w siedzibie Agencji znajduje tylko jedna partycja, ale że partycja jest wysyłany do wielu biur w tej samej powiatu.Opcja sasiadująco partycji z partycjami współużytkowane subskrypcji jest właściwe, zapewniając lepszą wydajność nad nakładających się partycje, spełniając wymagania aplikacji.
Jeśli sasiadująco partycje i tylko jeden subskrypcja odbiera i aktualizuje dane w partycji, dalsze korzyści wydajności można uzyskać.W tym scenariuszu jest wspólna dla punktu sprzedaży systemów i pole Wymuszaj aplikacji, w których dane są głównie zbierane przez subskrybenta i przekazany do Wydawca.Należy rozważyć pakietu tabela w aplikacji dostawy: w każdym opakowaniu jest ładowany do wózka, zmieniono stan pakiet w pakiet tabela i zmiany są replikowane do siedziba.Sterowniki nie byłyby aktualizacji stanu tego samego pakiet na dwóch różnych wózków tak pakiet tabela jest dobrym kandydatem sasiadująco partycji z pojedynczym subskrypcja dla każdej partycji.
Zagadnienia dotyczące sasiadująco partycji
Podczas używania sasiadująco partycji, należy pamiętać o następujące uwagi.
Uwagi ogólne
Publikacja musi używać partycji precomputed.
Wiersz musi należeć do tylko jedna partycja.
Artykuły nie może być częścią rekord logiczny.
Nie są obsługiwane przez partnerów do synchronizacji alternatywny (funkcja ta została zaniechana).
Subskrybent nie można zaktualizować kolumny w filtr sparametryzowanej.
Jeśli Wstaw na subskrybent nie należą do partycji, nie jest usuwany.Jednak to nie zostanie replikowany do innych subskrybentów.
W pewnych okolicznościach nachodzące na siebie partycji tożsamości zakresy są korygowane wstawianych agenta scalania danych.Porządkuje partycji zakresy może być wyregulowany tylko podczas wstawia przez użytkownika posiadającego uprawnienia do dopasowania zakresów tożsamości w baza danych subskrypcja.Użytkownik musi własnej tabela albo element członkowski sysadmin stała rola serwera, db_owner stałej rola bazy danych lub db_ddladmin ustaloną rola bazy danych.
Uwagi dodatkowe partycje sasiadująco w pojedynczej subskrypcji dla każdej partycji
Artykuły może istnieć tylko jeden publikacja; artykułów nie może być ponownie opublikowana.
Publikacja musi umożliwiać abonentów zainicjować proces migawka.Aby uzyskać więcej informacji, zobacz Migawki publikacji korespondencji seryjnej z filtrami sparametryzowana.
Uwagi dodatkowe sprzężenia filtrów
W filtr łączyć hierarchii, artykuł z nakładających się partycji nie może występować powyżej artykuł sasiadująco partycją.Innymi słowy artykuł nadrzędnego należy użyć sasiadująco partycje Jeżeli artykuł podrzędność.Informacje o filtrach łączyć, zobacz Dołącz filtry.
Filtr sprzężenie, w którym sasiadująco partycji jest elementem podrzędnym musi mieć łączyć unikatowy klucz właściwość zestaw 1.Aby uzyskać więcej informacji, zobacz Dołącz filtry.
Artykuł powinien mieć tylko jeden filtr sparametryzowanej lub filtr łączyć.Posiadające sparametryzowana filtru i jest nadrzędny w filtr łączyć jest dozwolona.Posiadające sparametryzowana filtru i są podrzędność w filtr łączyć jest niedozwolone.Mających więcej niż jedno filtr łączyć również jest niedozwolone.
Jeśli dwie tabele w Wydawca relacją filtr łączyć i tabela podrzędnej zawiera wiersze, których nie ma odpowiedniego wiersza w tabela nadrzędnej, Wstaw brakuje wiersza nadrzędnego nie będą skutkować powiązane wiersze pobierany do subskrybenta (wiersze pobierania z nakładającymi się partycje).Na przykład jeśli SalesOrderDetail tabela zawiera wiersze bez odpowiedniego wiersza w SalesOrderHeader tabela i wstawić brakujący wiersz w SalesOrderHeader, pobierany jest wiersz subskrybenta, ale odpowiadające im wiersze w SalesOrderDetail nie są.