Crear y aplicar la instantánea inicial
Se aplica a: SQL Server Azure SQL Managed Instance
Este tema describe cómo crear y aplicar la instantánea inicial en SQL Server mediante SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO). Las publicaciones de mezcla que usan filtros con parámetros necesitan una instantánea de dos partes. Para más información, consulte Crear una instantánea para una publicación de mezcla con filtros con parámetros.
El Agente de instantáneas genera instantáneas una vez creada la publicación. Se pueden generar de la siguiente manera:
- Inmediatamente. De manera predeterminada, se genera una instantánea para una publicación de combinación inmediatamente después de haberse creado la publicación en el Asistente para nueva publicación.
- A la hora programada. Especifique una programación en la página Agente de instantáneas del Asistente para nueva publicación o al utilizar procedimientos almacenados o Replication Management Objects (RMO).
- Manualmente. Ejecute el Agente de instantáneas desde el símbolo del sistema o desde SQL Server Management Studio. Para obtener más información, vea Conceptos de los ejecutables del Agente de replicación e Iniciar y detener un Agente de replicación (SQL Server Management Studio).
Para la replicación de mezcla se genera una instantánea cada vez que se ejecuta el Agente de instantáneas. Para la replicación transaccional, la generación de instantáneas depende de la configuración de la propiedad de publicación immediate_sync. Si la propiedad se define como TRUE (la opción predeterminada cuando se utiliza el Asistente para nueva publicación), se genera una instantánea cada vez que se ejecuta el Agente de instantáneas, y puede aplicarse a un suscriptor en cualquier momento. Si la propiedad se define como FALSE (la opción predeterminada cuando se utiliza sp_addpublication), la instantánea se genera solo si se ha agregado una nueva suscripción desde la última ejecución del Agente de instantáneas; los suscriptores deberán esperar a que el Agente de instantáneas finalice para poder sincronizarse.
De manera predeterminada, cuando se generan instantáneas, éstas se guardan en la carpeta predeterminada de instantáneas situada en el distribuidor. También puede guardar archivos de instantáneas en medios extraíbles, como discos extraíbles o CD-ROM, o en otras ubicaciones distintas de la carpeta de instantáneas predeterminada. Además, puede comprimir los archivos para que sean más fáciles de almacenar y transferir, así como ejecutar scripts antes o después de aplicar la instantánea al suscriptor. Para obtener más información acerca de estas opciones, consulte Snapshot Options.
Si la instantánea es para una publicación de combinación que utiliza filtros con parámetros, se crea mediante un proceso de dos partes. En primer lugar se crea una instantánea del esquema que contiene los scripts y el esquema de replicación de los objetos publicados, pero no los datos. A continuación, cada suscripción se inicializa con una instantánea que incluye los scripts y el esquema copiados de la instantánea de esquema y los datos que pertenecen a la partición de la suscripción. Para más información, consulte Instantáneas para publicaciones de combinación con filtros con parámetros.
Una vez creada la instantánea en el publicador y almacenada en una ubicación de instantáneas predeterminada o alternativa, la misma puede transferirse al suscriptor y aplicarse. El Agente de distribución (para replicación transaccional o de instantáneas) o el Agente de mezcla (para la replicación de mezcla) transfiere la instantánea y aplica el esquema y los archivos de datos a la base de datos de suscripciones del suscriptor durante la sincronización inicial. De manera predeterminada, la sincronización inicial se produce inmediatamente después de creada la suscripción si se utiliza el Asistente para nueva publicación. Este comportamiento se controla mediante la opción Inicializar cuando de la página Inicializar suscripciones del asistente. Cuando se generan instantáneas después de inicializada una suscripción, éstas no se aplican al suscriptor a menos que se marque una suscripción para reinicialización. Para obtener más información, vea Reinicializar suscripciones.
Una vez que el Agente de distribución o el Agente de mezcla aplican la instantánea inicial, el agente propaga las actualizaciones posteriores y otras modificaciones de datos. Cuando se distribuyen y se aplican instantáneas a los suscriptores, solo se ven afectados los suscriptores que estén esperando instantáneas iniciales o nuevas. Los demás suscriptores de esa publicación (aquellos que ya están recibiendo inserciones, actualizaciones, eliminaciones u otras modificaciones de los datos publicados) no se ven afectados.
Para ver o modificar la ubicación de la carpeta de instantáneas predeterminada, vea
SQL Server Management Studio: Modificación de las opciones de la instantánea
Programación de la replicación y programación con RMO: Configure Publishing and Distribution
Ubicación predeterminada de instantáneas
Especifique la ubicación predeterminada de instantáneas en la página Carpeta de instantáneas del Asistente para configurar la distribución. Para obtener más información sobre cómo usar este asistente, vea Configure Publishing and Distribution (Configurar la publicación y la distribución). Si crea una publicación en un servidor que no está configurado como un distribuidor, especifique una ubicación predeterminada de instantáneas en la página Carpeta de instantáneas del Asistente para nueva publicación. Para obtener más información sobre cómo usar este asistente, vea Crear una publicación.
Modifique la ubicación de instantáneas predeterminada en la página Publicadores del cuadro de diálogo Propiedades del distribuidor <distribuidor>. Para obtener más información, vea View and Modify Distributor and Publisher Properties (Ver y modificar las propiedades del distribuidor y del publicador). Establezca la carpeta de instantáneas para cada publicación en el cuadro de diálogo Propiedades de la publicación - <publicación>. Para más información, consulte View and Modify Publication Properties.
Modificación de la ubicación predeterminada de instantáneas
En la página Publicadores del cuadro de diálogo Propiedades del distribuidor - <distribuidor>, haga clic en el botón de propiedades (...) correspondiente al publicador para el que quiera cambiar la ubicación de instantáneas predeterminada.
En el cuadro de diálogo Propiedades del publicador - <publicador>, escriba un valor para la propiedad Carpeta de instantáneas predeterminada.
Nota:
El Agente de instantáneas debe tener permisos de escritura para el directorio especificado y el Agente de distribución o de mezcla debe tener permisos de lectura. Si usa suscripciones de extracción, debe especificar un directorio compartido como ruta de acceso, según la convención de nomenclatura universal (UNC), por ejemplo \\nombreDeEquipo\instantánea. Para obtener más información, vea Proteger la carpeta de instantáneas.
Seleccione Aceptar.
Create snapshot
De forma predeterminada, si se está ejecutando el Agente SQL Server, el Agente de instantáneas genera una instantánea inmediatamente después de que se cree una publicación con el Asistente para nueva publicación. A continuación, el Agente de distribución (para la replicación de instantáneas y transaccional) o el Agente de mezcla (para las suscripciones de mezcla) la aplican a todas las suscripciones. Las instantáneas también se pueden generar mediante SQL Server Management Studio y el Monitor de replicación. Para información sobre cómo iniciar el Monitor de replicación, vea Iniciar el Monitor de replicación.
Uso de SQL Server Management Studio
- Conéctese al publicador en Management Studio y, a continuación, expanda el nodo de servidor.
- Expanda la carpeta Replicación y, a continuación, expanda la carpeta Publicaciones locales .
- Haga clic con el botón secundario en la publicación para la que desee crear una instantánea y, a continuación, haga clic en Ver estado del agente de instantáneas.
- En el cuadro de diálogo Ver estado del Agente de instantáneas: <publicación>, haga clic en Iniciar.
Cuando el Agente de instantáneas termina de generar la instantánea, aparece un mensaje del tipo "[100%] Se ha generado una instantánea de 17 artículos".
En el Monitor de replicación
- En el Monitor de replicación, expanda un grupo de publicador en el panel izquierdo y, a continuación, expanda un publicador.
- Haga clic con el botón secundario en la publicación para la que desee crear una instantánea y, a continuación, haga clic en Generar instantánea.
- Para ver el estado del Agente de instantáneas, haga clic en la pestaña Agentes. Para obtener información más detallada, haga clic con el botón secundario en el Agente de instantáneas en la cuadrícula y, a continuación, haga clic en Ver detalles.
Usar Transact-SQL
Las instantáneas iniciales se pueden crear mediante programación o creando y ejecutando un trabajo del Agente de instantáneas o ejecutando el archivo ejecutable Agente de instantáneas desde un archivo por lotes. Una vez generada una instantánea inicial, se transfiere y se aplica en el suscriptor cuando se sincroniza la suscripción por primera vez. Si ejecuta el Agente de instantáneas desde un símbolo del sistema o un archivo por lotes, necesitará volver a ejecutar el agente cada vez que la instantánea existente deje de ser válida.
Importante
Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar las credenciales en un archivo de script, proteja el archivo para evitar el acceso no autorizado.
Cree una publicación de instantáneas, transaccional o de combinación. Para obtener más información, vea Crear una suscripción.
Ejecute sp_addpublication_snapshot (Transact-SQL). Especifique @publication y los siguientes parámetros:
@job_login, que especifica las credenciales de autenticación de Windows con las que se ejecuta el Agente de instantáneas en el distribuidor.
@job_password, que es la contraseña para las credenciales de Windows proporcionadas.
(Opcional) El valor 0 para @publisher_security_mode si el agente va a utilizar autenticación de SQL Server para conectarse al publicador. En este caso, debe especificar también la información de inicio de sesión de autenticación de SQL Server para @publisher_login y @publisher_password.
(Opcional) Un programa de sincronización para el trabajo del Agente de instantáneas. Para obtener más información, consulte Specify Synchronization Schedules.
Importante
Al configurar un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto sin formato. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).
Agregue artículos a la publicación. Para más información, consulte Define an Article.
En el publicador de la base de datos de publicación, ejecute sp_startpublication_snapshot (Transact-SQL) y especifique el valor de @publication del paso 1.
Aplicación de una instantánea
Uso de SQL Server Management Studio
Una vez generada la instantánea, se aplica mediante la sincronización de la suscripción con el Agente de distribución o el Agente de mezcla:
- Si el agente se ejecuta de forma continua (valor predeterminado para la replicación transaccional), la instantánea se aplica inmediatamente después de haberse generado.
- Si el agente se ejecuta según una programación, la instantánea se aplica la siguiente vez que está programada la ejecución del agente.
- Si el agente se ejecuta a petición, se aplica la siguiente vez que se ejecuta el agente.
Para obtener más información acerca de cómo sincronizar suscripciones, vea Synchronize a Push Subscription y Synchronize a Pull Subscription.
Uso de Transact-SQL
Cree una publicación de instantáneas, transaccional o de combinación. Para obtener más información, vea Crear una suscripción.
Agregue artículos a la publicación. Para más información, consulte Define an Article.
Desde el símbolo del sistema o en un archivo por lotes, inicie el Replication Snapshot Agent ejecutando snapshot.exey especifique los argumentos de la línea de comandos siguientes:
- -Publication
- -Publisher
- -Distributor
- -PublisherDB
- -ReplicationType
Si está usando la autenticación de SQL Server, también debe especificar los argumentos siguientes:
- -DistributorLogin
- -DistributorPassword
- -DistributorSecurityMode = 0
- -PublisherLogin
- -PublisherPassword
- -PublisherSecurityMode = 0
Ejemplos (Transact-SQL)
Este ejemplo muestra cómo crear una publicación transaccional y agregar un trabajo del Agente de instantáneas para la nueva publicación (utilizando variables de scripting de sqlcmd ). En el ejemplo también se inicia el trabajo.
-- 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
En este ejemplo se crea una publicación de combinación y se agrega un trabajo del Agente de instantáneas (utilizando variables de sqlcmd ) para la publicación. En este ejemplo también se inicia el trabajo.
-- 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
Los siguientes argumentos de la línea de comandos inician el Agente de instantáneas para que genere la instantánea para una publicación de combinación.
Nota:
Los saltos de línea se incluyeron para mejorar la legibilidad. En un archivo por lotes, los comandos se deben realizar en una única línea.
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
Usar Replication Management Objects (RMO)
El Agente de instantáneas genera instantáneas una vez creada la publicación. Puede generar estas instantáneas mediante programación utilizando Replication Management Objects (RMO) y el acceso de código administrado directo a las funcionalidades del agente de replicación. Los objetos que se usan dependen del tipo de replicación. El Agente de instantáneas se puede iniciar sincrónicamente con el objeto SnapshotGenerationAgent o de forma asincrónica con el trabajo de agente. Una vez generada la instantánea inicial, se transfiere y se aplica al suscriptor cuando se sincroniza la suscripción por primera vez. Deberá volver a ejecutar el agente cada vez que la instantánea existente no contenga datos válidos y actualizados. Para obtener más información, vea Mantener publicaciones.
Importante
Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios de cifrado (en inglés) proporcionados por Microsoft Windows .NET Framework.
Para generar la instantánea inicial de una publicación transaccional o de instantáneas iniciando el trabajo del Agente de instantáneas (asincrónico)
Cree una conexión al publicador mediante la clase ServerConnection .
Cree una instancia de la clase TransPublication. Establezca las propiedades Name y DatabaseName para la publicación y la propiedad ConnectionContext en la conexión creada en el paso 1.
Llame al método LoadProperties para cargar las propiedades restantes del objeto. Si este método devuelve false, significa que las propiedades de publicación del paso 2 se definieron incorrectamente, o bien que la publicación no existe.
Si el valor de SnapshotAgentExists es false, llame a CreateSnapshotAgent para crear el trabajo de Agente de instantáneas para esta publicación.
Llame al método StartSnapshotGenerationAgentJob para iniciar el trabajo del agente que genera la instantánea inicial de esta publicación.
(Opcional) Cuando el valor de SnapshotAvailable es true, la instantánea está disponible para los suscriptores.
Para generar la instantánea inicial de una publicación transaccional o de instantáneas ejecutando el trabajo del Agente de instantáneas (sincrónico)
Cree una instancia de la clase SnapshotGenerationAgent y establezca las propiedades necesarias siguientes:
Publisher - nombre del publicador
PublisherDatabase - nombre de la base de datos de publicación
Publication - nombre de la publicación
Distributor - nombre del distribuidor
PublisherSecurityMode - un valor de Integrated para usar la autenticación de Windows al conectarse al publicador o un valor de Standard y valores para PublisherLogin y PublisherPassword para usar la autenticación de SQL Server al conectarse al publicador. Se recomienda la autenticación de Windows.
DistributorSecurityMode - un valor de Integrated para usar la autenticación de Windows al conectarse al distribuidor o un valor de Standard y valores para DistributorLogin y DistributorPassword para usar la autenticación de SQL Server al conectarse al distribuidor. Se recomienda la autenticación de Windows.
Establezca un valor de Transactional o Snapshot para ReplicationType.
Llame al método GenerateSnapshot.
Para generar la instantánea inicial de una publicación de combinación iniciando el trabajo del Agente de instantáneas (asincrónico)
Cree una conexión al publicador mediante la clase ServerConnection .
Cree una instancia de la clase MergePublication. Establezca las propiedades Name y DatabaseName para la publicación y la propiedad ConnectionContext en la conexión creada en el paso 1.
Llame al método LoadProperties para cargar las propiedades restantes del objeto. Si este método devuelve false, significa que las propiedades de publicación del paso 2 se definieron incorrectamente, o bien que la publicación no existe.
Si el valor de SnapshotAgentExists es false, llame a CreateSnapshotAgent para crear el trabajo de Agente de instantáneas para esta publicación.
Llame al método StartSnapshotGenerationAgentJob para iniciar el trabajo del agente que genera la instantánea inicial de esta publicación.
(Opcional) Cuando el valor de SnapshotAvailable es true, la instantánea está disponible para los suscriptores.
Para generar la instantánea inicial de una publicación de combinación ejecutando el Agente de instantáneas (sincrónico)
Cree una instancia de la clase SnapshotGenerationAgent y establezca las propiedades necesarias siguientes:
Publisher - nombre del publicador
PublisherDatabase - nombre de la base de datos de publicación
Publication - nombre de la publicación
Distributor - nombre del distribuidor
PublisherSecurityMode - un valor de Integrated para usar la autenticación de Windows al conectarse al publicador o un valor de Standard y valores para PublisherLogin y PublisherPassword para usar la autenticación de SQL Server al conectarse al publicador. Se recomienda la autenticación de Windows.
DistributorSecurityMode - un valor de Integrated para usar la autenticación de Windows al conectarse al distribuidor o un valor de Standard y valores para DistributorLogin y DistributorPassword para usar la autenticación de SQL Server al conectarse al distribuidor. Se recomienda la autenticación de Windows.
Establezca un valor Merge para ReplicationType.
Llame al método GenerateSnapshot.
Ejemplos (RMO)
Este ejemplo ejecuta sincrónicamente el Agente de instantáneas para generar la instantánea inicial de una publicación transaccional.
// 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
Este ejemplo inicia asincrónicamente el Agente de instantáneas para generar la instantánea inicial de una publicación transaccional.
// 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
Bloqueo al aplicar la instantánea inicial
Si tiene varias publicaciones, que publican datos en una base de datos en los suscriptores, al aplicar las instantáneas iniciales, se da cuenta de que solo una publicación puede aplicar su instantánea a la vez.
Es posible que vea un recurso de espera similar al siguiente al revisar la actividad de SQL:
APP: 18:16384:[snapshot_delivery_in_progress_Tr]:(9bcdaf92)
APP: 5:16384:[snapshot_delivery_in_progress_Er]:(3c3b7db9)
La consulta del comportamiento de bloqueo puede mostrar recursos similares a los siguientes:
APP 16384:[appname]:(fbe42d68) XAPP 16384:[snapshot_del]:(9bcdaf92) X
Este comportamiento es por diseño. Se produce porque se usa un bloqueo de aplicación para evitar que varios agentes de replicación apliquen simultáneamente instantáneas de publicaciones diferentes a la misma base de datos del suscriptor. Dado que el bloqueo de aplicación contiene el nombre de la base de datos del suscriptor, las publicaciones que se publican en la misma base de datos de suscriptor se verán afectadas. El resultado es que solo se puede insertar una instantánea en la base de datos del suscriptor en un momento dado.
Los bloqueos exclusivos se usan en esta situación para ayudar a evitar la posibilidad de que los agentes de replicación se interbloqueen entre sí.
Para solucionar este problema, especifique una base de datos del suscriptor diferente para cada publicación.
Consulte también
Create a Publication (Creación de una publicación)
Create a Pull Subscription
Create a Push Subscription (Creación de una suscripción de inserción)
Especificar programaciones de sincronización
Inicializar una suscripción con una instantánea
Replication Management Objects Concepts
Procedimientos recomendados de seguridad de replicación
Conceptos de procedimientos almacenados del sistema de replicación
Usar sqlcmd con variables de script