==================================
part 2 : GoldenGate Configuring Online Change Synchronization after initial load with datapump
( DML REPLICATION )
Brief Steps
Create a GoldenGate Checkpoint table
Create an Extract group
Create a parameter file for the online Extract group
Create a Trail
Create a Replicat group
Create a parameter file for the online Replicat group
For Online synchronization, Goldengate uses checkpoints on target to understand where it has to start replication.
On Target:
EDIT PARAMS ./GLOBALS
#####add the following two lines global params file #########
GGSCHEMA ggsowner
CHECKPOINTTABLE ggsowner.CHKPTAB
Bounce the Manager
=================
stop the manager & start the manager
Login to database and create checkpoint on ggsci> prompt
==========================================
DBLOGIN USERID ggsowner, PASSWORD ggsowner
ADD CHECKPOINTTABLE ggsowner.CHKPTAB
note : how to drop and clean up CHECKPOINTTABLE
On Source : Create a Primary Extract Group
./ggsci
GGSCI (testdb1) 4> ADD EXTRACT firstddl, TRANLOG, BEGIN NOW
EXTRACT added.
info *
GGSCI (testdb) 8> info * EXTRACT FIRSTDDL Initialized 2016-06-23 17:47 Status STOPPED Checkpoint Lag 00:00:00 (updated 00:10:22 ago) Log Read Checkpoint Oracle Redo Logs 2016-06-23 17:47:26 Seqno 0, RBA 0 SCN 0.0 (0)
syntax :
ADD EXTTRAIL <extract trail path/two character trail id> ,EXTRACT <extract name>, Megabytes <n>
GGSCI (testdb1) 5> ADD RMTTRAIL /u01/app/oracle/goldengate/dirdat/rt, EXTRACT firstddl
RMTTRAIL added.
EDIT PARAMS firstddl
=================
EXTRACT firstddl
USERID ggsowner, PASSWORD ggsowner
RMTHOST 192.168.1.108, MGRPORT 7809
RMTTRAIL /u01/app/oracle/goldengate/dirdat/rt
TABLE ggsowner.first;
On Target : Create a Replicate Group
./ggsci
DBLOGIN USERID ggsowner, PASSWORD ggsowner
ADD REPLICAT repddl, TRANLOG, BEGIN NOW
GGSCI (testdb2.sample.com as ggs_owner@testdb2) 10> ADD REPLICAT repddl, EXTTRAIL /u01/app/oracle/goldengate/dirdat/rt CHECKPOINTTABLE ggs_owner.CHKPTAB
REPLICAT added.
edit param repddl
=============
REPLICAT repddl
ASSUMETARGETDEFS
USERID ggsowner, PASSWORD ggsowner
MAP ggsowner.first, TARGET ggsowner.first;
On Source : Start extract and check status
./ggsci
START EXTRACT firstddl
status extract firstddl
info extract firstddl, detail
GGSCI (testdb1.sample.com) 12> info extract firstddl, detail
EXTRACT FIRSTDDL Last Started 2016-06-23 18:11 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:07 ago)
Process ID 19090
Log Read Checkpoint Oracle Redo Logs
2016-06-23 18:11:59 Seqno 13, RBA 23299072
SCN 0.1199304 (1199304)
Target Extract Trails:
Trail Name Seqno RBA Max MB Trail Type
/u01/app/oracle/goldengate/dirdat/rt 0 1454 500 RMTTRAIL
Extract Source Begin End
/u01/app/oracle/oradata/testdb1/redo01.log 2016-06-23 17:47 2016-06-23 18:11
Not Available * Initialized * 2016-06-23 17:47
Not Available * Initialized * 2016-06-23 17:47
Not Available * Initialized * 2016-06-23 17:47
Current directory /u01/app/oracle/goldengate
Report file /u01/app/oracle/goldengate/dirrpt/FIRSTDDL.rpt
Parameter file /u01/app/oracle/goldengate/dirprm/firstddl.prm
Checkpoint file /u01/app/oracle/goldengate/dirchk/FIRSTDDL.cpe
Process file /u01/app/oracle/goldengate/dirpcs/FIRSTDDL.pce
Error log /u01/app/oracle/goldengate/ggserr.log
On Target : Start replicat and check status
./ggsci
START replicat repddl
status replicat repddl
info replicat repddl, detail
GGSCI (testdb2.sample.com) 6> info replicat repddl, detail
REPLICAT REPDDL Last Started 2016-06-23 18:14 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:03 ago)
Process ID 14692
Log Read Checkpoint File /u01/app/oracle/goldengate/dirdat/rt000000000
First Record RBA 1454
Current Log BSN value: (requires database login)
Last Committed Transaction CSN value: (requires database login)
Extract Source Begin End
/u01/app/oracle/goldengate/dirdat/rt000000000 * Initialized * First Record
/u01/app/oracle/goldengate/dirdat/rt000000000 * Initialized * First Record
Current directory /u01/app/oracle/goldengate
Report file /u01/app/oracle/goldengate/dirrpt/REPDDL.rpt
Parameter file /u01/app/oracle/goldengate/dirprm/repddl.prm
Checkpoint file /u01/app/oracle/goldengate/dirchk/REPDDL.cpr
Checkpoint table ggs_owner.CHKPTAB
Process file /u01/app/oracle/goldengate/dirpcs/REPDDL.pcr
Error log /u01/app/oracle/goldengate/ggserr.log
On Source : Do Some DML changes and verify the changes in Source
SQL> conn ggs_owner/ggs_owner
Connected.
SQL> select count(1) from first;
COUNT(1)
----------
70531
SQL> delete from first where rownum < 1000;
999 rows deleted.
SQL> commit;
Commit complete.
SQL> select count(1) from first;
COUNT(1)
----------
69532
On Target : Do Some DML changes and verify the changes in target
SQL> conn ggsowner/ggsowner
Connected.
SQL> select count(1) from first;
COUNT(1)
----------
71530
SQL> select count(1) from first;
COUNT(1)
----------
70531
SQL> select count(1) from first;
COUNT(1)
----------
69532
Example 2:
Configuring Secondary Extract on Source (datapump process)
===================================================
On Source: Create a Test table "second" with data or without data
SQL> create table second as select * from first where 1=0;
Table created.
SQL> select count(1) from second;
COUNT(1)
----------
0
./ggsci
GGSCI (testdb1) 1> ADD EXTRACT secondex, TRANLOG, BEGIN NOW
EXTRACT added.
GGSCI (testdb1) 2> ADD EXTTRAIL /u01/app/oracle/goldengate/dirdat/lt, EXTRACT secondex
EXTTRAIL added.
GGSCI (testdb1) 3> ADD EXTRACT pumpext1, EXTTRAILSOURCE /u01/app/oracle/goldengate/dirdat/lt
EXTRACT added.
EDIT PARAM secondex
=====================EXTRACT secondex
USERID ggsowner, PASSWORD ggsowner
EXTTRAIL /u01/app/oracle/goldengate/dirdat/lt
TABLE ggsowner.second;
Below line added in source db but point location about target db
=================================================GGSCI (testdb1) 5> ADD RMTTRAIL /u01/app/oracle/goldengate/dirdat/pt, EXTRACT pumpext1
RMTTRAIL added.
EDIT PARAM pumpext1
==================
EXTRACT pumpext1
USERID ggsowner, PASSWORD ggsowner
PASSTHRU
RMTHOST 192.168.1.108, MGRPORT 7809
RMTTRAIL /u01/app/oracle/goldengate/dirdat/pt
TABLE ggsowner.second;
On Target , create a test table mytab with data or without data
SQL> create table second as select * from first where 1=0;
Table created.
SQL> select count(1) from second;
COUNT(1)
----------
0
./ggsci
GGSCI (testdb2) 2> ADD REPLICAT reppmp, EXTTRAIL /u01/app/oracle/goldengate/dirdat/pt
REPLICAT added.
EDIT PARAMS reppmp
REPLICAT reppmp
ASSUMETARGETDEFS
USERID ggsowner, PASSWORD ggsowner
MAP ggsowner.second, TARGET ggsowner.second;
On Source , Start the extract and pump extract
START EXTRACT secondex
START EXTRACT pumpext1
On Target , Start the replicat
start replicat reppmp
Do some DML changes On Source & On Target
===================================
on source
=======
SQL> select count(1) from second;
COUNT(1)
----------
0
SQL> insert into second select * from first;
69532 rows created.
SQL> commit;
Commit complete.
verify on target
============
SQL> select count(1) from second;
COUNT(1)
----------
0
SQL> select count(1) from second;
COUNT(1)
----------
69532
GGSERR ON SOURCE during "
START EXTRACT secondex" then "START EXTRACT pumpext1"
==================
2016-06-23 19:20:04 INFO OGG-00987 Oracle GoldenGate Command Interpreter for Oracle: GGSCI command (oracle): START EXTRACT secondex.
2016-06-23 19:20:04 INFO OGG-00963 Oracle GoldenGate Manager for Oracle, mgr.prm: Command received from GGSCI on host [192.168.1.141]:62926 (START EXTRACT SECONDEX ).
2016-06-23 19:20:04 INFO OGG-00960 Oracle GoldenGate Manager for Oracle, mgr.prm: Access granted (rule #7).
2016-06-23 19:20:04 INFO OGG-00975 Oracle GoldenGate Manager for Oracle, mgr.prm: EXTRACT SECONDEX starting.
2016-06-23 19:20:04 INFO OGG-00992 Oracle GoldenGate Capture for Oracle, secondex.prm: EXTRACT SECONDEX starting.
2016-06-23 19:20:04 INFO OGG-03059 Oracle GoldenGate Capture for Oracle, secondex.prm: Operating system character set identified as UTF-8.
2016-06-23 19:20:04 INFO OGG-02695 Oracle GoldenGate Capture for Oracle, secondex.prm: ANSI SQL parameter syntax is used for parameter parsing.
2016-06-23 19:20:04 INFO OGG-03522 Oracle GoldenGate Capture for Oracle, secondex.prm: Setting session time zone to source database time zone 'GMT'.
2016-06-23 19:20:04 INFO OGG-01635 Oracle GoldenGate Capture for Oracle, secondex.prm: BOUNDED RECOVERY: reset to initial or altered checkpoint.
2016-06-23 19:20:04 INFO OGG-01815 Oracle GoldenGate Capture for Oracle, secondex.prm: Virtual Memory Facilities for: BR
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/u01/app/oracle/goldengate/BR/SECONDEX.
2016-06-23 19:20:04 INFO OGG-01851 Oracle GoldenGate Capture for Oracle, secondex.prm: filecaching started: thread ID: 139725822228224.
2016-06-23 19:20:04 INFO OGG-01815 Oracle GoldenGate Capture for Oracle, secondex.prm: Virtual Memory Facilities for: COM
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/u01/app/oracle/goldengate/dirtmp.
2016-06-23 19:20:04 INFO OGG-02089 Oracle GoldenGate Capture for Oracle, secondex.prm: Source redo compatibility version is: 11.2.0.0.0.
2016-06-23 19:20:04 INFO OGG-01515 Oracle GoldenGate Capture for Oracle, secondex.prm: Positioning to begin time Jun 23, 2016 6:57:35 PM.
2016-06-23 19:20:05 INFO OGG-01516 Oracle GoldenGate Capture for Oracle, secondex.prm: Positioned to Sequence 13, RBA 27232784, SCN 0.0 (0), Jun 23, 2016 6:57:35 PM.
2016-06-23 19:20:05 INFO OGG-00993 Oracle GoldenGate Capture for Oracle, secondex.prm: EXTRACT SECONDEX started.
2016-06-23 19:20:05 INFO OGG-01052 Oracle GoldenGate Capture for Oracle, secondex.prm: No recovery is required for target file /u01/app/oracle/goldengate/dirdat/lt000000000, at RBA 0 (file not opened).
2016-06-23 19:20:05 INFO OGG-01478 Oracle GoldenGate Capture for Oracle, secondex.prm: Output file /u01/app/oracle/goldengate/dirdat/lt is using format RELEASE 12.2.
2016-06-23 19:20:05 INFO OGG-01517 Oracle GoldenGate Capture for Oracle, secondex.prm: Position of first record processed Sequence 13, RBA 27232784, SCN 0.1201535 (1201535), Jun 23, 2016 6:57:54 PM.
2016-06-23 19:20:29 INFO OGG-00987 Oracle GoldenGate Command Interpreter for Oracle: GGSCI command (oracle): START EXTRACT pumpext1.
2016-06-23 19:20:29 INFO OGG-00963 Oracle GoldenGate Manager for Oracle, mgr.prm: Command received from GGSCI on host [192.168.1.141]:62937 (START EXTRACT PUMPEXT1 ).
2016-06-23 19:20:29 INFO OGG-00960 Oracle GoldenGate Manager for Oracle, mgr.prm: Access granted (rule #7).
2016-06-23 19:20:29 INFO OGG-00975 Oracle GoldenGate Manager for Oracle, mgr.prm: EXTRACT PUMPEXT1 starting.
2016-06-23 19:20:29 INFO OGG-00992 Oracle GoldenGate Capture for Oracle, pumpext1.prm: EXTRACT PUMPEXT1 starting.
2016-06-23 19:20:29 INFO OGG-03059 Oracle GoldenGate Capture for Oracle, pumpext1.prm: Operating system character set identified as UTF-8.
2016-06-23 19:20:29 INFO OGG-02695 Oracle GoldenGate Capture for Oracle, pumpext1.prm: ANSI SQL parameter syntax is used for parameter parsing.
2016-06-23 19:20:29 INFO OGG-03522 Oracle GoldenGate Capture for Oracle, pumpext1.prm: Setting session time zone to source database time zone 'GMT'.
2016-06-23 19:20:29 INFO OGG-01851 Oracle GoldenGate Capture for Oracle, pumpext1.prm: filecaching started: thread ID: 139848027469568.
2016-06-23 19:20:29 INFO OGG-01815 Oracle GoldenGate Capture for Oracle, pumpext1.prm: Virtual Memory Facilities for: COM
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/u01/app/oracle/goldengate/dirtmp.
2016-06-23 19:20:29 INFO OGG-00993 Oracle GoldenGate Capture for Oracle, pumpext1.prm: EXTRACT PUMPEXT1 started.
2016-06-23 19:20:34 INFO OGG-01226 Oracle GoldenGate Capture for Oracle, pumpext1.prm: Socket buffer size set to 43520 (flush size 27985).
2016-06-23 19:20:34 INFO OGG-01052 Oracle GoldenGate Capture for Oracle, pumpext1.prm: No recovery is required for target file /u01/app/oracle/goldengate/dirdat/pt000000000, at RBA 0 (file not opened).
2016-06-23 19:20:34 INFO OGG-01478 Oracle GoldenGate Capture for Oracle, pumpext1.prm: Output file /u01/app/oracle/goldengate/dirdat/pt is using format RELEASE 12.2.
2016-06-23 19:20:34 INFO OGG-02243 Oracle GoldenGate Capture for Oracle, pumpext1.prm: Opened trail file /u01/app/oracle/goldengate/dirdat/lt000000000 at 2016-06-23 19:20:34.722722.
ggserr.log from target whne run "start replicat reppmp"
===================
2016-06-23 19:23:24 INFO OGG-00987 Oracle GoldenGate Command Interpreter for Oracle: GGSCI command (oracle): start replicat reppmp.
2016-06-23 19:23:24 INFO OGG-00963 Oracle GoldenGate Manager for Oracle, mgr.prm: Command received from GGSCI on host [192.168.1.108]:59439 (START REPLICAT REPPMP ).
2016-06-23 19:23:24 INFO OGG-00960 Oracle GoldenGate Manager for Oracle, mgr.prm: Access granted (rule #7).
2016-06-23 19:23:24 INFO OGG-00975 Oracle GoldenGate Manager for Oracle, mgr.prm: REPLICAT REPPMP starting.
2016-06-23 19:23:24 INFO OGG-00995 Oracle GoldenGate Delivery for Oracle, reppmp.prm: REPLICAT REPPMP starting.
2016-06-23 19:23:24 WARNING OGG-02904 Oracle GoldenGate Delivery for Oracle, reppmp.prm: Replication of PARTIAL XML containing NCHAR/NVARCHAR/NCLOB data may cause divergence.
2016-06-23 19:23:24 INFO OGG-03059 Oracle GoldenGate Delivery for Oracle, reppmp.prm: Operating system character set identified as UTF-8.
2016-06-23 19:23:24 INFO OGG-02695 Oracle GoldenGate Delivery for Oracle, reppmp.prm: ANSI SQL parameter syntax is used for parameter parsing.
2016-06-23 19:23:24 WARNING OGG-06453 Oracle GoldenGate Delivery for Oracle, reppmp.prm: DBOPTIONS SUPPRESSTRIGGERS is not supported for the RDBMS version you are using.
2016-06-23 19:23:24 INFO OGG-01815 Oracle GoldenGate Delivery for Oracle, reppmp.prm: Virtual Memory Facilities for: COM
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/u01/app/oracle/goldengate/dirtmp.
2016-06-23 19:23:25 INFO OGG-00996 Oracle GoldenGate Delivery for Oracle, reppmp.prm: REPLICAT REPPMP started.
2016-06-23 19:23:25 INFO OGG-02243 Oracle GoldenGate Delivery for Oracle, reppmp.prm: Opened trail file /u01/app/oracle/goldengate/dirdat/pt000000000 at 2016-06-23 19:23:24.968274.
Example 3:
Configuring DDL Synchronization
Already created the ddl scripts setup on both Source and Target you can just enable the supplimental logging on table/database doe DDL Synchronization.
On Source
./ggsci
GGSCI (testdb1) 1> dblogin userid ggs_owner password ggs_owner
Successfully logged into database.
GGSCI (testdb1@testdb1) 2> add trandata ggs_owner.second
2016-06-23 19:56:01 WARNING OGG-06439 No unique key is defined for table SECOND. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key.
Logging of supplemental redo data enabled for table GGS_OWNER.SECOND.
TRANDATA for scheduling columns has been added on table 'GGS_OWNER.SECOND'.
TRANDATA for instantiation CSN has been added on table 'GGS_OWNER.SECOND'.
Add the following line to secondex
==========================
EDIT PARAMS secondex
EXTRACT secondex
....
DDL INCLUDE MAPPED
....
stop extract secondex
start extract secondex
On Source : add new column
ALTER TABLE ggs_owner.second ADD NEW_COL VARCHAR2(10);
ouptput:
SQL> conn ggs_owner/ggs_owner
Connected.
SQL> ALTER TABLE ggs_owner.second ADD NEW_COL VARCHAR2(10);
Table altered.
SQL> desc ggs_owner.second
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(30)
NEW_COL VARCHAR2(10)
On target : Verify the target table synchronization of new added column created from source
SQL> desc second
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(30)
NEW_COL VARCHAR2(10)
On Source : modified secondex with added "DDL INCLUDE MAPPED" captured from ggserr.log
2016-06-23 19:57:38 INFO OGG-00975 Oracle GoldenGate Manager for Oracle, mgr.prm: EXTRACT SECONDEX starting.
2016-06-23 19:57:39 INFO OGG-00992 Oracle GoldenGate Capture for Oracle, secondex.prm: EXTRACT SECONDEX starting.
2016-06-23 19:57:39 INFO OGG-03059 Oracle GoldenGate Capture for Oracle, secondex.prm: Operating system character set identified as UTF-8.
2016-06-23 19:57:39 INFO OGG-02695 Oracle GoldenGate Capture for Oracle, secondex.prm: ANSI SQL parameter syntax is used for parameter parsing.
2016-06-23 19:57:39 INFO OGG-03522 Oracle GoldenGate Capture for Oracle, secondex.prm: Setting session time zone to source database time zone 'GMT'.
2016-06-23 19:57:39 INFO OGG-01815 Oracle GoldenGate Capture for Oracle, secondex.prm: Virtual Memory Facilities for: BR
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/u01/app/oracle/goldengate/BR/SECONDEX.
2016-06-23 19:57:39 INFO OGG-01851 Oracle GoldenGate Capture for Oracle, secondex.prm: filecaching started: thread ID: 139840981038848.
2016-06-23 19:57:39 INFO OGG-01815 Oracle GoldenGate Capture for Oracle, secondex.prm: Virtual Memory Facilities for: COM
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/u01/app/oracle/goldengate/dirtmp.
2016-06-23 19:57:39 INFO OGG-02089 Oracle GoldenGate Capture for Oracle, secondex.prm: Source redo compatibility version is: 11.2.0.0.0.
2016-06-23 19:57:39 INFO OGG-01513 Oracle GoldenGate Capture for Oracle, secondex.prm: Positioning to Sequence 14, RBA 136208, SCN 0.1204634 (1204634).
2016-06-23 19:57:40 INFO OGG-01516 Oracle GoldenGate Capture for Oracle, secondex.prm: Positioned to Sequence 14, RBA 136208, SCN 0.1204634 (1204634), Jun 23, 2016 7:56:59 PM.
2016-06-23 19:57:40 INFO OGG-00993 Oracle GoldenGate Capture for Oracle, secondex.prm: EXTRACT SECONDEX started.
2016-06-23 19:57:40 INFO OGG-01055 Oracle GoldenGate Capture for Oracle, secondex.prm: Recovery initialization completed for target file /u01/app/oracle/goldengate/dirdat/lt000000000, at RBA 21127006.
2016-06-23 19:57:40 INFO OGG-01478 Oracle GoldenGate Capture for Oracle, secondex.prm: Output file /u01/app/oracle/goldengate/dirdat/lt is using format RELEASE 12.2.
2016-06-23 19:57:40 INFO OGG-01026 Oracle GoldenGate Capture for Oracle, secondex.prm: Rolling over remote file /u01/app/oracle/goldengate/dirdat/lt000000000.
2016-06-23 19:57:40 INFO OGG-01053 Oracle GoldenGate Capture for Oracle, secondex.prm: Recovery completed for target file /u01/app/oracle/goldengate/dirdat/lt000000001, at RBA 1517.
2016-06-23 19:57:40 INFO OGG-01057 Oracle GoldenGate Capture for Oracle, secondex.prm: Recovery completed for all targets.
2016-06-23 19:57:40 INFO OGG-01517 Oracle GoldenGate Capture for Oracle, secondex.prm: Position of first record processed Sequence 14, RBA 136208, SCN 0.1204634 (1204634), Jun 23, 2016 7:56:59 PM.
2016-06-23 19:57:40 INFO OGG-02232 Oracle GoldenGate Capture for Oracle, pumpext1.prm: Switching to next trail file /u01/app/oracle/goldengate/dirdat/lt000000001 at 2016-06-23 19:57:40.871932 due to EOF. with current RBA 21,127,006.