Oracle: Keeping exact db clone synced up in real time Is there a way to keep an exact clone of a database in real-time? (Or very close to real time)
The use case is for data reporting. I'm currently limited in it to make sure the application performance isn't impacted. If there was a real-time clone I could query then application performance becomes less of an issue.
I don't really know what to ask for in Oracle terminology when I approach our DBA folks about a solution, and things always go much more smoothly if I can speak their language from the outset without having to hash out precisely what I'm asking for.
Short answer: Data Guard.
Note, this isn't &quot;Active&quot; Data Guard, which costs ready money, but good, &quot;old-fashioned&quot; Data Guard.
It's a Recovery technology, intended to keep standby databases up-to-date and supports three &quot;flavours&quot;:
A Physical Standby is only for Recovery purposes, giving you a complete, separate copy of your database that you can switch/fail over to in the event of the Primary database going &quot;Pop!&quot; (and can even happen automatically, if you configure an Observer).  Transport and redo apply can be real-time, depending on how the Data Guard configuration is set up.
Downside is that it's only for Recovery purposes and you can't do anything &quot;useful&quot; with it, like query it.  (BTW, that's the extra bit that &quot;Active&quot; Data Guard provides - it &quot;cons&quot; a Physical Standby database into allowing queries).
A Logical Standby is probably what you want.
Logical standbys are meant to be readable, all the time.
Downsides are that the transport mechanism is a bit different and can be a bit slower, (transport and apply lag in the handfuls of seconds instead of real-time), some [structural/DDL] changes don't get carried through (so you have to apply them in multiple places) and some of the more &quot;esoteric&quot; Data Types aren't supported (although that list shrinks with every version).
If you wanted to, you could even create a &quot;farm&quot; of Logical Standbys, accessed by clients in a round-robin fashion (as defined in their TNS Naming files), to spread the &quot;read&quot; load even further.  (Possibly overkill, given how powerful Oracle Database is, but it's another option.  YMMV).
A Snapshot Standby (just for completeness, here) is a &quot;halfway-house&quot; between the two.
Most of the time, it behaves like a regular database, allowing queries to be run against it.  Then, periodically, you close it, &quot;plug&quot; it back into the Data Guard infrastructure (which silently converts it into an unreadable, Physical Standby) and it will automatically receive and apply redo logs from the Primary.  Then, when you need to use the Snapshot again, you &quot;unplug&quot; it and open it (which silently converts it into a [readable] Snapshot Standby) with data as of the Point-in-Time of the &quot;unplugging&quot;.
Useful if you wanted, say, a daily snapshot of your financial transactions to support offline data analytics.
Redo Apply is fast and a whole day's worth of redo can easily be applied in a couple of hours (or less) but, of course, you have to have the extra disk space to store it until it gets applied.
Not for everybody, admittedly, but it's another option.