views:

58

answers:

2

We want to distribute / synchronize data from our Datawarehouse (MS SQL Server) to external customers (also MS SQL Server). The connection has to be secure, because we are dealing with trusted data. Transmission of data from our system to external client system must be via the http/https

In addition it is possible that the clients still run their systems with an older database schema, so already existing tables and columns should be transmitted and non existing ones should be ignored.

Its most likely that we will have large database updates and the updates have to arrive in almost real-time.

And it is definitely necessary that the data is stored in a client side datawarehouse / SQL database.

The whole process should also include good monitoring possibilities in case something goes wrong.

We started to develop our own .NET solution but I thought it should be almost a common problem to exchange data between different systems.

Does anybody know about an existing solution which we can adapt to our scenario?

Any help is appreciated!

+1  A: 

Just use regular SQL connections over a secure VPN or an SSH tunnel. Should be very easy to setup for your networking guys.

For example, you can create a linked server. Then a SQL scheduled job could move the data:

truncate table targetserver.dbname.dbo.tablename

insert into targetserver.dbname.dbo.tablename
select a, b, c
from dbname.dbo.sourcetable

Since the linked server talks to your server over a VPN or SSH tunnel, all data is send encrypted over the internet.

Andomar
+1  A: 

The problem is so common that it has a dedicated component in SQL Server: Service Broker. Rather than start your own .Net thing and take care of the many problems (how are you gonna handle down time? Retries? duplicates? out of order delivery? authentication of non-domain joined computers? routing for machines that change names? service upgrades? transactional consistency, rollbacks? are you gonna use dtc?). You can look at the demo I gave to SQL connections to see how you can easily scale SSB to a throughput of well over 1000 msgs/sec (1k payload) on commodity hardware.

the only requirement is that all partitcipants must be at least SQL Server 2005 (no SSB in 2000).

Remus Rusanu
Service broker is asynchronous messenging, like MSMQ? Mirroring or log shipping over a VPN/SSH tunnel is a much simpler solution. You would not have to define messages for example.
Andomar
No, read the requirements of the post again: solution needs to allow for differences in schema and the customers must be able to access the data. Both mirroring and log shipping create identical copies of the databases, down to every bit so they won't allow for schema changes and they'll require *all* the clients to run at least (or even exactly) the same SQL version (down to SP and CU level) as the DW. Also mirroring supports only 1 (one) partner and the mirror is offline, unaccessible.
Remus Rusanu
You're right about the requirements, but suggesting a message based solution feels pretty wrong. A SQL job can copy the data over with 1/100th of the complexity of a message/workflow based solution. What kind of messages would you send? One message for each row of data that should be shared?
Andomar
Actually a message based solution is the *only* right solution. My past 10 years I spent basically 24x7 in this problem space. Sure, anyone can code up a in about a day, be it using a web service, linked servers, or some custom TCP. Add one year and factor in all the mysteriously lost updates due to lack of DTC, all the downtime due to service maintenance, all the performance issues after DTC was added, the unrelated domains authentication workarounds, and facing the impossibility to deploy any upgrade and you'll understand why I'm recommending to do it right from start.
Remus Rusanu
Read up http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000004532 and think why did they go with a messaging based solution.
Remus Rusanu