Skip to main content

Community

Other: Support even in Noarchivelog mode in Oracle RAC

Please sign in to leave a comment.

Comments

3 comments

    I need too

    It would be great if it is supported by HVR.

    Dear Minsoo Kang,

    For any logical database replication to function properly it is critical that changes are replicated in the correct order. An obvious example is that only a single row is replicated and gets two distinct changes in separate transactions. Naturally the order in which you replicate these changes determines the ultimate result of the replicated data set.

    In an Oracle Database the System Commit Number (SCN) uniquely determines the order of transactions. There is one global SCN per database, even in a RAC configuration. However in a RAC database every thread (node) has its own redo files.

    In order to replicate changes from a RAC database correctly we must combine and sequence the redo coming from the nodes in order to replicate correctly. This must work in all cases including when nodes go up and down - planned or unplanned - whilst the database remains available. This is where the complexity arises, and why we require running in archivelog mode on a RAC database.

    How would our technology decide whether a thread (node) is still alive but not writing any changes for some period of time, or whether it is no longer alive? Such information can be queried from the database (v$trhead), but only if we assume that replication is current. What if replication is running behind by some amount of time? How can we be certain that we have read all redo from a node?

    Threads that go up or down generate an empty archive file. In case of a sudden crash it is not the thread (node) that crashed creating this empty file, but rather one of the surviving threads (you can see this in from archival_tread# in v$archived_log that is such cases is different from thread#). The concept of empty archive files is a fully consistent behavior that Oracle relies on when recovering a RAC database.

    When the database restarts the empty archive files also inform us the order in which the nodes of the cluster started, and the header of every archive file instructs the technology what threads were available when the archive file was created.

    Of course none of this matters on a single instance database because no redo is generated if the single database thread restarts. I.e. we always know where to resume.

    Allowing a RAC database to run in noarchivelog mode will result in data loss using our technology. We believe that this is not what our customers want, so we are not enabling this.

    Hope this clarifies.
    Mark.