sp_addpublication (Transact-SQL)
S’applique à : SQL Server Azure SQL Managed Instance
Crée une publication d'instantané ou transactionnelle. Cette procédure stockée est exécutée sur le serveur de publication dans la base de données de publication.
Conventions de la syntaxe Transact-SQL
Syntaxe
sp_addpublication
[ @publication = ] N'publication'
[ , [ @taskid = ] taskid ]
[ , [ @restricted = ] N'restricted' ]
[ , [ @sync_method = ] N'sync_method' ]
[ , [ @repl_freq = ] N'repl_freq' ]
[ , [ @description = ] N'description' ]
[ , [ @status = ] N'status' ]
[ , [ @independent_agent = ] N'independent_agent' ]
[ , [ @immediate_sync = ] N'immediate_sync' ]
[ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
[ , [ @allow_push = ] N'allow_push' ]
[ , [ @allow_pull = ] N'allow_pull' ]
[ , [ @allow_anonymous = ] N'allow_anonymous' ]
[ , [ @allow_sync_tran = ] N'allow_sync_tran' ]
[ , [ @autogen_sync_procs = ] N'autogen_sync_procs' ]
[ , [ @retention = ] retention ]
[ , [ @allow_queued_tran = ] N'allow_queued_tran' ]
[ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
[ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
[ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
[ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
[ , [ @compress_snapshot = ] N'compress_snapshot' ]
[ , [ @ftp_address = ] N'ftp_address' ]
[ , [ @ftp_port = ] ftp_port ]
[ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
[ , [ @ftp_login = ] N'ftp_login' ]
[ , [ @ftp_password = ] N'ftp_password' ]
[ , [ @allow_dts = ] N'allow_dts' ]
[ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
[ , [ @conflict_policy = ] N'conflict_policy' ]
[ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
[ , [ @conflict_retention = ] conflict_retention ]
[ , [ @queue_type = ] N'queue_type' ]
[ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
[ , [ @logreader_job_name = ] N'logreader_job_name' ]
[ , [ @qreader_job_name = ] N'qreader_job_name' ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @allow_initialize_from_backup = ] N'allow_initialize_from_backup' ]
[ , [ @replicate_ddl = ] replicate_ddl ]
[ , [ @enabled_for_p2p = ] N'enabled_for_p2p' ]
[ , [ @publish_local_changes_only = ] N'publish_local_changes_only' ]
[ , [ @enabled_for_het_sub = ] N'enabled_for_het_sub' ]
[ , [ @p2p_conflictdetection = ] N'p2p_conflictdetection' ]
[ , [ @p2p_originator_id = ] p2p_originator_id ]
[ , [ @p2p_continue_onconflict = ] N'p2p_continue_onconflict' ]
[ , [ @allow_partition_switch = ] N'allow_partition_switch' ]
[ , [ @replicate_partition_switch = ] N'replicate_partition_switch' ]
[ , [ @allow_drop = ] N'allow_drop' ]
[ , [ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy' ]
[ ; ]
Arguments
[ @publication = ] N’publication'
Nom de la composition à créer. @publication est sysname, sans valeur par défaut. Le nom doit être unique au sein de la base de données.
[ @taskid = ] taskid
Prise en charge uniquement pour la compatibilité descendante ; utilisez sp_addpublication_snapshot (Transact-SQL).
[ @restricted = ] N’restricted'
Prise en charge uniquement pour la compatibilité descendante ; utiliser default_access
.
[ @sync_method = ] N’sync_method'
Mode de synchronisation. @sync_method est nvarchar(40) et peut être l’une des valeurs suivantes.
Valeur | Description |
---|---|
native 1 |
Produit une copie par bloc en mode natif de toutes les tables. |
character |
Produit une copie par bloc en mode caractère de toutes les tables. Remarque : Pour un serveur de publication Oracle, character est valide uniquement pour la réplication d’instantanés. |
concurrent 1 |
Produit la sortie du programme de copie en bloc en mode natif de toutes les tables, mais ne verrouille pas les tables pendant l’instantané. Pris en charge uniquement pour les publications transactionnelles. |
concurrent_c |
Produit la sortie du programme de copie en bloc en mode caractère de toutes les tables, mais ne verrouille pas les tables pendant l’instantané. Pris en charge uniquement pour les publications transactionnelles. |
database snapshot |
Produit une copie en bloc en mode natif de toutes les tables à partir d'un instantané de base de données. Les instantanés de base de données ne sont pas disponibles dans chaque édition de SQL Server. Pour obtenir la liste des fonctionnalités prises en charge par les éditions de SQL Server, consultez Éditions et fonctionnalités prises en charge de SQL Server 2022. |
database snapshot character |
Produit une copie en bloc en mode caractère de toutes les tables à partir d'un instantané de base de données. Les instantanés de base de données ne sont pas disponibles dans chaque édition de SQL Server. Pour obtenir la liste des fonctionnalités prises en charge par les éditions de SQL Server, consultez Éditions et fonctionnalités prises en charge de SQL Server 2022. |
NULL (valeur par défaut) |
native Valeur par défaut pour les serveurs de publication SQL Server. Pour les serveurs de publication non-SQL Server, la valeur par défaut character de @repl_freq est Snapshot et concurrent_c pour tous les autres cas. |
1 Non pris en charge pour les serveurs de publication Oracle.
[ @repl_freq = ] N’repl_freq'
Le type de fréquence de réplication, @repl_freq est nvarchar(10) et peut être l’une des valeurs suivantes.
Valeur | Description |
---|---|
continuous (valeur par défaut) |
L’agent de lecture du journal s’exécute en continu. Pour les serveurs de publication non-SQL Server, cela nécessite que @sync_method être défini sur concurrent_c . |
snapshot |
L’agent de lecture du journal s’exécute selon une planification. Pour les serveurs de publication non-SQL Server, cela nécessite que @sync_method être défini sur character . |
[ @description = ] N’description'
Description facultative de la publication. @description est nvarchar(255), avec la valeur par défaut NULL
.
[ @status = ] N’status'
Indique si les données de publication sont disponibles. @status est nvarchar(8) et peut être l’une des valeurs suivantes.
Valeur | Description |
---|---|
active |
Les données de publication sont disponibles immédiatement pour les Abonnés. |
inactive (valeur par défaut) |
Les données de publication ne sont pas disponibles pour les Abonnés lorsque la publication est créée pour la première fois (elles peuvent s’abonner, mais les abonnements ne sont pas traités). |
Non pris en charge pour les serveurs de publication Oracle.
[ @independent_agent = ] N’independent_agent'
Spécifie s’il existe une Agent de distribution autonome pour cette publication. @independent_agent est nvarchar(5), avec la valeur par défaut false
.
- S’il
true
existe un Agent de distribution autonome pour cette publication. - Si
false
, la publication utilise un Agent de distribution partagé, et chaque paire de base de données de base de données publisher/Abonné a un seul agent partagé.
[ @immediate_sync = ] N’immediate_sync'
Indique si les fichiers de synchronisation de la publication sont créés chaque fois que l'Agent d'instantané est exécuté. @immediate_sync est nvarchar(5), avec la valeur par défaut false
.
Si true
, les fichiers de synchronisation sont créés ou recréé chaque fois que l’Agent d’instantané s’exécute. Les Abonnés peuvent obtenir les fichiers de synchronisation immédiatement si l'Agent d'instantané a fini de s'exécuter avant la création de l'abonnement. Les nouveaux abonnements obtiennent les fichiers de synchronisation les plus récents, générés lors de la dernière exécution de l'Agent d'instantané. @independent_agent doit être true
pour que @immediate_sync soit true
. Si false
, les fichiers de synchronisation sont créés uniquement s’il existe de nouveaux abonnements. Vous devez appeler sp_addsubscription pour chaque abonnement lorsque vous ajoutez de façon incrémentielle un nouvel article à une publication existante. Les abonnés ne peuvent pas recevoir les fichiers de synchronisation après l’abonnement tant que les agents d’instantanés ne sont pas démarrés et terminés.
[ @enabled_for_internet = ] N’enabled_for_internet'
Indique si la publication est activée pour Internet et détermine si le protocole de transfert de fichiers (FTP) peut être utilisé pour le transfert des fichiers d'instantané à un abonné. @enabled_for_internet est nvarchar(5), avec la valeur par défaut false
. Si true
, les fichiers de synchronisation de la publication sont placés dans le C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp
répertoire. L’utilisateur doit créer le Ftp
répertoire.
[ @allow_push = ] N’allow_push'
Indique si des abonnements par envoi de données (push) peuvent être créés pour la publication concernée. @allow_push est nvarchar(5), avec une valeur par défaut true
, qui autorise les abonnements push sur la publication.
[ @allow_pull = ] N’allow_pull'
Indique si des abonnements par extraction de données (pull) peuvent être créés pour la publication concernée. @allow_pull est nvarchar(5), avec la valeur par défaut false
. Si false
, les abonnements par extraction ne sont pas autorisés sur la publication.
[ @allow_anonymous = ] N’allow_anonymous'
Indique si des abonnements anonymes peuvent être créés pour la publication concernée. @allow_anonymous est nvarchar(5), avec la valeur par défaut false
. Si true
, @immediate_sync doit également être défini sur true
. Si false
les abonnements anonymes ne sont pas autorisés sur la publication.
[ @allow_sync_tran = ] N’allow_sync_tran'
Indique si les abonnements de mise à jour immédiate sont autorisés sur la publication. @allow_sync_tran est nvarchar(5), avec la valeur par défaut false
. true
n’est pas pris en charge pour les serveurs de publication Oracle.
[ @autogen_sync_procs = ] N’autogen_sync_procs'
Indique si la procédure stockée de synchronisation pour la mise à jour des abonnements est générée par le serveur de publication. @autogen_sync_procs est nvarchar(5) et peut être l’une des valeurs suivantes.
Valeur | Description |
---|---|
true |
Défini automatiquement lorsque la mise à jour des abonnements est activée. |
false |
Définissez automatiquement lorsque la mise à jour des abonnements n’est pas activée ou pour les serveurs de publication Oracle. |
NULL (valeur par défaut) |
La valeur par défaut est true activée lors de la mise à jour des abonnements et false lors de la mise à jour des abonnements n’est pas activée. |
Remarque
La valeur fournie par l’utilisateur pour @autogen_sync_procsest substituée en fonction des valeurs spécifiées pour @allow_queued_tran et @allow_sync_tran.
[ @retention = ] rétention
Période de rétention en heures pour l’activité de l’abonnement. @retention est int, avec la valeur par défaut 336
. Si un abonnement n’est pas actif dans la période de rétention, il expire et est supprimé. La valeur peut être supérieure à la période de rétention maximale de la base de données de distribution utilisée par le serveur de publication. Si 0
les abonnements connus à la publication n’expireront jamais et seront supprimés par l’agent de nettoyage d’abonnement expiré.
[ @allow_queued_tran = ] N’allow_queued_tran'
Active ou désactive la file d'attente des modifications sur l'Abonné jusqu'à ce que celles-ci soient appliquées au niveau du serveur de publication. @allow_queued_tran est nvarchar(5), avec la valeur par défaut false
.
- Si
false
, les modifications apportées à l’Abonné ne sont pas mises en file d’attente. true
n’est pas pris en charge pour les serveurs de publication Oracle.
[ @snapshot_in_defaultfolder = ] N’snapshot_in_defaultfolder'
Indique si les fichiers d'instantané sont stockés dans le dossier par défaut. @snapshot_in_defaultfolder est nvarchar(5), avec la valeur par défaut true
.
- Si
true
, les fichiers d’instantané se trouvent dans le dossier par défaut. - Si
false
, les fichiers d’instantané ont été stockés dans l’autre emplacement spécifié par @alt_snapshot_folder.
Les emplacements de remplacement peuvent se trouver sur un autre serveur, un lecteur réseau ou un support amovible (tel qu'un CD-ROM ou des disques amovibles). Vous pouvez également enregistrer les fichiers d'instantané sur un site FTP, pour qu'ils soient récupérés ultérieurement par l'Abonné. Ce paramètre peut être vrai et avoir toujours un emplacement dans le paramètre @alt_snapshot_folder . Cette combinaison indique que les fichiers d'instantané sont stockés dans les emplacements par défaut et secondaires.
[ @alt_snapshot_folder = ] N’alt_snapshot_folder'
Indique l'emplacement du dossier de remplacement pour l'instantané. @alt_snapshot_folder est nvarchar(255), avec la valeur par défaut NULL
.
[ @pre_snapshot_script = ] N’pre_snapshot_script'
Spécifie un pointeur vers un emplacement de fichier .sql . @pre_snapshot_script est nvarchar(255), avec la valeur par défaut NULL
. L'Agent de distribution exécute le script de pré-instantané avant l'exécution des scripts d'objet répliqué, lors de l'application d'un instantané sur un Abonné. Le script est exécuté dans le contexte de sécurité utilisé par l'Agent de distribution lors de sa connexion à la base de données d'abonnement.
[ @post_snapshot_script = ] N’post_snapshot_script'
Spécifie un pointeur vers un .sql
emplacement de fichier. @post_snapshot_script est nvarchar(255), avec la valeur par défaut NULL
. L'Agent de distribution exécute le script de post-instantané après que tous les autres scripts et données d'objet répliqué ont été appliqués lors d'une synchronisation initiale. Le script est exécuté dans le contexte de sécurité utilisé par l'Agent de distribution lors de sa connexion à la base de données d'abonnement.
[ @compress_snapshot = ] N’compress_snapshot'
Spécifie que l’instantané écrit à l’emplacement @alt_snapshot_folder doit être compressé dans le format CAB Microsoft. @compress_snapshot est nvarchar(5), avec la valeur par défaut false
.
false
spécifie que l’instantané n’est pas compressé.true
spécifie que l’instantané est compressé.
Les fichiers d’instantanés dont la taille est supérieure à 2 gigaoctets (Go) ne peuvent pas être compressés. Les fichiers d'instantané compressés sont décompressés là où s'exécute l'Agent de distribution ; les abonnements par extraction de données (pull) sont en général utilisés avec des instantanés compressés et les fichiers sont décompressés sur l'Abonné. L’instantané dans le dossier par défaut ne peut pas être compressé.
[ @ftp_address = ] N’ftp_address'
Adresse réseau du service FTP du serveur de distribution. @ftp_address est sysname, avec la valeur par défaut NULL
. Indique l'emplacement à partir duquel l'Agent de distribution ou l'Agent de fusion d'un abonné peut extraire les fichiers d'instantané de la publication. Étant donné que cette propriété est stockée pour chaque publication, chaque publication peut avoir une @ftp_address différente. La publication doit prendre en charge la propagation des instantanés à l'aide du protocole FTP.
[ @ftp_port = ] ftp_port
Numéro de port du service FTP pour le serveur de distribution. @ftp_port est int, avec la valeur par défaut 21
. Spécifie l'emplacement à partir duquel l'Agent de distribution ou l'Agent de fusion d'un Abonné peut extraire les fichiers d'instantané de la publication. Étant donné que cette propriété est stockée pour chaque publication, chaque publication peut avoir sa propre @ftp_port.
[ @ftp_subdirectory = ] N’ftp_subdirectory'
Spécifie l’emplacement où les fichiers d’instantanés sont disponibles pour la Agent de distribution ou le Agent de fusion de l’abonné à récupérer si la publication prend en charge la propagation des instantanés à l’aide de FTP. @ftp_subdirectory est nvarchar(255), avec la valeur par défaut NULL
. Étant donné que cette propriété est stockée pour chaque publication, chaque publication peut avoir sa propre @ftp_subdirctory ou choisir d’avoir aucun sous-répertoire, indiqué avec une NULL
valeur.
[ @ftp_login = ] N’ftp_login'
Nom d'utilisateur, utilisé pour la connexion au service FTP. @ftp_login est sysname, avec la valeur par défaut anonymous
.
[ @ftp_password = ] N’ftp_password'
Mot de passe utilisateur utilisé pour se connecter au service FTP. @ftp_password est sysname, avec la valeur par défaut NULL
.
[ @allow_dts = ] N’allow_dts'
Indique que la publication autorise les transformations de données. Vous pouvez spécifier un package DTS lors de la création d'un abonnement. @allow_dts est nvarchar(5), avec une valeur par défaut false
, qui n’autorise pas les transformations DTS. Lorsque @allow_dts a la valeur true, @sync_method doit être défini sur l’une ou l’autre character
.concurrent_c
true
n’est pas pris en charge pour les serveurs de publication Oracle.
[ @allow_subscription_copy = ] N’allow_subscription_copy'
Active ou désactive la possibilité de copier les bases de données d'abonnement qui sont abonnées à la publication. @allow_subscription_copy est nvarchar(5), avec la valeur par défaut false
.
[ @conflict_policy = ] N’conflict_policy'
Spécifie la stratégie de résolution de conflits à suivre lorsque l'option d'abonné avec mise à jour en attente est utilisée. @conflict_policy est nvarchar(100) et peut être l’une des valeurs suivantes.
Valeur | Description |
---|---|
pub wins |
Le serveur de publication remporte le conflit. |
sub reinit |
Réinitialisez l'abonnement. |
sub wins |
L'Abonné remporte le conflit. |
NULL (valeur par défaut) |
Si NULL , et la publication est une publication d’instantané, la stratégie par défaut devient sub reinit . Si NULL et la publication n’est pas une publication d’instantané, la valeur par défaut devient pub wins . |
Non pris en charge pour les serveurs de publication Oracle.
[ @centralized_conflicts = ] N’centralized_conflicts'
Spécifie si les enregistrements en conflit sont stockés sur le serveur de publication. @centralized_conflicts est nvarchar(5), avec la valeur par défaut NULL
.
- Si
true
, les enregistrements en conflit sont stockés sur le serveur de publication. - Si
false
, les enregistrements en conflit sont stockés à la fois sur le serveur de publication et sur l’abonné qui a provoqué le conflit.
Non pris en charge pour les serveurs de publication Oracle.
[ @conflict_retention = ] conflict_retention
Spécifie la durée de rétention des conflits en jours. Il s'agit de la période pendant laquelle les métadonnées en conflit sont stockées pour la réplication transactionnelle d'égal à égal et les abonnements mis à jour en attente. @conflict_retention est int, avec la valeur par défaut 14
.
Non pris en charge pour les serveurs de publication Oracle.
[ @queue_type = ] N’queue_type'
Spécifie le type de file d'attente utilisé. @queue_type est nvarchar(10) et peut être l’une de ces valeurs.
Valeur | Description |
---|---|
sql |
Utilisez SQL Server pour stocker des transactions. |
NULL (valeur par défaut) |
sql Par défaut, qui spécifie d’utiliser SQL Server pour stocker des transactions. |
Remarque
La prise en charge de l’utilisation de Microsoft Message Queuing est interrompue. La spécification d’une valeur d’avertissement msmq
entraîne un avertissement et la réplication définit automatiquement la valeur sql
sur .
Non pris en charge pour les serveurs de publication Oracle.
[ @add_to_active_directory = ] N’add_to_active_directory'
Ce paramètre est déconseillé et n’est pris en charge que pour la compatibilité descendante des scripts. Vous ne pouvez plus ajouter d’informations de publication à Microsoft Active Directory.
[ @logreader_job_name = ] N’logreader_job_name'
Nom d’un travail d’agent existant. @logreader_job_name est sysname, avec la valeur par défaut NULL
. Ce paramètre n’est spécifié que lorsque l’Agent de lecture du journal utilise un travail existant au lieu d’un nouveau travail en cours de création.
[ @qreader_job_name = ] N’qreader_job_name'
Nom d’un travail d’agent existant. @qreader_job_name est sysname, avec la valeur par défaut NULL
. Ce paramètre est spécifié uniquement lorsque l’Agent de lecture de file d’attente utilise un travail existant au lieu d’un nouveau travail en cours de création.
[ @publisher = ] N’publisher'
Spécifie un serveur de publication non-SQL Server. @publisher est sysname, avec la valeur par défaut NULL
.
@publisher ne doit pas être utilisé lors de l’ajout d’une publication à un serveur de publication SQL Server.
[ @allow_initialize_from_backup = ] N’allow_initialize_from_backup'
Indique si les Abonnés peuvent initialiser un abonnement à cette publication à partir d'une sauvegarde plutôt qu'à partir de son instantané initial. @allow_initialize_from_backup est nvarchar(5) et peut être l’une des valeurs suivantes :
Valeur | Description |
---|---|
true |
Autorise l'initialisation à partir d'une sauvegarde. |
false |
Interdit l'initialisation à partir d'une sauvegarde. |
NULL (valeur par défaut) |
true Par défaut, pour une publication dans une topologie de réplication d’égal à égal et false pour toutes les autres publications. |
Pour plus d’informations, consultez Initialiser un abonnement transactionnel sans instantané.
Avertissement
Pour éviter les données d’abonné manquantes, lors de l’utilisation sp_addpublication
avec @allow_initialize_from_backup = N'true'
, utilisez @immediate_sync = N'true'
toujours .
[ @replicate_ddl = ] replicate_ddl
Précise si la réplication de schéma est prise en charge pour la publication. @replicate_ddl est int, avec une valeur par défaut 1
pour les serveurs de publication SQL Server et 0
pour les serveurs de publication non-SQL Server.
1
indique que les instructions DDL (Data Definition Language) exécutées sur le serveur de publication sont répliquées.0
indique que les instructions DDL ne sont pas répliquées.
La réplication de schéma n’est pas prise en charge pour les serveurs de publication Oracle.
Pour plus d’informations, consultez Modifier le schéma dans les bases de données de publication.
Le paramètre @replicate_ddl est respecté lorsqu’une instruction DDL ajoute une colonne. Le paramètre @replicate_ddl est ignoré lorsqu’une instruction DDL modifie ou supprime une colonne pour les raisons suivantes.
Lorsqu’une colonne est supprimée,
sysarticlecolumns
doit être mise à jour pour empêcher les nouvelles instructions DML d’inclure la colonne supprimée, ce qui entraînerait l’échec de l’agent de distribution. Le paramètre @replicate_ddl est ignoré, car la réplication doit toujours répliquer la modification du schéma.Lorsqu’une colonne est modifiée, le type de données source ou la possibilité de valeur Null peuvent avoir changé, ce qui entraîne la modification d’instructions DML contenant une valeur qui peut ne pas être compatible avec la table sur l’abonné. Ces instructions DML peuvent entraîner l'échec de l'agent de distribution. Le paramètre @replicate_ddl est ignoré, car la réplication doit toujours répliquer la modification du schéma.
Lorsqu’une instruction DDL ajoute une nouvelle colonne,
sysarticlecolumns
n’inclut pas la nouvelle colonne. Les instructions DML n’essaient pas de répliquer des données pour la nouvelle colonne. Le paramètre est respecté parce que la réplication ou la réplication DDL est acceptable.
[ @enabled_for_p2p = ] N’enabled_for_p2p'
Autorise l'utilisation de la publication dans une topologie de réplication d'égal à égal. @enabled_for_p2p est nvarchar(5), avec la valeur par défaut false
. true
indique que la publication prend en charge la réplication d’égal à égal. Lorsque vous définissez @enabled_for_p2p true
sur , les restrictions suivantes s’appliquent :
- @allow_anonymous doit être
false
. - @allow_dts doit être
false
. - @allow_initialize_from_backup doit être
true
. - @allow_queued_tran doit être
false
. - @allow_sync_tran doit être
false
. - @conflict_policy doit être
false
. - @independent_agent doit être
true
. - @repl_freq doit être
continuous
. - @replicate_ddl doit être
1
.
Pour plus d’informations, consultez Peer-to-Peer - Réplication transactionnelle.
[ @publish_local_changes_only = ] N’publish_local_changes_only'
Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.
[ @enabled_for_het_sub = ] N’enabled_for_het_sub'
Permet à la publication de prendre en charge les abonnés non-SQL Server. @enabled_for_het_sub est nvarchar(5), avec la valeur par défaut false
. Valeur de true
signifie que la publication prend en charge les abonnés non-SQL Server. Lorsque @enabled_for_het_sub est true
, les restrictions suivantes s’appliquent :
- @allow_initialize_from_backup doit être
false
. - @allow_push doit être
true
. - @allow_queued_tran doit être
false
. - @allow_subscription_copy doit être
false
. - @allow_sync_tran doit être
false
. - @autogen_sync_procs doit être
false
. - @conflict_policy doit être
NULL
. - @enabled_for_internet doit être
false
. - @enabled_for_p2p doit être
false
. - @ftp_address doit être
NULL
. - @ftp_subdirectory doit être
NULL
. - @ftp_password doit être
NULL
. - @pre_snapshot_script doit être
NULL
. - @post_snapshot_script doit être
NULL
. - @replicate_ddl doit être 0.
- @qreader_job_name doit être
NULL
. - @queue_type doit être
NULL
. - @sync_method ne peut pas être
native
ouconcurrent
.
Pour plus d’informations, consultez Non-SQL Server Subscribers.
[ @p2p_conflictdetection = ] N’p2p_conflictdetection'
Autorise l'Agent de distribution à détecter les conflits si la publication est activée pour la réplication d'égal à égal. @p2p_conflictdetection est nvarchar(5), avec la valeur par défaut false
. Pour plus d’informations, consultez Peer-to-Peer - Conflict Detection in Peer-to-Peer Replication.
[ @p2p_originator_id = ] p2p_originator_id
Spécifie un ID pour un nœud dans une topologie d'égal à égal. @p2p_originator_id est int, avec la valeur par défaut NULL
. Cet ID est utilisé pour la détection de conflit si @p2p_conflictdetection a la valeur TRUE. Spécifiez un ID positif et différent de zéro qui n’a pas été utilisé dans la topologie. Pour obtenir la liste des ID utilisés, exécutez sp_help_peerconflictdetection.
[ @p2p_continue_onconflict = ] N’p2p_continue_onconflict'
Détermine si l'Agent de distribution continue à traiter les modifications lorsqu'un conflit est détecté. @p2p_continue_onconflict est nvarchar(5), avec la valeur par défaut false
.
Attention
Nous vous recommandons d’utiliser la valeur par défaut de false
. Lorsque cette option est définie true
sur , l’Agent de distribution tente de converger les données dans la topologie en appliquant la ligne en conflit à partir du nœud qui est l’ID d’origine le plus élevé. Cette méthode ne garantit pas la convergence. Vous devez vous assurer que la topologie est cohérente après la détection d'un conflit. Pour plus d’informations, consultez « Gestion des conflits » dans Peer-to-Peer - Détection des conflits dans la réplication d’égal à égal.
[ @allow_partition_switch = ] N’allow_partition_switch'
Spécifie si ALTER TABLE...SWITCH
les instructions peuvent être exécutées sur la base de données publiée. @allow_partition_switch est nvarchar(5), avec la valeur par défaut false
. Pour plus d’informations, consultez Répliquer des tables et des index partitionnés.
[ @replicate_partition_switch = ] N’replicate_partition_switch'
Spécifie si ALTER TABLE...SWITCH
les instructions exécutées sur la base de données publiée doivent être répliquées sur les Abonnés. @replicate_partition_switch est nvarchar(5), avec la valeur par défaut NULL
. Cette option est valide uniquement si @allow_partition_switch a la valeur TRUE.
[ @allow_drop = ] N’allow_drop'
Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.
[ @p2p_conflictdetection_policy = ] N’p2p_conflictdetection_policy'
S’applique à : SQL Server 2019 (15.x) CU 13 et versions ultérieures.
@p2p_conflictdetection_policy est nvarchar(12) et peut être l’une des valeurs suivantes :
Valeur | Description |
---|---|
originatorid (valeur par défaut) |
L’agent de distribution détecte le conflit et décide du gagnant en fonction de l’ID d’origine, le cas échéant p2p_continue_onconflict = N'true' . Sinon, elle génère une erreur. |
lastwriter |
L’agent de distribution détecte le conflit et décide du gagnant en fonction de la date/heure du dernier enregistreur si p2p_continue_onconflict = N'true' . Sinon, elle génère une erreur. |
Remarque
Lorsque vous spécifiez originatorid
, la détection de conflit est identique à celle de SQL Server 2019 (15.x) CU 12 et versions antérieures. Lorsque vous spécifiez lastwriter
, SQL Server autorise les conflits à résoudre automatiquement en fonction de l’écriture la plus récente.
Valeurs des codes de retour
0
(réussite) ou 1
(échec).
Notes
sp_addpublication
est utilisé dans la réplication d’instantanés et la réplication transactionnelle.
Si plusieurs publications existent qui publient le même objet de base de données, seules les publications avec une valeur @replicate_ddl des 1
répliquéesALTER TABLE
, , ALTER VIEW
, ALTER PROCEDURE
ALTER FUNCTION
et ALTER TRIGGER
des instructions DDL. Toutefois, une ALTER TABLE DROP COLUMN
instruction DDL est répliquée par toutes les publications qui publient la colonne supprimée.
Une fois la réplication DDL activée (@replicate_ddl = 1
) pour une publication, afin d’apporter des modifications DDL non répliquées à la publication, sp_changepublication devez d’abord être exécutée pour définir @replicate_ddl sur .0
Une fois les instructions DDL non réexécuter, sp_changepublication pouvez être réexécuter pour réactiver la réplication DDL.
Exemples
-- 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'AdventureWorks';
SET @publication = N'AdvWorksProductTran';
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login);
-- This should be passed at runtime.
SET @password = $(Password);
-- Enable transactional or 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 use of Windows Integrated Authentication (default)
-- when connecting to the Publisher.
@publisher_security_mode = 1;
-- Create a new transactional publication with the required properties.
EXEC sp_addpublication
@publication = @publication,
@status = N'active',
@allow_push = N'true',
@allow_pull = N'true',
@independent_agent = N'true';
-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password,
-- Explicitly specify the use of Windows Integrated Authentication (default)
-- when connecting to the Publisher.
@publisher_security_mode = 1;
GO
autorisations
Seuls les membres du rôle serveur fixe sysadmin ou db_owner rôle de base de données fixe peuvent s’exécuter sp_addpublication
. Les connexions d'authentification Windows doivent disposer d'un compte d'utilisateur dans la base de données, représentant leur compte d'utilisateur Windows. Un compte d’utilisateur représentant un groupe Windows n’est pas suffisant.
Contenu connexe
- sp_addlogreader_agent (Transact-SQL)
- sp_addpublication_snapshot (Transact-SQL)
- sp_changepublication (Transact-SQL)
- sp_droppublication (Transact-SQL)
- sp_helppublication (Transact-SQL)
- sp_replicationdboption (Transact-SQL)
- Publier des données et des objets de base de données
- Procédures stockées de réplication (Transact-SQL)