That's a bit different story. I thought you want to synchronize data in real time. If you want to use dial-up connections, you can write separate program which does the synchronization upon request.
The easiest solution is to have a designated server that will hold "up to date" data and each of the clients would connect to it, send their update and get new version of the database. This way each of the clients will have to make only one connection to get the data.
If you add a version number to each part of the database that is incremented when data is modified[1], you could reduce the amount of data that client must download (by omiting the data that the client already has).
Another solution is that each of the clients can synchronize with any other client. In such case version numbers are required. When two clients synchronize with each other, they will have to exchange the newest parts of the database. This solution is more robust, but clients might need more time to get in sync (you can still make them connect to one designated client to get faster synchronization, but when it's down you can switch to another one).
If you use commercial database, probably it has some replication tool --- check whether it won't solve your problem, before you start designing your own system.
[1] You don't have to increase the version number each time client modifies the database, but you must do this at least with the first modification after the synchronization.