使用FTP的SQL Server复制 [英] SQL Server replication using FTP

查看:101
本文介绍了使用FTP的SQL Server复制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有: SQL A-发布者(SQL 2008 R2 Dev) SQL B-订阅者(SQL 2008 R2标准)

I have: SQL A - publisher (SQL 2008 R2 Dev) SQL B - subscriber (SQL 2008 R2 Standard)

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

SQL A and SQL B are on different networks, not direct connection is allowed.

我在SQL A上启用FTP发布. 在SQL B上创建了预订,以从FTP获取文件.

I enable FTP publishing on SQL A. Created subscription on SQL B to get files from FTP.

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

But for some reason when I ran agent on SQL B it gives an error can't connect to SQL A. Uhmm, duh? Of course because it is FTP replication, there is no connection.

我做错了什么?

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

推荐答案

`添加

@ftp_address = N'SQL-A', 
@ftp_port = 21, 
@ftp_subdirectory = N'\SQL-A\D$\SqlReplica', 
@ftp_login = N'anonymous'

sp_addpullsubscription_agent命令,并将@use_ftp更改为N'True'

这篇关于使用FTP的SQL Server复制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆