Re: Data movement logic in data guard

  • From: Lok P <loknath.73@xxxxxxxxx>
  • To: Oracle L <oracle-l@xxxxxxxxxxxxx>
  • Date: Sat, 19 Dec 2020 00:35:36 +0530

Moving data from one to other system looks to be very common but I have
never came across building such logic manually in code. And I don't have
much idea about how the archive log apply happens at standby. But it seems
like,  to maintain constraints it has to be in exactly in same order as the
data load happens in primary. Else things will break.

Can somebody guide me here,  if the logic which we are going to rely to
decide reference date/time  in our case for data movement will never fail?

On Fri, 18 Dec 2020, 4:27 pm Lok P, <loknath.73@xxxxxxxxx> wrote:

Actually in golden gate setup with multiple parallel replication threads ,
we have encountered scenarios where two transactions generated from source
can reach target in different order thus causing the data pickup from
target to miss some rows.



On Fri, Dec 18, 2020 at 9:30 AM Lok P <loknath.73@xxxxxxxxx> wrote:

Its version 11.2.0.4 of oracle exadata. We have a requirement in which we
need to move the data to another system and for that we want to utilize the
DR database(which is a physical standby with data guard configured) rather
than Primary, as we want to not to affect the key applications which are
running on primary. And we are almost saturating the DB resources on the
primary during peak hours.

For copying/moving data without miss in each ~15minutes interval
frequency, we are relying on "date_created" column as reference column of
the transaction table , so in case we have some additional lag from primary
to DR, is it possible that a record created on primary and DR as below
sequence, such that the row-3 created on DR before Row-2? In that case we
may miss that row when we take MAX(date_created) from our transaction table
to move the data.

In such a scenario , how should we make our logic full proof  to pick
the max(date_created) on source so that we won't miss any data? Or
should we some way utilize the column last_time of v$standby_log to make
our logic full proof?

Aso i am wondering if by any way we can handle UPDATE/DELETE of the
records in source?

On Primary:-

Row-1 created at 18th DEC 10:00AM with date_created as 18th DEC 10:00AM

Row-2 created at 18th DEC 10:05 AM with date_created as 18th DEC 10:05 AM

Row-3 created at 18th DEC 10:06 AM with date_created as 18th DEC 10:06 AM

On DR when we have lag of say ~5minutes:-

Row-1 created at 18th DEC 10:05AM with date_created as 18th DEC 10:00AM

Row-3 created at 18th DEC 10:11:01 AM with date_created as 18th DEC
10:06AM

Row-2 created at 18th DEC 10:11:02 AM with date_created as 18th DEC
10:05AM






Other related posts: