Entregar um instantâneo pelo FTP

Aplica-se a: SQL Server

Este tópico descreve como entregar um instantâneo por meio de FTP no SQL Server usando o SQL Server Management Studio ou o Transact-SQL.

Por padrão, os instantâneos são armazenados em pastas definidas como compartilhamentos de Convenção Universal de Nomenclatura (UNC). A replicação também permite que especifique um compartilhamento de Protocolo de Transferência de Arquivo (FTP) ao invés de um compartilhamento de UNC. Para usar o FTP, é necessário configurar um servidor de FTP e em seguida configurar uma publicação ou uma ou mais assinaturas para usarem o FTP. Para obter mais informações sobre como configurar um servidor de FTP, consulte a documentação dos Serviços de Informações da Internet (IIS). Se especificar informações de FTP para uma publicação, as assinaturas para aquela publicação usarão o FTP por padrão. O FTP é usado somente com a sincronização da Web quando o computador que está executando o IIS estiver separado de um Distribuidor por um firewall. Neste caso o FTP é usado para transferir um instantâneo do Distribuidor e do computador que está executando o IIS. (O instantâneo é sempre transferido ao Assinante usando o HTTPS.)

Importante

Recomendamos o uso da Autenticação do Microsoft Windows e um compartilhamento de UNC ao invés de um compartilhamento FTP, pois as senhas do FTP devem ser armazenadas e a senha é enviada do Assinante ou do computador que estiver executando o IIS quando estiver usando a sincronização da Web ao servidor de FTP em texto sem formatação. Além disso, como uma única conta controla o acesso ao compartilhamento dos instantâneos, não é possível garantir se um Assinante de uma publicação de mesclagem filtrada só tem acesso aos arquivos dos instantâneos de sua partição de dados.

Limitações e Restrições

  • O Snapshot Agent deve ter permissões de gravação para o diretório que você especificar, e o Distribution Agent ou Merge Agent devem ter permissões de leitura. Se forem usadas assinaturas pull, será necessário especificar um diretório compartilhado como um caminho UNC, como \\ftpserver\home\snapshots. Para obter mais informações, consulte Proteger a pasta de instantâneos.

Pré-requisitos

  • Para transferir arquivos de instantâneo que usam Protocolo de Transferência de Arquivo (FTP), deve-se, em primeiro lugar, configurar um servidor de FTP. Para obter mais informações, consulte a documentação dos Serviços de Informações da Internet da Microsoft (IIS).

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 Publicar dados pela Internet usando VPN.

Como uma prática recomendada de segurança, não permita logons anônimos ao servidor FTP. O Snapshot Agent deve ter permissões de gravação para o diretório que você especificar, e o Distribution Agent ou Merge Agent devem ter permissões de leitura. Se forem usadas assinaturas pull, será necessário especificar um diretório compartilhado como um caminho UNC, como \\ftpserver\home\snapshots. Para obter mais informações, consulte Proteger a pasta de instantâneos.

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

Como usar o SQL Server Management Studio.

Depois que o servidor FTP for configurado, especifique informações de diretório e de segurança para esse servidor na caixa de diálogo Propriedades da Publicação – <Publicação>. Para obter mais informações sobre como acessar essa caixa de diálogo, consulte View and Modify Publication Properties.

Para especificar informações de FTP

  1. Na caixa de diálogo Propriedades da Publicação – <Publicação>, selecione Permitir que os Assinantes baixem os arquivos de instantâneo usando FTP de uma das seguintes páginas:

    • A página Instantâneo de FTP para publicações de instantâneo e transacionais e publicações de mesclagem para Publicadores executando versões anteriores ao Microsoft SQL Server 2005 (9.x).

    • A página Instantâneo de FTP e Internet, para publicações de mesclagem de Publicadores executando o SQL Server 2005 (9.x) ou versões posteriores.

  2. Especifique valores para Nome do servidor FTP, Número da porta, Caminho da pasta raiz de FTP, Logone Senha.

    Por exemplo, se a raiz do servidor FTP for \\ftpserver\home e você quiser que os instantâneos sejam armazenados em \\ftpserver\home\snapshots, especifique \snapshots\ftp para a propriedade Caminho da pasta raiz de FTP (a replicação acrescentará 'ftp' ao caminho da pasta de instantâneo ao criar os arquivos de instantâneo).

  3. Especifique que o Agente de Instantâneo deve gravar os arquivos de instantâneo no diretório especificado na etapa 2. Por exemplo, para que o Snapshot Agent grave os arquivos de instantâneo em \\ftpserver\home\snapshots, é necessário especificar o caminho \\ftpserver\home\snapshots em um ou dois locais:

    • O local de instantâneo padrão para o Distribuidor associado a essa publicação.
    • Um local alternativo de pasta de instantâneo para essa publicação. Um local alternativo será requerido se o instantâneo for compactado.

Para obter mais informações sobre como modificar as propriedades de localização da pasta de instantâneo, confira Opções de instantâneo.

  1. Selecione OK.

Usando o Transact-SQL

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.

Par habilitar a 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_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ê desejar 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.

    Isso cria uma publicação que usa FTP. Para obter mais informações, consulte Criar uma assinatura.

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

  1. No Publicador do banco de dados de publicação, execute sp_addmergepublication. Especifique @publication, um valor de verdadeiro 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ê desejar 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.

    Isso cria uma publicação que usa FTP. Para obter mais informações, consulte Criar uma assinatura.

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 Microsoft Windows nas quais o Distribution Agent no Assinante executa do @job_login e @job_passworde 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 Create a Pull Subscription.

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 o 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 Agente de Distribuição no Assinante executa para @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 Create a Pull Subscription.

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 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 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.

  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 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.

  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.

Exemplos (Transact-SQL)

O exemplo seguinte cria uma publicação de mesclagem que permite aos Assinantes acessarem os dados de instantâneo que usam FTP. O Assinante deve usar uma conexão VPN segura ao acessar o compartilhamento de FTP. sqlcmd as variáveis de script são usadas para fornecer valores de logon e senha. Para obter mais informações, consulte Usar 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'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

O exemplo a seguir cria uma assinatura para uma publicação de mesclagem onde o Assinante obtém o instantâneo usando FTP. O Assinante deve usar uma conexão VPN segura ao acessar o compartilhamento de FTP. sqlcmd as variáveis de script são usadas para fornecer valores de logon e senha. Para obter mais informações, consulte Usar 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'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