Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Managed Instance
Ten artykuł opisuje, jak utworzyć i zastosować początkową migawkę w programie SQL Server przy użyciu SQL Server Management Studio, Transact-SQL lub obiektów Replication Management Objects (RMO). Publikacje scalane wykorzystujące filtry parametryczne wymagają dwuczęściowego migawki. Więcej informacji można znaleźć w artykule Utwórz migawkę dla publikacji Merge z filtrami parametryzowanymi.
Snapshot Agent generuje migawki po utworzeniu publikacji. Możesz generować migawki:
- Natychmiast. Domyślnie kreator nowych publikacji generuje migawkę dla publikacji połączonej zaraz po utworzeniu publikacji.
- O ustalonej porze. Określ harmonogram na stronie Snapshot Agent w Kreatorze Nowych Publikacji lub przy użyciu procedur przechowywanych lub Obiektów Zarządzania Replikacją (RMO).
- Ręcznie. Uruchom Snapshot Agent z wiersza poleceń lub z SQL Server Management Studio. Więcej informacji o uruchamianiu agentów można znaleźć w artykule Koncepcje wykonywalnych agentów replikacyjnych oraz Start and Stop a Replication Agent (SQL Server Management Studio).
W przypadku replikacji scalającej agent Snapshot Agent generuje migawkę za każdym razem, gdy jest uruchamiany. W przypadku replikacji transakcyjnej generowanie migawek zależy od ustawienia właściwości publikacji immediate_sync. Jeśli właściwość jest ustawiona na TRUE (domyślnie podczas korzystania z Kreatora Nowych Publikacji), Snapshot Agent generuje snapshot za każdym razem i może go zastosować do Subskrybenta w dowolnym momencie. Jeśli właściwość jest ustawiona na FALSE (domyślnie przy użyciu sp_addpublication), Agent migawki generuje migawkę tylko wtedy, gdy od ostatniego uruchomienia Agenta migawki dodano nową subskrypcję; subskrybenci muszą poczekać na zakończenie pracy Agenta migawki, zanim będą mogli przeprowadzić synchronizację.
Domyślnie Snapshot Agent zapisuje wygenerowane snapshoty w domyślnym folderze snapshotów znajdującym się na Dystrybutorze. Możesz także zapisywać pliki snapshotów na nośnikach wymiennych, takich jak wymienne dyski, CD-ROMy lub w miejscach innych niż domyślny folder snapshotów. Możesz także kompresować pliki, aby ułatwić ich przechowywanie i przesyłanie, oraz uruchamiać skrypty przed zastosowaniem migawki przez agenta Snapshot Agent u subskrybenta lub po jej zastosowaniu. Więcej informacji na temat tych opcji znajdziesz w Opcjach migawek.
Jeśli migawka dotyczy publikacji scalającej wykorzystującej filtry sparametryzowane, Agent migawki tworzy migawkę w procesie dwuetapowym. Po pierwsze, tworzy migawkę schematu, która zawiera skrypty replikacyjne i schemat opublikowanych obiektów, ale nie dane. Każda subskrypcja inicjuje się następnie za pomocą snapshotu, który zawiera skrypty i schemat skopiowane ze schematu oraz dane należące do partycji subskrypcji. Aby uzyskać więcej informacji, zobacz Migawki dla scalania publikacji z filtrami sparametryzowanymi.
Po utworzeniu snapshota przez Snapshot Agent w Publisher i zapisaniu go w domyślnym lub alternatywnym miejscu snapshota, możesz przenieść snapshot do Subskrybenta i go zastosować. Distribution Agent (dla replikacji migawkowej lub transakcyjnej) lub Merge Agent (dla replikacji scalającej) przesyła migawkę oraz stosuje schemat i pliki danych w bazie danych subskrybenta na Subskrybencie podczas synchronizacji początkowej. Domyślnie początkowa synchronizacja następuje zaraz po utworzeniu subskrypcji, jeśli korzystasz z Kreatora Nowej Subskrypcji. Opcja Określ moment inicjalizacji na stronie Inicjowanie subskrypcji w kreatorze steruje tym zachowaniem. Gdy Snapshot Agent generuje snapshoty po inicjalizacji subskrypcji, nie przypisuje ich do subskrybenta, chyba że oznaczysz subskrypcję do ponownej inicjalizacji. Aby uzyskać więcej informacji, zobacz Reinitialize Subscriptions (Ponowne inicjowanie subskrypcji).
Po zastosowaniu początkowego snapshota przez Distribution Agent lub Merge Agent, agent propaguje kolejne aktualizacje i inne modyfikacje danych. Gdy snapshoty są rozpowszechniane i stosowane do Subskrybentów, dotknięci są tylko ci Abonenci czekający na pierwsze lub nowe snapshoty. Inni subskrybenci tej publikacji (ci, którzy już otrzymują wstawki, aktualizacje, usuwania lub inne modyfikacje opublikowanych danych) nie są tym dotknięci.
Aby zobaczyć lub zmodyfikować domyślną lokalizację folderu snapshotów, zobacz
SQL Server Management Studio: Modyfikacja opcji migawki
Programowanie replikacyjne i programowanie RMO: Konfiguracja publikowania i dystrybucji
Domyślna lokalizacja migawki
Określ domyślną lokalizację migawki na stronie Folder migawek w Kreatorze konfigurowania dystrybucji. Więcej informacji o korzystaniu z tego kreatora można znaleźć w sekcji Konfiguruj publikację i dystrybucję. Jeśli tworzysz publikację na serwerze, który nie jest skonfigurowany jako Dystrybutor, określ domyślną lokalizację snapshotu na stronie folderu Snapshot w kreatorze nowych publikacji. Więcej informacji o korzystaniu z tego czarodzieja można znaleźć w sekcji Utwórz publikację.
Zmodyfikuj domyślną lokalizację snapshota na stronie Wydawcy w oknie dialogowym Właściwości dystrybutora - <Dystrybutor> . Więcej informacji można znaleźć w temacie Wyświetlanie i modyfikowanie właściwości dystrybutora i wydawcy. Ustaw folder snapshot dla każdej publikacji w oknie dialogowym Właściwości publikacji - <Publikacja> . Aby uzyskać więcej informacji, zobacz Wyświetlanie i modyfikowanie właściwości publikacji.
Zmodyfikuj domyślną lokalizację migawki
Na stronie Wydawcy w oknie dialogowym Właściwości dystrybutora - <Dystrybutor> wybierz przycisk właściwości (...) dla Publisher, dla którego chcesz zmienić domyślną lokalizację snapshota.
W oknie dialogowym Publisher Properties - <Publisher> wprowadź wartość właściwości Domyślnego folderu Snapshot.
Note
Snapshot Agent potrzebuje uprawnień do zapisu dla określonego katalogu, a Distribution Agent lub Merge Agent potrzebują uprawnień do odczytu. Jeśli korzystasz z subskrypcji pull, musisz określić katalog współdzielony jako ścieżkę uniwersalnej konwencji nazewnictwa (UNC), na przykład \\computername\snapshot. Aby uzyskać więcej informacji, zobacz Zabezpieczanie folderu migawki.
Kliknij przycisk OK.
Utwórz migawkę
Domyślnie, jeśli SQL Server Agent jest uruchomiony, Snapshot Agent generuje snapshot natychmiast po utworzeniu publikacji za pomocą Kreatora Nowej Publikacji. Domyślnie Distribution Agent (dla snapshot i Transactional Replication) lub Merge Agent (dla subskrypcji merge) następnie stosuje snapshot dla wszystkich subskrypcji. Możesz także wygenerować migawkę, korzystając z SQL Server Management Studio i Replication Monitor. Aby uzyskać informacje na temat uruchamiania monitora replikacji, zobacz Uruchamianie monitora replikacji.
Korzystanie z programu SQL Server Management Studio
- Połącz się z programem Publisher w programie Management Studio, a następnie rozwiń węzeł serwera.
- Rozwiń folder Replikacja , a następnie rozwiń folder Publikacje lokalne .
- Kliknij prawym przyciskiem myszy na publikację, dla której chcesz utworzyć snapshot, a następnie wybierz View Snapshot Agent Status.
- W oknie dialogowym View Snapshot Agent Status - <Publikacja> wybierz Start.
Gdy Snapshot Agent kończy generować migawkę, wyświetla komunikat, na przykład "[100%] Wygenerowano migawkę 17 artykułów."
W Monitorze replikacji
- W Monitorze replikacji rozwiń grupę wydawcy w okienku po lewej stronie, a następnie rozwiń wydawcę.
- Kliknij prawym przyciskiem myszy na publikację, dla której chcesz wygenerować migawkę, a następnie wybierz Wygeneruj migawkę.
- Aby zobaczyć status Snapshot Agent, wybierz zakładkę Agenci. Aby uzyskać bardziej szczegółowe informacje, kliknij prawym przyciskiem myszy Snapshot Agent w siatce, a następnie wybierz Zobacz szczegóły.
Korzystanie z Transact-SQL
Możesz tworzyć początkowe snapshoty programowo, tworząc i uruchamiając zadanie Snapshot Agent lub uruchamiając plik wykonywalny Snapshot Agent z pliku wsadowego. Po wygenerowaniu początkowej migawki jest ona przesyłana do Subskrybenta i tam stosowana przy pierwszej synchronizacji subskrypcji. Jeśli uruchamiasz Snapshot Agent z wiersza poleceń lub pliku wsadowego, musisz go ponownie uruchomić za każdym razem, gdy istniejący snapshot stanie się nieważny.
Ważna
Jeśli to możliwe, proś użytkowników o wprowadzenie poświadczeń uwierzytelniających podczas działania. Jeśli musisz przechowywać poświadczenia w pliku skryptu, należy zabezpieczyć plik, aby zapobiec nieautoryzowanemu dostępowi.
Utwórz publikację migawkową, publikację transakcyjną lub publikację scalającą. Aby uzyskać więcej informacji, zobacz Tworzenie publikacji.
Wykonaj sp_addpublication_snapshot (Transact-SQL). Określ @publication oraz następujące parametry:
@job_login, który określa poświadczenia uwierzytelniania systemu Windows, na których działa agent Snapshot na Dystrybutorze.
@job_password, czyli hasło do podanych danych Windows logowania.
(Opcjonalne) Wartość 0 dla @publisher_security_mode jeśli agent używa uwierzytelniania SQL Server podczas łączenia się z Publisher. W takim przypadku musisz również podać dane logowania SQL Server Authentication dla @publisher_login i @publisher_password.
(Opcjonalnie) Harmonogram synchronizacji pracy Snapshot Agent. Aby uzyskać więcej informacji, zobacz Określanie harmonogramów synchronizacji.
Ważna
Gdy konfigurujesz Publisher z Dystrybutorem zdalnym, wartości dla wszystkich parametrów, w tym job_login i job_password, są wysyłane do Dystrybutora jako tekst zwykły. Zaszyfruj połączenie między Publisher a jego zdalnym dystrybutorem przed uruchomieniem tej procedury przechowywanej. Aby uzyskać więcej informacji, zobacz Włączanie szyfrowanych połączeń z silnikiem bazy danych (SQL Server Configuration Manager).
Dodaj artykuły do publikacji. Aby uzyskać więcej informacji, zobacz Definiowanie artykułu.
Na serwerze Wydawcy, w bazie danych publikacji, wykonaj polecenie sp_startpublication_snapshot (Transact-SQL), określając wartość parametru @publication z kroku 1.
Zastosuj migawkę
Korzystanie z programu SQL Server Management Studio
Po wygenerowaniu snapshota zsynchronizuj subskrypcję z Distribution Agent lub Merge Agent, aby ją zastosować:
Jeśli agent działa nieprzerwanie (domyślnie dla replikacji transakcyjnej), automatycznie stosuje migawkę po jej wygenerowaniu.
Jeśli agent działa według harmonogramu, następnym razem stosuje migawkę.
Jeśli agent działa na żądanie, zastosuje migawkę przy następnym uruchomieniu.
Aby uzyskać więcej informacji na temat synchronizowania subskrypcji, zobacz Synchronizuj subskrypcję wypychaną i Synchronizuj subskrypcję pobierania.
Korzystanie z Transact-SQL
Utwórz publikację migawkową, publikację transakcyjną lub publikację scalającą. Aby uzyskać więcej informacji, zobacz Tworzenie publikacji.
Dodaj artykuły do publikacji. Aby uzyskać więcej informacji, zobacz Definiowanie artykułu.
Z wiersza polecenia lub w pliku wsadowym uruchom Agenta migawki replikacji, uruchamiając snapshot.exe i podając następujące argumenty wiersza poleceń:
- -Publikacja
- -Wydawca
- -Dystrybutor
- -PublisherDB
- -Typ replikacji
Jeśli używasz uwierzytelniania SQL Server, podaj także następujące argumenty:
- -DistributorLogin
- -HasłoDystrybutora
- = 0
- -PublisherLogin
- -PublisherPassword
- -PublisherSecurityMode = 0
Przykłady (Transact-SQL)
Ten przykład pokazuje, jak stworzyć publikację transakcyjną i dodać zadanie Snapshot Agent dla nowej publikacji (używając zmiennych skryptowych sqlcmd). Ten przykład również uruchamia zadanie.
-- To avoid storing the login and password in the script file, the values
-- are passed into SQLCMD as scripting variables. For information about
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);
USE [AdventureWorks]
-- Enable transactional and snapshot replication on the publication database.
EXEC sp_replicationdboption
@dbname = @publicationDB,
@optname = N'publish',
@value = N'true';
-- Execute sp_addlogreader_agent to create the agent job.
EXEC sp_addlogreader_agent
@job_login = @login,
@job_password = @password,
-- Explicitly specify the security mode used when connecting to the Publisher.
@publisher_security_mode = 1;
-- Create new transactional publication, using the defaults.
USE [AdventureWorks2022]
EXEC sp_addpublication
@publication = @publication,
@description = N'transactional publication';
-- Create a new snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO
Ten przykład tworzy publikację merge i dodaje zadanie Snapshot Agent (używając zmiennych sqlcmd) dla publikacji. Ten przykład również uruchamia zadanie.
-- To avoid storing the login and password in the script file, the value
-- is passed into SQLCMD as a scripting variable. For information about
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022';
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @login = $(Login);
SET @password = $(Password);
-- Enable merge replication on the publication database.
USE master
EXEC sp_replicationdboption
@dbname = @publicationDB,
@optname=N'merge publish',
@value = N'true';
-- Create new merge publication, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergepublication
@publication = @publication,
@description = N'Merge publication.';
-- Create a new snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO
Następujące argumenty wiersza poleceń uruchamiają Agenta migawki w celu wygenerowania migawki dla publikacji scalanej.
Note
Dodano podziały linii, aby poprawić czytelność. W pliku wsadowym musisz wydawać polecenia w jednej linii.
REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks2022
SET Publication=AdvWorksSalesOrdersMerge
REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\120\COM\SNAPSHOT.EXE" -Publication %Publication%
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB%
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1
Korzystanie z obiektów zarządzania replikacją (RMO)
Snapshot Agent generuje migawki po utworzeniu publikacji. Możesz programowo generować te migawki, korzystając z Obiektów Zarządzania Replikacją (RMO) oraz bezpośredniego dostępu do funkcjonalności agentów replikacji zarządzanego kodem. Obiekty, których używasz, zależą od rodzaju replikacji. Możesz uruchomić Snapshot Agent synchronicznie, używając obiektuSnapshotGenerationAgent, lub asynchronicznie, korzystając z zadania agenta. Po wygenerowaniu początkowego snapshota Snapshot Agent przekazuje go Subskrybentowi i stosuje przy pierwszej synchronizacji subskrypcji. Musisz ponownie uruchomić agenta, gdy istniejąca migawka nie zawiera już prawidłowych i aktualnych danych. Więcej informacji można znaleźć w Zarządzanie publikacjami.
Ważna
Jeśli to możliwe, proś użytkowników o wprowadzenie poświadczeń uwierzytelniających podczas działania. Jeśli musisz przechowywać dane uwierzytelniające, skorzystaj z usług kryptograficznych oferowanych przez Microsoft Windows .NET Framework.
Aby wygenerować początkowy snapshot dla snapshotu lub publikacji transakcyjnej, uruchamiając zadanie Snapshot Agent (asynchroniczne)
Utwórz połączenie z programem Publisher przy użyciu klasy ServerConnection.
Utwórz wystąpienie klasy TransPublication. Ustaw dla publikacji właściwości Name i DatabaseName, a właściwość ConnectionContext ustaw na połączenie utworzone w kroku 1.
Wywołaj metodę LoadProperties , aby załadować pozostałe właściwości obiektu. Jeśli ta metoda zwraca fałszywe, albo właściwości publikacji w kroku 2 są błędnie zdefiniowane, albo publikacja nie istnieje.
Jeśli wartość SnapshotAgentExists to false, wywołaj CreateSnapshotAgent, aby utworzyć zadanie agenta migawek dla tej publikacji.
Wywołaj metodę StartSnapshotGenerationAgentJob, aby uruchomić zadanie agenta, które generuje migawkę dla tej publikacji.
(Opcjonalnie) Gdy wartość jest SnapshotAvailableprawdziwa, migawka jest dostępna dla Subskrybentów.
Aby wygenerować początkową migawkę dla publikacji migawkowej lub transakcyjnej przez uruchomienie Agenta migawek (synchronicznie)
Utwórz instancję klasy SnapshotGenerationAgent, i ustaw następujące wymagane właściwości:
Publisher- nazwa Publisher
PublisherDatabase - Nazwa bazy danych publikacji
Publication - Nazwa publikacji
Distributor - nazwa dystrybutora
PublisherSecurityMode — wartość Integrated, aby używać uwierzytelniania systemu Windows podczas nawiązywania połączenia z Publisher, lub wartość Standard oraz wartości PublisherLogin i PublisherPassword, aby używać uwierzytelniania programu SQL Server podczas nawiązywania połączenia z Publisher. Zalecane jest uwierzytelnianie Windows.
DistributorSecurityMode — wartość Integrated, aby użyć uwierzytelniania Windows podczas łączenia z Dystrybutorem, lub wartość Standard oraz wartości dla DistributorLogin i DistributorPassword, aby użyć uwierzytelniania SQL Server podczas łączenia z Dystrybutorem. Zalecane jest uwierzytelnianie Windows.
Ustaw wartość Transactional lub Snapshot dla ReplicationType.
Wywołaj metodę GenerateSnapshot .
Aby wygenerować początkową migawkę dla publikacji scalającej, uruchom zadanie Agenta migawek (asynchronicznie)
Utwórz połączenie z programem Publisher przy użyciu klasy ServerConnection.
Utwórz wystąpienie klasy MergePublication. Ustaw dla publikacji właściwości Name i DatabaseName, a właściwość ConnectionContext ustaw na połączenie utworzone w kroku 1.
Wywołaj metodę LoadProperties , aby załadować pozostałe właściwości obiektu. Jeśli ta metoda zwraca fałszywe, albo właściwości publikacji w kroku 2 są błędnie zdefiniowane, albo publikacja nie istnieje.
Jeśli wartość SnapshotAgentExists to false, wywołaj CreateSnapshotAgent, aby utworzyć zadanie agenta migawek dla tej publikacji.
Wywołaj metodę StartSnapshotGenerationAgentJob, aby uruchomić zadanie agenta, które generuje migawkę dla tej publikacji.
(Opcjonalnie) Gdy wartość jest SnapshotAvailableprawdziwa, migawka jest dostępna dla Subskrybentów.
Aby wygenerować początkową migawkę dla publikacji scalającej przez uruchomienie agenta Snapshot (synchronicznie)
Utwórz instancję klasy SnapshotGenerationAgent, i ustaw następujące wymagane właściwości:
Publisher- nazwa Publisher
PublisherDatabase - Nazwa bazy danych publikacji
Publication - Nazwa publikacji
Distributor - nazwa dystrybutora
PublisherSecurityMode — wartość Integrated, aby używać uwierzytelniania systemu Windows podczas nawiązywania połączenia z Publisher, lub wartość Standard oraz wartości PublisherLogin i PublisherPassword, aby używać uwierzytelniania programu SQL Server podczas nawiązywania połączenia z Publisher. Zalecane jest uwierzytelnianie Windows.
DistributorSecurityMode — wartość Integrated, aby użyć uwierzytelniania Windows podczas łączenia z Dystrybutorem, lub wartość Standard oraz wartości dla DistributorLogin i DistributorPassword, aby użyć uwierzytelniania SQL Server podczas łączenia z Dystrybutorem. Zalecane jest uwierzytelnianie Windows.
Ustaw wartość Merge dla ReplicationType.
Wywołaj metodę GenerateSnapshot .
Przykłady (RMO)
Ten przykład synchronicznie uruchamia Snapshot Agent, aby wygenerować początkowy snapshot dla publikacji transakcyjnej.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
string publisherName = publisherInstance;
string distributorName = publisherInstance;
SnapshotGenerationAgent agent;
try
{
// Set the required properties for Snapshot Agent.
agent = new SnapshotGenerationAgent();
agent.Distributor = distributorName;
agent.DistributorSecurityMode = SecurityMode.Integrated;
agent.Publisher = publisherName;
agent.PublisherSecurityMode = SecurityMode.Integrated;
agent.Publication = publicationName;
agent.PublisherDatabase = publicationDbName;
agent.ReplicationType = ReplicationType.Transactional;
// Start the agent synchronously.
agent.GenerateSnapshot();
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"A snapshot could not be generated for the {0} publication."
, publicationName), ex);
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publisherName As String = publisherInstance
Dim distributorName As String = publisherInstance
Dim agent As SnapshotGenerationAgent
Try
' Set the required properties for Snapshot Agent.
agent = New SnapshotGenerationAgent()
agent.Distributor = distributorName
agent.DistributorSecurityMode = SecurityMode.Integrated
agent.Publisher = publisherName
agent.PublisherSecurityMode = SecurityMode.Integrated
agent.Publication = publicationName
agent.PublisherDatabase = publicationDbName
agent.ReplicationType = ReplicationType.Transactional
' Start the agent synchronously.
agent.GenerateSnapshot()
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"A snapshot could not be generated for the {0} publication." _
, publicationName), ex)
End Try
Ten przykład asynchronicznie uruchamia zadanie agenta, aby wygenerować początkową migawkę dla publikacji transakcyjnej.
// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
string publisherName = publisherInstance;
TransPublication publication;
// Create a connection to the Publisher using Windows Authentication.
ServerConnection conn;
conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for an existing publication.
publication = new TransPublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
if (publication.LoadProperties())
{
// Start the Snapshot Agent job for the publication.
publication.StartSnapshotGenerationAgentJob();
}
else
{
throw new ApplicationException(String.Format(
"The {0} publication does not exist.", publicationName));
}
}
catch (Exception ex)
{
// Implement custom application error handling here.
throw new ApplicationException(String.Format(
"A snapshot could not be generated for the {0} publication."
, publicationName), ex);
}
finally
{
conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publisherName As String = publisherInstance
Dim publication As TransPublication
' Create a connection to the Publisher using Windows Authentication.
Dim conn As ServerConnection
conn = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Set the required properties for an existing publication.
publication = New TransPublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
If publication.LoadProperties() Then
' Start the Snapshot Agent job for the publication.
publication.StartSnapshotGenerationAgentJob()
Else
Throw New ApplicationException(String.Format( _
"The {0} publication does not exist.", publicationName))
End If
Catch ex As Exception
' Implement custom application error handling here.
Throw New ApplicationException(String.Format( _
"A snapshot could not be generated for the {0} publication." _
, publicationName), ex)
Finally
conn.Disconnect()
End Try
Blokowanie przy nakładaniu początkowego snapshotu
Jeśli masz kilka publikacji, które publikują dane w jednej bazie danych u subskrybentów, zauważysz, że tylko jedna publikacja może jednocześnie stosować swój snapshot podczas stosowania początkowych snapshotów.
Możesz zobaczyć zasób oczekiwania podobny do następującego podczas przeglądania aktywności w SQL:
APLIKACJA: 18:16384:[snapshot_delivery_in_progress_Tr]:(9bcdaf92)
APLIKACJA: 5:16384:[snapshot_delivery_in_progress_Er]:(3c3b7db9)
Zapytania dotyczące zachowania blokującego mogą pokazać zasoby podobne do następujących:
APP 16384:[appname]:(fbe42d68) XAPP 16384:[snapshot_del]:(9bcdaf92) X
Jest to zamierzone działanie. Dzieje się tak, ponieważ blokada aplikacji jest używana, aby zapobiec jednoczesnemu stosowaniu migawek różnych publikacji przez wielu agentów replikacyjnych do tej samej bazy subskrybentów. Ponieważ blokada aplikacji zawiera nazwę bazy abonentów, wszelkie publikacje publikujące w tej samej bazie subskrybentów będą objęte wpływem. W efekcie do bazy abonentów można wstawić tylko jeden migawkowy obraz w danym momencie.
W takiej sytuacji stosuje się zamki wyłączne, aby zapobiec ryzyku zablokowania się agentów replikacyjnych.
Aby obejść ten problem, określ osobną bazę subskrybentów dla każdej publikacji.
Treści powiązane
- Tworzenie publikacji
- Załóż subskrypcję Pull
- Utwórz subskrypcję powiadomień push
- Określanie harmonogramów synchronizacji
- Zainicjalizuj subskrypcję za pomocą migawki dla nowej publikacji
- Pojęcia dotyczące obiektów zarządzania replikacją
- Najlepsze rozwiązania dotyczące zabezpieczeń replikacji
- Pojęcia dotyczące procedur składowanych w systemie replikacji
- Używanie narzędzia sqlcmd ze zmiennymi skryptowymi