Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Managed Instance
Cet article décrit comment créer et appliquer l’instantané initial dans SQL Server en utilisant SQL Server Management Studio, Transact-SQL ou Objectes de gestion de réplication (RMO). Les publications de fusion qui utilisent des filtres paramétrés nécessitent un instantané en deux parties. Pour plus d'informations, voir Créer un instantané d’une publication de fusion avec des filtres paramétrés.
L'Agent d'instantané génère des instantanés après qu'une publication a été créée. Vous pouvez générer des instantanés :
- Immédiatement. Par défaut, l'Assistant Nouvelle publication génère un instantané pour une publication de fusion immédiatement après la création de la publication.
- À une heure planifiée. Spécifiez une planification sur la page Agent d'instantané de l'Assistant Nouvelle publication, ou lors de l'utilisation de procédures stockées ou de Replication Management Objects.
- Manuellement. Exécutez l’Agent de capture instantanée depuis l’invite de commandes ou depuis SQL Server Management Studio. Pour plus d’informations sur l’exécution des agents, consultez Concepts des exécutables de l’agent de réplication et Démarrer et arrêter un Agent de réplication (SQL Server Management Studio).
Pour la réplication de fusion, l’Agent d'instantané génère un instantané chaque fois qu’il s’exécute. Pour la réplication transactionnelle, la génération d’instantanés dépend du réglage de la propriété de publication immediate_sync. Si la propriété est définie sur TRUE (valeur par défaut lors de l’utilisation de l’Assistant Nouvelle publication), l’Agent de capture instantanée génère un instantané chaque fois qu’il s’exécute, et il peut appliquer l’instantané à un Abonné à tout moment. Si la propriété est réglée sur FALSE (le défaut lors de l’utilisation de sp_addpublication), le Agent d'instantané ne génère un instantané que si un nouvel abonnement est ajouté depuis la dernière Agent d'instantané d’exécution ; Les abonnés doivent attendre que le Agent d'instantané se termine avant de pouvoir synchroniser.
Par défaut, l’Agent d'instantané sauvegarde les instantanés générés dans le dossier d’instantanés par défaut situé sur le Distributeur. Vous pouvez également enregistrer des fichiers snapshot sur des supports amovibles tels que des disques amovibles, des CD-ROM ou dans des endroits autres que le dossier d’instantanés par défaut. Vous pouvez aussi compresser les fichiers pour faciliter leur stockage et leur transfert, et exécuter des scripts avant ou après que l’Agent d'instantané applique l’instantané à l’abonné. Pour plus d'informations sur ces options, consultez Snapshot Options.
Si l’instantané concerne une publication de fusion utilisant des filtres paramétrés, l’Agent d'instantané crée l’instantané en utilisant un processus en deux parties. Premièrement, il crée un instantané de schéma qui contient les scripts de réplication et le schéma des objets publiés, mais pas les données. Ensuite, chaque abonnement est initialisé avec un instantané comprenant les scripts et le schéma copiés à partir de l'instantané de schéma et des données appartenant à la partition de l'abonnement. Pour plus d'informations, voir Snapshots for Merge Publications with Parameterized Filters.
Après que l’Agent d'instantané ait créé l’instantané dans le Publisher et l’ait stocké dans un emplacement par défaut ou alternatif, vous pouvez transférer l’instantané à l’abonné et l’appliquer. L'assistant de distribution (pour la réplication d'instantané ou transactionnelle) ou l'assistant de fusion (pour la réplication de fusion) transfère l'instantané et applique le schéma et les fichiers de données à la base de données de l'abonnement sur l'Abonné pendant la synchronisation initiale. Par défaut, la synchronisation initiale se produit immédiatement après la création d’un abonnement si vous utilisez l’Assistant Nouvel Abonnement. L’option Initialiser quand sur la page Initialiser les abonnements de l’assistant contrôle ce comportement. Lorsque l'Agent d'instantané génère des instantanés après l'initialisation d'un abonnement, il ne les applique pas à un abonné sauf si vous marquez un abonnement pour la réinitialisation. Pour plus d’informations, consultez Réinitialiser des abonnements.
Une fois que l'Agent de distribution ou l'Agent de fusion a appliqué la capture instantanée initiale, il répercute les mises à jour ultérieures et les autres modifications apportées aux données. Lorsque des instantanés sont distribués et appliqués aux abonnés, seuls les abonnés qui attendent des instantanés initiaux ou de nouveaux instantanés sont affectés. Les autres abonnés à cette publication (ceux qui reçoivent déjà des insertions, mises à jour, suppressions ou autres modifications des données publiées) ne sont pas affectés.
Pour afficher ou modifier l'emplacement par défaut du dossier d'instantanés, consultez
SQL Server Management Studio : Modifier les options de capture instantanée
Programmation de la réplication et programmation avec RMO : Configurer la publication et la distribution
Emplacement par défaut des instantanés
Spécifiez l'emplacement par défaut des instantanés dans la page Dossier d'instantanés de l'Assistant Configuration de la distribution. Pour plus d’informations sur l’utilisation de cet Assistant, consultez Configurer la publication et la distribution. Si vous créez une publication sur un serveur qui n'est pas configuré comme Distributeur, spécifiez un emplacement par défaut des captures instantanées sur la page Dossier d'instantanés de l'Assistant Nouvelle publication. Pour plus d’informations sur l’utilisation de cet Assistant, consultez Créer une publication.
Modifiez l’emplacement par défaut des instantanés dans la page Serveurs de publication de la boîte de dialogue Propriétés du serveur de distribution - <Serveur de distribution>. Pour plus d’informations, consultez Afficher et modifier les propriétés d’un serveur de distribution ou d’un serveur de publication. Définissez le dossier d’instantané de chaque publication dans la boîte de dialogue Propriétés de la publication - <Publication>. Pour plus d'informations, consultez Afficher et modifier les propriétés de publication.
Modifier l’emplacement par défaut des instantanés
Sur la page Éditeurs de la boîte de dialogue Propriétés du distributeur - <Distributeur>, sélectionnez le bouton propriétés (...) pour le Publisher pour lequel vous souhaitez changer l’emplacement par défaut de l’instantané.
Dans la boîte de dialogue Propriétés du serveur de publication - <Serveur de publication>, entrez une valeur pour la propriété Dossier des captures instantanées par défaut.
Remarque
Le Agent d'instantané nécessite des autorisations d’écriture pour le répertoire que vous spécifiez, et le Agent de distribution ou Agent de fusion a besoin des permissions de lecture. Si vous utilisez des abonnements pull, vous devez spécifier un répertoire partagé comme chemin de convention de nommage universelle (UNC), tel que \\nomordinateur\snapshot. Pour plus d’informations, consultez Sécuriser le dossier d’instantanés.
Cliquez sur OK.
Créer une capture instantanée
Par défaut, si SQL Server Agent est en cours, l’Agent d'instantané génère un instantané immédiatement après la création d’une publication en utilisant l’Assistant de publication Nouvelle. Par défaut, l'assistant de distribution (pour la réplication d'instantanés et transactionnelle) ou l'assistant de fusion (pour les abonnements de fusion) applique ensuite l'instantané pour tous les abonnements. Vous pouvez également générer un instantané en utilisant SQL Server Management Studio et Replication Monitor. Pour plus d’informations sur le démarrage du Moniteur de réplication, consultez Démarrer le Moniteur de réplication.
Utilisation de SQL Server Management Studio
- Connectez-vous au serveur de publication à l’aide de Management Studio, puis développez le nœud serveur.
- Développez le dossier Réplication , puis développez le dossier Publications locales .
- Faites un clic droit sur la publication pour laquelle vous souhaitez créer un instantané, puis sélectionnez Afficher le statut de l’Agent d'instantané.
- Dans la boîte de dialogue View Agent d'instantané Status - <Publication>, sélectionnez Démarrer.
Lorsque le Agent d'instantané termine de générer l’instantané, il affiche un message, tel que « [100%] Un instantané de 17 articles(s) a été généré. »
Dans le moniteur de réplication
- Dans le moniteur de réplication, développez un groupe de serveurs de publication dans le volet gauche, puis développez un serveur de publication.
- Faites un clic droit sur la publication pour laquelle vous souhaitez générer un instantané, puis sélectionnez Générer un instantané.
- Pour voir le statut de l’Agent d'instantané, sélectionnez l’onglet Agents. Pour des informations plus détaillées, faites un clic droit sur Agent d'instantané dans la grille, puis sélectionnez Voir les détails.
Utilisation de Transact-SQL
Vous pouvez créer des instantanés initiaux de façon programmatique en créant et en exécutant un job Agent d'instantané ou en exécutant le fichier exécutable Agent d'instantané à partir d’un fichier batch. Une fois qu'un instantané initial a été généré, il est transféré et appliqué sur l'Abonné lorsque l'abonnement est synchronisé pour la première fois. Si vous lancez l’Agent d'instantané depuis une invite de commande ou un fichier batch, vous devez relancer l’agent chaque fois que le snapshot existant devient invalide.
Important
Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution. Si vous devez stocker des informations d'identification dans un fichier de script, sécurisez le fichier pour empêcher tout accès non autorisé.
Créez une publication d'instantané, transactionnelle ou de fusion. Pour plus d’informations, voir Create a Publication.
Exécutez sp_addpublication_snapshot (Transact-SQL). Spécifiez @publication et les paramètres suivants :
Le @job_login, qui spécifie les informations d’identification de l’authentification Windows avec lesquelles l’Agent de capture instantanée s’exécute au niveau du Distributeur.
@job_password, qui correspond au mot de passe pour les informations d'identification Windows fournies.
(Optionnel) Une valeur de 0 pour @publisher_security_mode si l’agent utilise SQL Server Authentification lors de la connexion au Publisher. Dans ce cas, vous devez également spécifier les informations de connexion d'authentification SQL Server pour @publisher_login et @publisher_password.
(Facultatif) Une planification de synchronisation pour le travail de l'Agent d'instantané. Pour plus d’informations, consultez Spécifier des planifications de synchronisation.
Important
Lorsque vous configurez un Publisher avec un distributeur distant, les valeurs que vous fournissez pour tous les paramètres, y compris job_login et job_password, sont envoyées au distributeur sous forme de texte brut. Chiffrez la connexion entre le Publisher et son distributeur distant avant d’exécuter cette procédure stockée. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).
Ajoutez des articles à la publication. Pour plus d’informations, consultez définir un Article.
Sur le serveur de publication, dans la base de données de publication, exécutez sp_startpublication_snapshot (Transact-SQL) en spécifiant pour @publication la valeur indiquée à l’étape 1.
Appliquer un instantané
Utilisation de SQL Server Management Studio
Après la génération de l’instantané, synchronisez l’abonnement avec le Agent de distribution ou le Agent de fusion pour l’appliquer :
Si l’agent s’exécute en continu (par défaut pour la réplication transactionnelle), il applique automatiquement l’instantané après sa génération.
Si l’agent s’exécute selon une planification, il applique l’instantané lors de sa prochaine exécution.
Si l’agent s’exécute à la demande, il applique l’instantané la prochaine fois que vous l’exécutez.
Pour plus d'informations sur la synchronisation des abonnements, consultez Synchronize a Push Subscription et Synchronize a Pull Subscription.
Utiliser Transact-SQL
Créez une publication d'instantané, transactionnelle ou de fusion. Pour plus d’informations, voir Create a Publication.
Ajoutez des articles à la publication. Pour plus d’informations, consultez définir un Article.
À partir de l'invite de commandes ou d'un fichier de commandes, démarrez l' Replication Agent d'instantané en exécutant snapshot.exe, en spécifiant les arguments de ligne de commande suivants :
- -Publication
- -Publisher
- -Distributeur
- -PublisherDB
- -ReplicationType
Si vous utilisez l'authentification SQL Server, spécifiez également les arguments suivants :
- -DistributorLogin
- -DistributorPassword
- -ModeSécuritéDistributeur = 0
- -PublisherLogin
- -PublisherPassword
- = 0
Exemples (Transact-SQL)
Cet exemple montre comment créer une publication transactionnelle et ajouter une tâche de l’Agent d’instantané pour la nouvelle publication (à l’aide des variables de script sqlcmd). L'exemple démarre également le travail.
-- 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
Cet exemple crée une publication de fusion et ajoute un travail de l'Agent d'instantané (à l'aide des variables sqlcmd ) pour la publication. Cet exemple démarre également le travail.
-- 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
Les arguments de ligne de commande suivants permettent de démarrer l'Agent d'instantané pour générer l'instantané d'une publication de fusion.
Remarque
Des sauts de ligne ont été ajoutés pour améliorer la lisibilité. Dans un fichier batch, vous devez effectuer des commandes en une seule ligne.
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
Utilisation d'objets RMO (Replication Management Objects)
Le Agent d'instantané génère des instantanés après la création d’une publication. Vous pouvez générer ces instantanés de façon programmatique en utilisant les Objets de Gestion de Réplication (RMO) et un accès direct au code managé aux fonctionnalités des agents de réplication. Les objets à utiliser dépendent du type de réplication. Vous pouvez lancer l’Agent d'instantané de façon synchrone en utilisant l’objet SnapshotGenerationAgent ou asynchrone en utilisant le job de l’agent. Après la génération de l’instantané initial, l’Agent d'instantané le transfère à l’abonné et l’applique lors de la première synchronisation de l’abonnement. Vous devez relancer l’agent lorsque l’instantané existant ne contient plus de données valides et à jour. Pour plus d’informations, consultez Gestion des publications.
Important
Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution. Si vous devez stocker des informations d’identification, utilisez les Services de chiffrement fournis par Microsoft Windows .NET Framework.
Pour générer l'instantané initial pour une publication transactionnelle ou d'instantané en démarrant le travail de l'Agent d'instantané (asynchrone)
Créez une connexion au serveur de publication en utilisant la classe ServerConnection .
Créez une instance de la classe TransPublication. Définissez les propriétés Name et DatabaseName de la publication, et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.
Appelez la méthode LoadProperties pour charger les propriétés restantes de l'objet. Si cette méthode retourne un faux, soit les propriétés de publication à l’étape 2 sont mal définies, soit la publication n’existe pas.
Si SnapshotAgentExists a la valeur false, appelez CreateSnapshotAgent pour créer le travail de l'Agent d'instantané pour cette publication.
Appelez la méthode StartSnapshotGenerationAgentJob pour démarrer le travail de l'agent qui génère l'instantané pour cette publication.
(Facultatif) Lorsque SnapshotAvailable a la valeur true, l'instantané est à la disposition des Abonnés.
Pour générer l'instantané initial pour une publication transactionnelle ou d'instantané en exécutant l'Agent d'instantané (synchrone)
Créez une instance de la classe SnapshotGenerationAgent et définissez les propriétés requises suivantes :
Publisher – nom du serveur de publication
PublisherDatabase – nom de la base de données de publication
Publication – nom de la publication
Distributor – nom du serveur de distribution
PublisherSecurityMode – valeur Integrated pour utiliser l'authentification Windows lors de la connexion au serveur de publication ou valeur Standard et valeurs pour PublisherLogin et PublisherPassword pour utiliser l'authentification SQL Server lors de la connexion au serveur de publication. L'authentification Windows est recommandée.
DistributorSecurityMode – valeur Integrated pour utiliser l'authentification Windows lors de la connexion au serveur de distribution ou valeur Standard et valeurs pour DistributorLogin et DistributorPassword pour utiliser l'authentification SQL Server lors de la connexion au serveur de distribution. L'authentification Windows est recommandée.
Spécifiez la valeur Transactional ou Snapshot pour ReplicationType.
Appelez la méthode GenerateSnapshot .
Pour générer l'instantané initial pour une publication de fusion en démarrant le travail de l'Agent d'instantané (asynchrone)
Créez une connexion au serveur de publication en utilisant la classe ServerConnection .
Créez une instance de la classe MergePublication. Définissez les propriétés Name et DatabaseName de la publication, et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.
Appelez la méthode LoadProperties pour charger les propriétés restantes de l'objet. Si cette méthode retourne un faux, soit les propriétés de publication à l’étape 2 sont mal définies, soit la publication n’existe pas.
Si SnapshotAgentExists a la valeur false, appelez CreateSnapshotAgent pour créer le travail de l'Agent d'instantané pour cette publication.
Appelez la méthode StartSnapshotGenerationAgentJob pour démarrer le travail de l'agent qui génère l'instantané pour cette publication.
(Facultatif) Lorsque SnapshotAvailable a la valeur true, l'instantané est à la disposition des Abonnés.
Pour générer l'instantané initial d'une publication de fusion en exécutant l'Agent d'instantané (synchrone)
Créez une instance de la classe SnapshotGenerationAgent et définissez les propriétés requises suivantes :
Publisher – nom du serveur de publication
PublisherDatabase – nom de la base de données de publication
Publication – nom de la publication
Distributor – nom du serveur de distribution
PublisherSecurityMode – valeur Integrated pour utiliser l'authentification Windows lors de la connexion au serveur de publication ou valeur Standard et valeurs pour PublisherLogin et PublisherPassword pour utiliser l'authentification SQL Server lors de la connexion au serveur de publication. L'authentification Windows est recommandée.
DistributorSecurityMode – valeur Integrated pour utiliser l'authentification Windows lors de la connexion au serveur de distribution ou valeur Standard et valeurs pour DistributorLogin et DistributorPassword pour utiliser l'authentification SQL Server lors de la connexion au serveur de distribution. L'authentification Windows est recommandée.
Spécifiez la valeur Merge pour ReplicationType.
Appelez la méthode GenerateSnapshot .
Exemples (RMO)
Cet exemple exécute de façon synchrone l'Agent d'instantané pour générer l'instantané initial pour une publication transactionnelle.
// 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
Cet exemple démarre de façon asynchrone le travail de l'agent pour générer l'instantané initial pour une publication transactionnelle.
// 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
Blocage lors de l’application d’une capture instantanée initiale
Si vous avez plusieurs publications qui publient des données dans une même base de données chez les abonnés, vous constatez qu’une seule publication peut appliquer son instantané à la fois lors de l’application des instantanés initiaux.
Vous pourriez voir une ressource d’attente similaire à la suivante lors de la relecture de l’activité SQL :
APP: 18:16384:[snapshot_delivery_in_progress_Tr]:(9bcdaf92)
APP: 5:16384:[snapshot_delivery_in_progress_Er]:(3c3b7db9)
La recherche de comportement de verrouillage peut montrer des ressources similaires aux suivantes :
APP 16384 :[nom d’application]:(fbe42d68) XAPP 16384 :[snapshot_del]:(9bcdaf92) X
Ce comportement est intentionnel. Cela se produit parce qu’un verrou sur l’application est utilisé pour empêcher plusieurs agents de réplication d’appliquer simultanément des captures instantanées de différentes publications à la même base de données de l'abonné. Parce que le verrou d’application contient le nom de la base de données des abonnés, toute publication publiée dans la même base de données sera affectée. Le résultat est qu’un seul instantané peut être inséré dans la base de données de l’abonné à un moment donné.
Des verrous exclusifs sont utilisés dans cette situation pour éviter la possibilité que les agents de réplication deviennent bloqués les uns avec les autres.
Pour contourner ce problème, spécifiez une base de données de l'abonné différente pour chaque publication.
Contenu connexe
- Créer une publication
- Créer un abonnement par extraction de données
- Créer un abonnement push
- Spécifier des planifications de synchronisation
- Configurer un abonnement à l’aide d’un instantané pour une nouvelle publication
- Concepts liés à RMO (Replication Management Objects)
- Bonnes pratiques en matière de sécurité de la réplication
- Concepts liés aux procédures stockées système de réplication
- Utiliser sqlcmd avec des variables de script