Compartir a través de


Entregar una instantánea mediante FTP

Se aplica a: SQL Server

En este tema se describe cómo entregar una instantánea a través de FTP en SQL Server mediante SQL Server Management Studio o Transact-SQL.

De manera predeterminada, las instantáneas se almacenan en carpetas definidas como recursos compartidos UNC. La replicación también permite especificar un recurso compartido FTP (Protocolo de transferencia de archivos) en lugar de UNC. Para utilizar FTP, debe configurar un servidor FTP y, a continuación, configurar una publicación y una o varias suscripciones para que utilicen FTP. Para obtener información sobre cómo configurar un servidor FTP, vea la documentación de Internet Information Services (IIS). Si especifica información FTP para una publicación, las suscripciones a la misma utilizarán FTP de forma predeterminada. FTP solamente se utiliza con la sincronización web cuando el equipo en que se ejecuta IIS se encuentra separado del distribuidor mediante un firewall. En este caso, FTP se puede utilizar para transferir la instantánea del distribuidor y el equipo que está ejecutando IIS. (La instantánea siempre se transfiere al suscriptor utilizando HTTPS).

Importante

Se recomienda usar la autenticación de Microsoft Windows y un recurso compartido UNC en lugar de un recurso compartido FTP porque las contraseñas de FTP se tienen que almacenar, y la contraseña se envía desde el suscriptor (o el equipo donde se ejecuta IIS cuando se usa la sincronización web) al servidor FTP en texto simple. Además, debido a que una sola cuenta controla el acceso al recurso compartido de instantáneas, no es posible garantizar que un suscriptor de una publicación de combinación filtrada tenga acceso únicamente a los archivos de instantáneas de su partición de datos.

Limitaciones y restricciones

  • 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 una ruta de convención de nomenclatura universal (UNC), por ejemplo, \\ftpserver\home\snapshots. Para obtener más información, vea Proteger la carpeta de instantáneas.

Requisitos previos

  • Para transferir archivos de instantáneas con el Protocolo de transferencia de archivos (FTP), primero debe configurar un servidor de FTP. Para obtener más información, consulte la documentación de Microsoft Internet Information Services (IIS).

Seguridad

Para contribuir a mejorar la seguridad, se recomienda implementar una red privada virtual (VPN) al utilizar la entrega de instantáneas a través de FTP por Internet. Para más información, vea Publicar datos a través de Internet mediante VPN.

Por seguridad, se recomienda no permitir el inicio de sesión anónimo en el servidor de FTP. 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 una ruta de convención de nomenclatura universal (UNC), por ejemplo, \\ftpserver\home\snapshots. Para obtener más información, vea Proteger la carpeta de instantáneas.

Cuando sea posible, pida a los usuarios que proporcionen sus credenciales en tiempo de ejecución. Si almacena las credenciales en un archivo de script, debe proteger el archivo.

Uso de SQL Server Management Studio

Una vez configurado el servidor FTP, especifique el directorio y la información de seguridad para este servidor en el cuadro de diálogo Propiedades de la publicación: <Publicación>. Para obtener más información sobre el acceso a este cuadro de diálogo, vea View and Modify Publication Properties.

Para especificar la información de FTP

  1. En el cuadro de diálogo Propiedades de la publicación: <Publicación>, seleccione Permitir a los suscriptores descargar archivos de instantánea usando FTP (Protocolo de transferencia de archivos) en una de las páginas siguientes:

    • La página Instantánea de FTP, para las publicaciones transaccionales y de instantáneas, y las publicaciones de combinación para los publicadores que ejecuten versiones anteriores a Microsoft SQL Server 2005 (9.x).

    • La página Instantánea de FTP e Internet, para las publicaciones de combinación de los publicadores que ejecuten SQL Server 2005 (9.x) o posterior.

  2. Especifique valores para Nombre del servidor FTP, Número de puerto, Ruta de acceso de la carpeta raíz del servidor FTP, Inicio de sesióny Contraseña.

    Por ejemplo, si el directorio raíz del servidor FTP es \\ftpserver\home y desea almacenar las instantáneas en \\ftpserver\home\snapshots, especifique \snapshots\ftp para la propiedad Ruta de acceso de la carpeta raíz del servidor FTP (la replicación anexa "ftp" a la ruta de acceso de la carpeta de instantáneas al crear los archivos de instantáneas).

  3. Especifique que el Agente de instantáneas copie los archivos de instantáneas en el directorio especificado en el paso 2. Por ejemplo, para que el Agente de instantáneas escriba los archivos de instantáneas en \ftpserver\home\snapshots\ftp, debe especificar la ruta de acceso \\ftpserver\home\snapshots en uno de estos dos lugares:

    • La ubicación de instantáneas predeterminada en el distribuidor asociado con esta publicación.
    • Una carpeta de instantáneas alternativa para esta publicación. Se necesita una ubicación alternativa si la instantánea está comprimida.

Para más información sobre cómo modificar las propiedades de ubicación de la carpeta de instantáneas, vea Opciones de instantánea.

  1. Seleccione Aceptar.

Usar Transact-SQL

Se puede establecer la opción para que los archivos de instantáneas estén disponibles en un servidor FTP y se puede modificar esta configuración mediante programación empleando los procedimientos almacenados de replicación. El procedimiento usado depende del tipo de publicación. La entrega de instantáneas a través de FTP solamente se usa con suscripciones de extracción.

Para habilitar la entrega de instantáneas a través de FTP para una publicación transaccional o de instantáneas

  1. En la base de datos de publicación del Publicador, ejecute sp_addpublication. Especifique @publication, un valor de true para @enabled_for_internet y los valores adecuados para los parámetros siguientes:

    • @ftp_address: la dirección del servidor FTP usada para entregar la instantánea

    • (Opcional) @ftp_port: el puerto que usa el servidor FTP.

    • (Opcional) @ftp_subdirectory: el subdirectorio del directorio FTP predeterminado asignado a un inicio de sesión de FTP. Por ejemplo, si el directorio raíz del servidor FTP es \\ftpserver\home y quiere almacenar las instantáneas en \\ftpserver\home\snapshots, especifique \snapshots\ftp para @ftp_subdirectory (la replicación anexa "ftp" a la ruta de acceso de la carpeta de instantáneas al crear los archivos de instantáneas).

    • (Opcional) @ftp_login: una cuenta de inicio de sesión que se usa al conectar al servidor FTP.

    • (Opcional) @ftp_password: la contraseña para el inicio de sesión de FTP.

    Esto crea una publicación que usa FTP. Para obtener más información, vea Crear una suscripción.

Para habilitar la entrega de instantáneas a través de FTP para una publicación de combinación

  1. En la base de datos de publicación del publicador, ejecute sp_addmergepublication. Especifique @publication, un valor de true para @enabled_for_internet y los valores adecuados para los parámetros siguientes:

    • @ftp_address: la dirección del servidor FTP usada para entregar la instantánea

    • (Opcional) @ftp_port: el puerto que usa el servidor FTP.

    • (Opcional) @ftp_subdirectory: el subdirectorio del directorio FTP predeterminado asignado a un inicio de sesión de FTP. Por ejemplo, si el directorio raíz del servidor FTP es \\ftpserver\home y quiere almacenar las instantáneas en \\ftpserver\home\snapshots, especifique \snapshots\ftp para @ftp_subdirectory (la replicación anexa "ftp" a la ruta de acceso de la carpeta de instantáneas al crear los archivos de instantáneas).

    • (Opcional) @ftp_login: una cuenta de inicio de sesión que se usa al conectar al servidor FTP.

    • (Opcional) @ftp_password: la contraseña para el inicio de sesión de FTP.

    Esto crea una publicación que usa FTP. Para obtener más información, vea Crear una suscripción.

Para crear una suscripción de extracción a una publicación transaccional o de instantáneas que usa la entrega de instantáneas a través de FTP

  1. En el publicador de la base de datos de suscripciones, ejecute sp_addpullsubscription. Especifique @publisher y @publication.

    • En el suscriptor de la base de datos de suscripciones, ejecute sp_addpullsubscription_agent. Especifique @publisher, @publisher_db, @publication, las credenciales de Microsoft Windows con las que se ejecuta el Agente de distribución en el suscriptor para @job_login y @job_password y el valor true para @use_ftp.
  2. En la base de datos de publicación del publicador, ejecute sp_addsubscription para registrar la suscripción de extracción. Para obtener más información, consulte Create a Pull Subscription.

Para crear una suscripción de extracción a una publicación de combinación que use la entrega de instantáneas a través de FTP

  1. En la base de datos de suscripciones del suscriptor, ejecute sp_addmergepullsubscription. Especifique @publisher y @publication.

  2. En el suscriptor de la base de datos de suscripciones, ejecute sp_addmergepullsubscription_agent. Especifique @publisher, @publisher_db, @publication, las credenciales de Windows con las que se ejecuta el Agente de distribución en el suscriptor para @job_login y @job_password, y un valor de true para @use_ftp.

  3. En la base de datos de publicación del publicador, ejecute sp_addmergesubscription para registrar la suscripción de extracción. Para obtener más información, consulte Create a Pull Subscription.

Para cambiar una o más configuraciones de entrega de instantáneas a través de FTP para una publicación transaccional o de instantáneas

  1. En la base de datos de publicación del publicador, ejecute sp_changepublication. Especifique uno de los valores siguientes para @property y un nuevo valor de esta configuración para @value:

    • ftp_address : la dirección del servidor FTP que se usa para entregar la instantánea.

    • ftp_port: el puerto usado por el servidor FTP

    • ftp_subdirectory: el subdirectorio del directorio FTP predeterminado usado para la instantánea de FTP

    • ftp_login: un inicio de sesión para conectar al servidor de FTP

    • ftp_password: la contraseña del inicio de sesión de FTP

  2. (Opcional) Repita el paso 1 para cada configuración de FTP que se está cambiando.

  3. (Opcional) Para deshabilitar la entrega de instantáneas a través de FTP, ejecute sp_changepublication en el Publicador de la base de datos de publicación. Especifique un valor de enabled_for_internet para @property y un valor de false para @value.

Para cambiar la configuración de entrega de instantáneas a través de FTP para una publicación de combinación

  1. En la base de datos de publicación del publicador, ejecute sp_changemergepublication. Especifique uno de los valores siguientes para @property y un nuevo valor de esta configuración para @value:

    • ftp_address: la dirección del servidor FTP usada para entregar la instantánea

    • ftp_port: el puerto usado por el servidor FTP

    • ftp_subdirectory: el subdirectorio del directorio FTP predeterminado usado para la instantánea de FTP

    • ftp_login: un inicio de sesión para conectar al servidor de FTP

    • ftp_password: la contraseña del inicio de sesión de FTP

  2. (Opcional) Repita el paso 1 para cada configuración de FTP que se está cambiando.

  3. (Opcional) Para deshabilitar la entrega de instantáneas a través de FTP, ejecute sp_changemergepublication en el Publicador de la base de datos de publicación. Especifique un valor de enabled_for_internet para @property y un valor de false para @value.

Ejemplos (Transact-SQL)

El ejemplo siguiente crea una publicación de combinación que permite a los Suscriptores tener acceso a los datos de instantánea usando FTP. El suscriptor debe usar una conexión VPN segura al obtener acceso al recurso compartido de FTP. Las variables de scripting desqlcmd se usan para proporcionar valores de inicio de sesión y de contraseña. Para obtener más información, vea Usar sqlcmd con variables de script.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Declarations for adding a merge publication.
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @ftp_server AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
DECLARE @ftp_login AS sysname;
DECLARE @ftp_password AS sysname;
DECLARE @ftp_directory AS sysname;
DECLARE @snapshot_folder AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksSalesOfferMergeFtp'; 
SET @ftp_server = $(Server);
SET @login = $(Login);
SET @password = $(Password);
SET @ftp_login = $(FtpLogin);
SET @ftp_password = $(FtpPassword);
SET @ftp_directory = N'\snapshots\ftp';
-- The snapshot folder is the root FTP folder on the server 
-- with the \snapshot subdirectory.
SET @snapshot_folder = $(AlternateFolder);
SET @article = N'SpecialOffer'; 
SET @owner = N'Sales' 

-- Enable merge replication on the publication database.
USE master
EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname=N'merge publish',
    @value = N'true' ;

-- Create a new merge publication, enabling FTP snapshot delivery. 
-- Specify the publication compatibility level or it will default to 
-- SQL Server 2000.
USE [AdventureWorks]
EXEC sp_addmergepublication 
-- Specify the required parameters.
    @publication = @publication,
    @publication_compatibility_level = N'90RTM',
    @enabled_for_internet = N'true',
    @snapshot_in_defaultfolder = N'true',
    @alt_snapshot_folder = @snapshot_folder,
    @ftp_address = @ftp_server,
    @ftp_subdirectory = @ftp_directory,
    @ftp_login = @ftp_login,
    @ftp_password = @ftp_password;

-- Create the snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password;

-- Add an unfiltered article for the Customer table.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_object = @article, 
    @type = N'table', 
    @source_owner = @owner, 
    @destination_owner = @owner, 
    @column_tracking = N'true'; 

-- Start the snapshot job for the publication.
EXEC sp_startpublication_snapshot 
    @publication = @publication;
GO

El ejemplo siguiente crea una suscripción a una publicación de combinación, donde el Suscriptor obtiene la instantánea mediante FTP. El suscriptor debe usar una conexión VPN segura al obtener acceso al recurso compartido de FTP. Las variables de scripting desqlcmd se usan para proporcionar valores de inicio de sesión y de contraseña. Para obtener más información, vea Usar sqlcmd con variables de script.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksSalesOfferMergeFtp';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addmergesubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @subscriber_type = N'local', 
    @subscription_priority = 0, 
    @sync_type = N'Automatic';
GO
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute this batch at the Subscriber.
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksSalesOfferMergeFtp'; 
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

EXEC sp_addmergepullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @subscriber_type = N'Local', 
    @subscription_priority = 0, 
    @sync_type = N'Automatic';

exec sp_addmergepullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication, 
    @distributor = @publisher, 
    @distributor_security_mode = 1, 
    @use_ftp = N'true', 
    @job_login = @login, 
    @job_password = @password, 
    @publisher_security_mode = 1, 
    @use_web_sync = 0;
GO