Sql server 2008 使用FTP的SQL Server复制

Sql server 2008 使用FTP的SQL Server复制,sql-server-2008,replication,publisher,subscriber,Sql Server 2008,Replication,Publisher,Subscriber,我有: SQL A-发布服务器(SQL 2008 R2开发) SQL B-订阅服务器(SQL 2008 R2标准) SQL A和SQL B位于不同的网络上,不允许直接连接 我在SQL A上启用FTP发布。 已在SQL B上创建订阅以从FTP获取文件 但由于某种原因,当我在SQL B上运行代理时,它给出了一个无法连接到SQL A的错误。嗯,是吗?当然,因为是FTP复制,所以没有连接 我做错了什么 -- THIS IS ON PUBLISHER: -- Enabling the replicatio

我有: SQL A-发布服务器(SQL 2008 R2开发) SQL B-订阅服务器(SQL 2008 R2标准)

SQL A和SQL B位于不同的网络上,不允许直接连接

我在SQL A上启用FTP发布。 已在SQL B上创建订阅以从FTP获取文件

但由于某种原因,当我在SQL B上运行代理时,它给出了一个无法连接到SQL A的错误。嗯,是吗?当然,因为是FTP复制,所以没有连接

我做错了什么

-- THIS IS ON PUBLISHER:
-- Enabling the replication database
use master
exec sp_replicationdboption @dbname = N'Publisher_DB', @optname = N'publish', @value = N'true'
GO

exec [Publisher_DB].sys.sp_addlogreader_agent @job_login = null, @job_password = null, @publisher_security_mode = 1
GO
exec [Publisher_DB].sys.sp_addqreader_agent @job_login = null, @job_password = null, @frompublisher = 1
GO
-- Adding the snapshot publication
use [Publisher_DB]
exec sp_addpublication @publication = N'Test_S', @description = N'Snapshot publication of database ''Publisher_DB'' from Publisher ''SQL-A''.', @sync_method = N'native', @retention = 0, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'true', @enabled_for_internet = N'true', @snapshot_in_defaultfolder = N'false', @alt_snapshot_folder = N'\\SQL-A\D$\SqlReplica', @compress_snapshot = N'true', @ftp_address = N'SQL-A', @ftp_port = 21, @ftp_subdirectory = N'\\SQL-A\D$\SqlReplica', @ftp_login = N'anonymous', @allow_subscription_copy = N'true', @add_to_active_directory = N'false', @repl_freq = N'snapshot', @status = N'active', @independent_agent = N'true', @immediate_sync = N'true', @allow_sync_tran = N'false', @autogen_sync_procs = N'false', @allow_queued_tran = N'false', @allow_dts = N'false', @replicate_ddl = 1
GO    

exec sp_addpublication_snapshot @publication = N'Test_S', @frequency_type = 1, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 1
exec sp_grant_publication_access @publication = N'Test_S', @login = N'sa'
GO
exec sp_grant_publication_access @publication = N'Test_S', @login = N'NT AUTHORITY\SYSTEM'
GO
exec sp_grant_publication_access @publication = N'Test_S', @login = N'NT AUTHORITY\NETWORK SERVICE'
GO
exec sp_grant_publication_access @publication = N'Test_S', @login = N'DOMAIN\Developers & Test Admins'
GO
exec sp_grant_publication_access @publication = N'Test_S', @login = N'distributor_admin'
GO

-- Adding the snapshot articles
use [Publisher_DB]
exec sp_addarticle @publication = N'Test_S', @article = N'test_table', @source_owner = N'dbo', @source_object = N'test_table', @type = N'logbased', @description = N'', @creation_script = N'', @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509D, @identityrangemanagementoption = N'none', @destination_table = N'test_table', @destination_owner = N'dbo', @status = 24, @vertical_partition = N'false', @ins_cmd = N'SQL', @del_cmd = N'SQL', @upd_cmd = N'SQL'
GO

-- Adding the snapshot subscriptions
use [Publisher_DB]
exec sp_addsubscription @publication = N'Test_S', @subscriber = N'SQL-B', @destination_db = N'Publisher_DB', @subscription_type = N'Pull', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0
GO

-----------------BEGIN: Script to be run at Publisher 'SQL-A'---------------
use [Publisher_DB]
exec sp_addsubscription @publication = N'Test_S', @subscriber = N'SQL-B', @destination_db = N'Publisher_DB', @sync_type = N'Automatic', @subscription_type = N'pull', @update_mode = N'read only'
GO
-----------------END: Script to be run at Publisher 'SQL-A'-----------------       

-----------------BEGIN: Script to be run at Subscriber 'SQL-A'--------------
use [Publisher_DB]
exec sp_addpullsubscription @publisher = N'SQL-A', @publication = N'Test_S', @publisher_db = N'Publisher_DB', @independent_agent = N'True', @subscription_type = N'pull', @description = N'', @update_mode = N'read only', @immediate_sync = 1

exec sp_addpullsubscription_agent @publisher = N'SQL-A', @publisher_db = N'Publisher_DB', @publication = N'Test_S', @distributor = N'SQL-B', @distributor_security_mode = 1, @distributor_login = N'', @distributor_password = null, @enabled_for_syncmgr = N'False', @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20120622, @active_end_date = 99991231, @alt_snapshot_folder = N'\\SQL-B\D$\SqlReplica\ftp', @working_directory = N'\\SQL-B\D$\SqlReplica\ftp', @use_ftp = N'False', @job_login = null, @job_password = null, @publication_type = 0
GO
-----------------END: Script to be run at Subscriber 'SQL-A'---------------
`加


sp\u addpullsubscription\u agent
命令并将
@use\u ftp
更改为
N'True'

您可以从服务器B连接到ftp服务器吗?可能存在防火墙/权限问题?不,没有权限问题。事实上,两个FTP都配置为本地。这些文件通过其他安全进程进行同步。问题是它甚至没有达到从FTP获取文件的程度。SQL B希望直接看到SQL A:(这让我很困惑。你是如何创建发布者和订阅者的?我已经用脚本更新了关于如何创建发布者和订阅者的问题。你需要在sp_addpullsubscription_代理命令中添加ftp_地址详细信息等-你使用了use_ftp=N'False'我试过了当然,我给了你一个scr的迭代ipt。但问题在第一行:exec sp_addpullsubscription_agent@publisher=N'SQL-A'我不知道该放在那里什么。如果我放'SQL-A',不管我是否使用FTP,它都想连接到它。你试过通过management studio UI连接到订阅吗?从SQLB没有路由设置,也无法访问SQLA,反之亦然,因此management studio不会从一台服务器连接到另一台服务器。但是,这两台服务器都已启动,可以从各自的网络连接到。如果我将SQL-A放入@ftp_地址,则订阅服务器(SQL-B)要使用SSMS连接到SQL-A。2012-07-16连接到订阅服务器“SQL-B”2012-07-16连接到分发服务器“SQL-B”2012-07-16代理消息代码14080。远程服务器“SQL-A”不存在,或未指定为有效发布服务器,或者您可能无权查看可用发布服务器。
@ftp_address = N'SQL-A', 
@ftp_port = 21, 
@ftp_subdirectory = N'\SQL-A\D$\SqlReplica', 
@ftp_login = N'anonymous'