Part of the problem with Oracle's replication is that the database needs to be READ/WRITE to make the replicated changes. But you want to be READ ONLY as well. The first thing I'd suggest, without knowing more about your requirements, is to just create a user that has only SELECT privileges on your schema's objects and have those who access this database use that account. This way, changes can still be applied without the users of the database being able to change the data as well. If this is not possible, then Oracle's replication will not work for you.
Another technique is to use Oracle's Data Guard to create a standby database. Any changes to the primary database can get propogated to the standby server. The standby server can then be put into READ ONLY mode so that it can be used to generate reports, for example. The downside to this solution is that new changes will get journalled while in READ ONLY and will not get applied until you put the database into STANDBY mode again.
This was first published in September 2003