4

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

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

I enable FTP publishing on SQL A. Created subscription on SQL B to get files from 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.

What am I doing wrong?

-- 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'---------------
andrews
  • 2,173
  • 2
  • 16
  • 29
Ivan
  • 103
  • 1
  • 7
  • Can you connect to the FTP server from Server B - there could be a firewall / permissions problem? – podiluska Jun 26 '12 at 08:47
  • 1
    Nope, no permission problems. In fact both ftps are configured to be local. The files are synced via some other secure process. The problem is that it doesn't even get to the point of getting files from FTP. SQL B wants to see SQL A directly :( This what puzzles me. – Ivan Jun 27 '12 at 12:17
  • How did you create the publisher and subscriber? – podiluska Jun 27 '12 at 12:33
  • I have updated the question with the script on how both Publisher and Subscriber are created. – Ivan Jun 27 '12 at 12:52
  • You need to add ftp_address details, etc, to the sp_addpullsubscription_agent command - you've used use_ftp = N'False' – podiluska Jun 27 '12 at 13:02

1 Answers1

1

`Add

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

to the sp_addpullsubscription_agent command and change @use_ftp to N'True'

podiluska
  • 50,950
  • 7
  • 98
  • 104
  • i tried that of course, I gave you one of the iterations of the script. The problem is on the first line however: exec sp_addpullsubscription_agent @publisher = N'SQL-A' I don't know what to put in there. If I put 'SQL-A' it wants to connect to it regardless of whether I use FTP or not. – Ivan Jul 03 '12 at 13:12
  • Have you tried connecting to the subscription via the management studio UI? – podiluska Jul 03 '12 at 21:47
  • From SQLB there is no routing setup and no access to SQLA and vice versa , so management studio will not connect from one server to another. Both server are up however, and can be connected to from their respective networks. If I put SQL-A into @ftp_address, then subscriber (SQL-B) wants to connect to SQL-A using SSMS. 2012-07-16 Connecting to Subscriber 'SQL-B' 2012-07-16 Connecting to Distributor 'SQL-B' 2012-07-16 Agent message code 14080. The remote server "SQL-A" does not exist, or has not been designated as a valid Publisher, or you may not have permission to see available Publishers. – Ivan Jul 16 '12 at 15:41