Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Este tópico descreve como entregar um snapshot através de FTP no SQL Server utilizando o SQL Server Management Studio ou Transact-SQL.
Por defeito, os snapshots são armazenados em pastas definidas como partilhas da Convenção Universal de Nomes (UNC). A replicação também permite especificar uma partilha do Protocolo de Transferência de Ficheiros (FTP) em vez de uma partilha UNC. Para usar FTP, deve configurar um servidor FTP e depois configurar uma publicação e uma ou mais subscrições para usar FTP. Para informações sobre como configurar um servidor FTP, consulte a documentação do Serviços de Informação Internet (IIS). Se especificar informações de FTP para uma publicação, as subscrições dessa publicação utilizam FTP por predefinição. O FTP só é usado na sincronização Web quando o computador que está a executar o IIS está separado do Distribuidor por um firewall. Neste caso, o FTP pode ser usado para transferir o snapshot do Distribuidor e do computador que está a executar o IIS. (O instantâneo é sempre transferido para o Subscritor através de HTTPS.)
Importante
Recomendamos que utilize Microsoft Windows Autenticação e uma partilha UNC em vez de uma partilha FTP, porque as palavras-passe FTP têm de ser armazenadas, e a palavra-passe é enviada pelo Assinante ou pelo computador que está a executar o IIS quando este utiliza a sincronização Web com o servidor FTP em texto simples. Além disso, como uma única conta controla o acesso à partilha de instantâneos, não é possível garantir que um Subscritor de uma publicação de fusão filtrada tenha acesso apenas aos ficheiros de instantâneo da sua partição de dados.
Limitações e Restrições
- O Snapshot Agent deve ter permissões de escrita para o diretório que especifica, e o Distribution Agent ou Merge Agent deve ter permissões de leitura. Se forem usadas subscrições de pull, deve especificar um diretório partilhado como um caminho universal de convenção de nomes (UNC), como \\ftpserver\home\snapshots. Para obter mais informações, consulte Proteger a pasta de snapshots.
Prerequisites
- Para transferir ficheiros snapshot usando o File Transfer Protocol (FTP), deve primeiro configurar um servidor FTP. Para mais informações, consulte a documentação do Serviços de Informação Internet da Microsoft (IIS).
Segurança
Para ajudar a melhorar a segurança, recomendamos que implemente uma rede privada virtual (VPN) ao utilizar a entrega de snapshots FTP através da Internet. Para obter mais informações, consulte Publicar dados pela Internet usando VPN.
Como melhor prática de segurança, não permita logins anónimos no servidor FTP. O Snapshot Agent deve ter permissões de escrita para o diretório que especifica, e o Distribution Agent ou Merge Agent deve ter permissões de leitura. Se forem usadas subscrições de pull, deve especificar um diretório partilhado como um caminho universal de convenção de nomes (UNC), como \\ftpserver\home\snapshots. Para obter mais informações, consulte Proteger a pasta de snapshots.
Sempre que possível, peça aos utilizadores para introduzirem as suas credenciais em tempo de execução. Se guardar credenciais num ficheiro de script, deve proteger o ficheiro.
Usando o SQL Server Management Studio
Depois de configurar o servidor FTP, especifique informações sobre o diretório e a segurança deste servidor na caixa de diálogo Propriedades <de Publicação>. Para mais informações sobre como aceder a esta caixa de diálogo, consulte Visualizar e Modificar Propriedades de Publicação.
Para especificar informação FTP
Na caixa de diálogo Propriedades de Publicação - <Publicação> , selecione Permitir que Assinantes descarreguem ficheiros snapshot usando FTP a partir de uma das seguintes páginas:
A página FTP Snapshot, para publicações snapshot e transacionais, e publicações de fusão para editores com versões anteriores ao Microsoft SQL Server 2005 (9.x).
A página FTP Snapshot e Internet, para publicações de fusão de editores com SQL Server 2005 (9.x) ou posterior.
Especifique valores para nome do servidor FTP, número de porta, caminho da pasta raiz FTP, login e palavra-passe.
Por exemplo, se a raiz do servidor FTP for \\ftpserver\home e pretender que os instantâneos sejam armazenados em \\ftpserver\home\snapshots, especifique \snapshots\ftp para a propriedade Caminho a partir da pasta raiz de FTP (a replicação acrescenta 'ftp' ao caminho da pasta de instantâneos quando cria ficheiros de instantâneo).
Especifique que o Snapshot Agent deve gravar os ficheiros de snapshot no diretório especificado no passo 2. Por exemplo, para que o Snapshot Agent escreva os ficheiros snapshot em \\ftpserver\home\snapshots\ftp, deve especificar o caminho \\ftpserver\home\snapshots num de dois locais:
- A localização predefinida do instantâneo do Distribuidor associado a esta publicação.
- Uma localização alternativa para uma pasta de snapshots para esta publicação. É necessária uma localização alternativa se o instantâneo estiver comprimido.
Para mais informações sobre como modificar as propriedades da localização da pasta snapshot, consulte Opções de snapshot.
- Selecione OK.
Usando Transact-SQL
A opção de disponibilizar ficheiros snapshot num servidor FTP pode ser definida e estas definições FTP podem ser modificadas programaticamente usando procedimentos armazenados de replicação. O procedimento utilizado depende do tipo de publicação. A entrega de instantâneos por FTP é utilizada apenas com subscrições pull.
Para permitir a entrega por FTP de instantâneos para uma publicação de instantâneo ou transacional
No Publicador, na base de dados de publicação, execute sp_addpublication. Especifique
@publication, um valor de verdadeiro para@enabled_for_internet, e valores apropriados 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 predefinido atribuído a um início de sessão FTP. Por exemplo, se a raiz do servidor FTP for \\ftpserver\home e pretender que os instantâneos sejam armazenados em \\ftpserver\home\snapshots, especifique \snapshots\ftp para@ftp_subdirectory(a replicação acrescenta "ftp" ao caminho da pasta de instantâneos quando cria ficheiros de instantâneo).(Opcional)
@ftp_login- uma conta de login usada ao ligar-se ao servidor FTP.(Opcional)
@ftp_password- a palavra-passe do login FTP.
Isto cria uma publicação que utiliza FTP. Para mais informações, consulte Criar uma Publicação.
Para permitir a entrega de snapshots FTP para uma publicação de fusão
No Publisher na base de dados de publicações, execute sp_addmergepublication. Especifique
@publication, um valor de verdadeiro para@enabled_for_internete valores apropriados 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 predefinido atribuído a um início de sessão FTP. Por exemplo, se a raiz do servidor FTP for \\ftpserver\home e pretender que os instantâneos sejam armazenados em \\ftpserver\home\snapshots, especifique \snapshots\ftp para@ftp_subdirectory(a replicação acrescenta "ftp" ao caminho da pasta de instantâneos quando cria ficheiros de instantâneo).(Opcional)
@ftp_login- uma conta de login usada ao ligar-se ao servidor FTP.(Opcional)
@ftp_password- a palavra-passe do login FTP.
Isto cria uma publicação que utiliza FTP. Para mais informações, consulte Criar uma Publicação.
Para criar uma subscrição de solicitação para um instantâneo ou publicação transacional que utilize a entrega de instantâneos por FTP
No Subscritor, na base de dados de subscrições, execute sp_addpullsubscription. Especificar
@publishere@publication.- No subscritor, na base de dados de subscrição, execute sp_addpullsubscription_agent. Especifique
@publisher,@publisher_db,@publication, as credenciais do Microsoft Windows sob as quais o Agente de Distribuição é executado no Subscritor para@job_logine@job_password, e o valor true para@use_ftp.
- No subscritor, na base de dados de subscrição, execute sp_addpullsubscription_agent. Especifique
No Publisher da base de dados de publicações, execute sp_addsubscription para registar a subscrição pull. Para mais informações, consulte Criar uma Subscrição Pull.
Criar uma subscrição de solicitação para uma publicação de fusão que utilize a entrega de instantâneos por FTP
No Subscritor, na base de dados de subscrição, execute sp_addmergepullsubscription. Especificar
@publishere@publication.No subscritor, na base de dados de subscrição, execute sp_addmergepullsubscription_agent. Especifique
@job_login,@job_password,true, as credenciais do Windows sob as quais o Agente de Distribuição é executado no Assinante para@use_ftpe@publication, e um valor de@publisher_dbpara@publisher.No Publisher na base de dados de publicações, execute sp_addmergesubscription para registar a subscrição pull. Para mais informações, consulte Criar uma Subscrição Pull.
Para alterar uma ou mais definições de entrega por FTP de instantâneos para uma publicação de instantâneo ou transacional
No Publisher da base de dados de publicações, execute sp_changepublication. Especifique um dos seguintes valores para
@propertye um novo valor desta definiçã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 predefinido usado para o snapshot FTP.ftp_login- um login usado para se ligar ao servidor FTP.ftp_password- a palavra-passe do login FTP.
(Opcional) Repita o passo 1 para cada definição FTP alterada.
(Opcional) Para desativar a entrega de snapshots FTP, execute sp_changepublication no Publisher na base de dados de publicação. Especifique um valor de
enabled_for_internetpara@propertye um valor defalsepara@value.
Para alterar as definições de entrega de snapshots FTP para uma publicação de fusão
No Publicador, na base de dados de publicação, execute sp_changemergepublication. Especifique um dos seguintes valores para
@propertye um novo valor desta definiçã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 predefinido usado para o snapshot FTP.ftp_login- um login usado para se ligar ao servidor FTP.ftp_password- a palavra-passe do login FTP.
(Opcional) Repita o passo 1 para cada definição FTP alterada.
(Opcional) Para desativar a entrega de snapshots FTP, execute sp_changemergepublication no Publisher na base de dados de publicação. Especifique um valor de
enabled_for_internetpara@propertye um valor defalsepara@value.
Exemplos (Transact-SQL)
O exemplo seguinte cria uma publicação de fusão que permite aos Assinantes aceder aos dados instantâneos usando FTP. O assinante deve usar uma ligação VPN segura ao aceder à partilha FTP. As variáveis de scripting SQLCMD são usadas para fornecer valores de login e palavra-passe. Para mais informações, consulte Utilizar 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 seguinte cria uma subscrição a uma publicação de fusão, onde o Assinante obtém o instantâneo usando FTP. O assinante deve usar uma ligação VPN segura ao aceder à partilha FTP. As variáveis de scripting SQLCMD são usadas para fornecer valores de login e palavra-passe. Para mais informações, consulte Utilizar 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