The problem is, Microsoft has some confusing statements about replication that stumped me.
You might want to check the Jet Replication Wiki's article on things not to believe in the MS documentation (it's linked from the front page,
http://dfenton.com/DFA/Replication/).
Namely, to do replication on a laptop, the best choice is indirect replication. But I couldn't see how direct replication couldn't be used. So I need clarification.
Please provide a citation for that, i.e., where the docs suggest that indirect is the best choice. I expect there's context that makes it clear why they seem to be pushing that.
Indirect replication has the advantage of being safe in all these scenarios:
1. synch across a wired LAN
2. synch across a WiFi connection
3. synch across the Internet
...whereas direct synch is only safe in the first case.
Here is another gray area for me in terms of direct synchronization, local vs ? replicas. How is one local and what is the other form?
The only type of replicas you should consider are global full replicas and global partial replicas (and I'm no promoter of partial replicas -- I think it adds a level of difficulty that is not worth the benefit). Local and anonymous replicas should be completely avoided, as they are very easy to invalidate should their parent replicas be lost. Michael Kaplan explains it here:
http://trigeminal.com/usenet/usenet027.asp?1033
Local and anonymous replicas can be created only via code, so if you're not using code to create your replicas, don't worry about it. In other words, you won't get a local or anonymous replica by accident.
When you say partner replica, what do you mean by that, any replica in the set? I'm using the star topology with a HUB as the main replica, should I create the replica from the HUB or copy the replica created for the LAN users?
By partner replica, I mean the replica you tell your replica to synch with. The file you declare as the partner replica might be non-replicated, or not a member of the same replica set. If either of those is the case, you'll get an error. But if the partner replica is a member of the same replica set, the synch will take place (barring any unforeseen error conditions that might prevent a synch). The only exceptions to the "any replica can synch with any other replica that is a member of the same replica set" rule are the local and anonymous replicas, which can only synch with their parent replica. This is seen as an advantage, since it's the reason they were created, but to me that's a fatal flaw, because it means any data in them can very, very easily get orphaned and not be synchronizable with the rest of the replica set.
Whether or not you create the replicas explicitly or just by copying depends entirely on what you want to do in regard to replica priority:
1. if you copy with the file system, all replicas will have the same priority.
2. if you create them through the Access UI or with a simple DAO command, the new replicas will have a priority 90% that of the parent replica.
3. if you use code to create the replicas, you can specify the precise priority you'd like, any arbitrary value between 0 and 100.
You can blame that on the conflicting Microsoft statements (use indirect for laptop use, no mention of direct synchronization which is much simpler and faster to implement in a LAN network environment)
I'd like to know what documentation you're referring to here so that I can add it to the Wiki article on "things not to believe in the MS documentation."
Synchronization never happens spontaneously.
Replication Manager doesn't do auto synchs?
Replication Manager doesn't do anything at all. It's nothing but a (bad) GUI for managing and configuring replication. I don't use it at all.
Now, "automatic synchs" can happen if you've set up scheduled synchs and the relevant synchronizer(s) have to be running. But it doesn't just start up by itself.
getting [a deleted replica] back in the replica set is as easy as opening the orphaned replica and synching with any partner in the replica set.
I never knew that and can't recall reading it except that Microsoft mentions that the replica is removed from the replica set.
Well, in general, when you choose to remove a replica from a replica set, it's usually because it really has been lost. But if there's some temporary condition that causes replication to think it's been lost (such as you temporarily changed the file name for some reason and forgot to change it back), you need do nothing but synch back with the replica set.
Then I came across the knowledgebase article to recover a non-member replica so I was under the impression that this was what had to be done to get the replica back in the replica set.
I'm not at all sure what that article (
http://support.microsoft.com/kb/158936) means by the phrase "if the ReplicaID property of a replicated database becomes invalid". Perhaps it's true that once a replica is deleted from the replica set, it can't be synched back unless the ReplicaID is changed. All you'd have to do is one of these two things:
1. rename the deleted Replica. Open it in the Access UI. This will generate a new ReplicaID associated with the new file name. If you want your revived previously-deleted replica to have the same original name, close it and rename it back to the original name. Open it in the Access UI. This will generate another ReplicaID associated with the file name it has now. You will also have a "dead replica" in this replica's MSysReplicas table, i.e., the ReplicaID/filename pair you created in the first step. To clear that out, try synching with that changed filename, and it will be deleted. At this point, from this replica, synch with the original replica set. The replica will be seen as a new valid replica, not as the deleted replica, because even though it has the same filename in the same location as the replica that was deleted, it has a different ReplicaID, so as far as Jet is concerned, it's a completely unknown replica that is a valid member of the replica set.
2. as an alternative, open the "deleted" replica, and create a new replica. That new replica will be able to synch with the replica set without any problems. Of course, you have two replicas sitting around, and you might want to restore the original file name. In that case, you'll have to delete the original replica, attempt a synch with it from the new replica (to delete it), then rename the new replica back to the original name. To delete the ReplicaID associated with the other filename, just synch with it again. At that point, you have a new replica under the original filename with a new ReplicaID and should be able to synch back with the replica set (as described above in #1).
I don't see why anyone would bother with #2 when you have to do just as much renaming and deleting and synching while also adding the extra step of creating a new replica. Also, it has the disadvantage that the new replica would have a lower replica priority unless you create it in code and set the replica priority explicitly.