Como entregar um instantâneo por FTP (Programação Transact-SQL de replicação)

A opção para tornar os arquivos de instantâneo disponíveis em um servidor FTP podem ser definidas, e essas configurações FTP podem ser modificadas programaticamente usando procedimentos de armazenamento. O procedimento usado depende do tipo de publicação. A entrega de instantâneo FTP é usada apenas com assinaturas pull.

Observação sobre segurançaObservação sobre segurança

Para ajudar a melhorar a segurança, recomendamos implementar uma rede privada virtual (VPN) ao usar a entrega de instantâneo FTP pela Internet. Para obter mais informações, consulte Publicando dados pela Internet usando VPN.

Par habilitar a entrega de instantâneo FTP para um instantâneo ou publicação transacional

  • No Publicador do banco de dados de publicação, execute sp_addpublication. Especifique @publication, um valor de true para @enabled_for_internet e valores adequados para os seguintes parâmetros:

    • @ ftp_address - o endereço do servidor FTP usado para entregar o instantâneo.

    • (Opcional) @ ftp_port - a porta usada pelo servidor FTP.

    • (Opcional) @ ftp_subdirectory - o subdiretório do diretório FTP padrão atribuído a um logon de FTP. Por exemplo, se a raiz do servidor FTP for \\ftpserver\home e você deseja que os instantâneos sejam armazenados em \\ftpserver\home\snapshots, especifique \snapshots\ftp para @ftp_subdirectory (a replicação acrescentará 'ftp' ao caminho da pasta de instantâneo ao criar os arquivos de instantâneo).

    • (Opcional) @ ftp_login - uma conta de logon usada para conectar-se ao servidor FTP.

    • (Opcional) @ ftp_password - a senha para o logon no FTP.

      Observação sobre segurançaObservação sobre segurança

      Como uma prática recomendada de segurança, não permita logons anônimos ao servidor FTP.

    ObservaçãoObservação

    O Snapshot Agent deve ter permissões de gração para o diretório especificado, e o Distribution Agent ou Merge Agent devem ter permissões de leitura. Se assinaturas pull forem usadas, você deverá especificar um diretório compartilhado como um caminho com convenção de nomenclatura universal (UNC) como \\ftpserver\home\snapshots. Para obter mais informações, consulte Protegendo uma pasta de instantâneo.

    Isso cria uma publicação que usa o FTP. Para obter mais informações, consulte Como criar uma publicação (Programação Transact-SQL de replicação).

Para habilitar a entrega de instantâneo FTP para uma publicação de mesclagem

  • No Publicador do banco de dados de publicação, execute sp_addmergepublication. Especifique @publication, um valor de true para @enabled_for_internet e valores adequados para os seguintes parâmetros:

    • @ ftp_address - o endereço do servidor FTP usado para entregar o instantâneo.

    • (Opcional) @ ftp_port - a porta usada pelo servidor FTP.

    • (Opcional) @ ftp_subdirectory - o subdiretório do diretório FTP padrão atribuído a um logon de FTP. Por exemplo, se a raiz do servidor FTP for \\ftpserver\home e você deseja que os instantâneos sejam armazenados em \\ftpserver\home\snapshots, especifique \snapshots\ftp para @ftp_subdirectory (a replicação acrescentará 'ftp' ao caminho da pasta de instantâneo ao criar os arquivos de instantâneo).

    • (Opcional) @ ftp_login - uma conta de logon usada para conectar-se ao servidor FTP.

    • (Opcional) @ ftp_password - a senha para o logon no FTP.

      Observação sobre segurançaObservação sobre segurança

      Como uma prática recomendada de segurança, não permita logons anônimos ao servidor FTP.

    ObservaçãoObservação

    O Snapshot Agent deve ter permissões de gravação para o diretório especificado, e o Distribution Agent ou Merge Agent devem ter permissões de leitura. Se assinaturas pull forem usadas, você deverá especificar um diretório compartilhado como um caminho com convenção de nomenclatura universal (UNC) como \\ftpserver\home\snapshots. Para obter mais informações, consulte Protegendo uma pasta de instantâneo.

    Isso cria uma publicação que usa FTP. Para obter mais informações, consulte Como criar uma publicação (Programação Transact-SQL de replicação).

Para criar uma assinatura pull para um instantâneo ou publicação transacional que use a entrega de instantâneo FTP

  1. No Assinante, no banco de dados de assinatura, execute sp_addpullsubscription. Especifique @publisher e @publication.

    • No Assinante, no banco de dados de assinatura, execute sp_addpullsubscription_agent. Especifique @publisher, @publisher_db, @publication, As credenciais do Windows Microsoft nas quais o Distribution Agent no Assinante executa do @job_login e @job_password e um valor de true para @use_ftp.
  2. No Publicador do banco de dados de publicação, execute sp_addsubscription para registrar a assinatura pull. Para obter mais informações, consulte Como criar uma assinatura push (Programação Transact-SQL de replicação).

Para criar uma assinatura pull para uma publicação de mesclagem use a entrega de instantâneo FTP

  1. No Assinante, no banco de dados de assinatura, execute sp_addmergepullsubscription. Especifique @publisher e @publication.

  2. No Assinante, no banco de dados de assinatura, execute sp_addmergepullsubscription_agent. Especifique @publisher, @publisher_db, @publication, As credenciais do Windows nas quais o Distribution Agent no Assinante executa do @job_login e @job_password, e um valor de true para @use_ftp.

  3. No Publicador do banco de dados de publicação, execute sp_addmergesubscription para registrar a assinatura pull. Para obter mais informações, consulte Como criar uma assinatura push (Programação Transact-SQL de replicação).

Para alterar uma ou outra configuração de entrega de instantâneo FTP para um instantâneo ou publicação transacional

  1. No Publicador do banco de dados de publicação, execute sp_changepublication. Especifique um dos valores seguintes para @ property e um valor novo desta configuração para @ value:

    • ftp_address - o endereço do servidor FTP usado para entregar o instantâneo.

    • ftp_port - a porta usada pelo servidor FTP.

    • ftp_subdirectory- o subdiretório do diretório de FTP padrão usado para o instantâneo de FTP.

    • ftp_login - um logon usado para conectar-se ao servidor FTP.

    • ftp_password - a senha para o logon no FTP.

    Observação sobre segurançaObservação sobre segurança

    Quando possível, solicite que os usuários insiram suas credenciais em tempo de execução. Se você armazenar credenciais em um arquivo de script, será necessário proteger o arquivo.

  2. (Opcional) Repita a etapa 1 para cada configuração FTP que é alterada.

  3. (Opcional) Para desabilitar a entrega do instantâneo de FTP , execute sp_changepublication no Publicador do banco de dados de publicação. Especifique um valor de enabled_for_internet para @property e um valor de false para @value.

Para alterar a entrega do instantâneo de FTP para uma publicação de mesclagem

  1. No Publicador do banco de dados de publicação, execute sp_changemergepublication. Especifique um dos valores seguintes para @ property e um valor novo dessa configuração para @ value:

    • ftp_address - o endereço do servidor FTP usado para entregar o instantâneo.

    • ftp_port - a porta usada pelo servidor FTP.

    • ftp_subdirectory - o subdiretório do diretório FTP usado para o instantâneo do FTP.

    • ftp_login - um logon usado para se conectar ao servidor FTP.

    • ftp_password - a senha para o logon no FTP.

    Observação sobre segurançaObservação sobre segurança

    Quando possível, solicite que os usuários insiram suas credenciais em tempo de execução. Se você armazenar credenciais em um arquivo de script, será necessário proteger o arquivo.

  2. (Opcional) Repita a etapa 1 para cada configuração FTP que é alterada.

  3. (Opcional) Para desabilitar a entrega do instantâneo de FTP , execute sp_changemergepublication no Publicador do banco de dados de publicação. Especifique um valor de enabled_for_internet para @property e um valor de false para @value.

Exemplo

O exemplo seguinte cria uma publicação de mesclagem que permite aos Assinantes acessarem os dados de instantâneo que usam FTP. Os Assinantes devem usar uma conexão VPN segura quando acessarem o compartilhamento FTP. As variáveis de script sqlcmd são usadas para fornecer valores de logon e senha. Para obter mais informações, consulte Usando sqlcmd com variáveis 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'AdventureWorks2008R2'; 
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 [AdventureWorks2008R2]
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

O exemplo a seguir cria uma assinatura para uma publicação de mesclagem onde o Assinante obtém o instantâneo usando FTP. Os Assinantes devem usar uma conexão VPN segura quando acessarem o compartilhamento FTP. As variáveis de script sqlcmd são usadas para fornecer valores de logon e senha. Para obter mais informações, consulte Usando sqlcmd com variáveis 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'AdventureWorks2008R2Replica';

-- 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'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksSalesOfferMergeFtp'; 
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2008R2Replica';

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