I am involved in a project that presents some new problems for me. After working in a first version that didn't work exactly how it was expected, I am doing some research, looking for information about architectures and solutions that would help to implement a good software.
Here's a short description of the system: there are three big databases from different applications, containing informations about people, families, addresses, incomes etc. The system must synchronize the data between the databases, following specific rules for each domain and database. For instance, let's suppose an address synchronization from database A to database B. Each registry has an associated date, that measures it's age. If the registry from database A is newer than the equivalent registry in database B and the data is different between them, the registry in B should be updated with A's data. Some validations can be added, ie: some string must be shorter than n characters, the address must be a valid one etc. These rules can be somewhat complex.
It's good to remember that the database schemas are different, as does the database management systems (Oracle vs. SQL Server). They were created really independently, and the need for the synchronization came later. I would like to point that the registry number in all databases is high. We want to implement the software using Java, since it's company's language of choice.
Well, it's the general picture. As I said, we don't have much experience in this kind of system and would like the suggestion of solutions, architectures etc that were proven good in similar conditions. If you need more information, feel free to ask.
A few things pop to mind. First, you're talking about basic database integration issues, so I would do a web search on this topic (there is a fair bit written, you may want to by a book. Imon's Data Warehousing book might be a good option). Second, you'll likely run into data quality issues. See The Joy of Legacy Data. Third, I'd suggest taking an evolutionary approach to development. This is possible with data stuff, as I show at http://www.agiledata.org.