Professional Documents
Culture Documents
GoldenGate
Julian Dyke
Independent Consultant
Web Version
1 2013 Julian Dyke juliandyke.com
Agenda
Introduction
Configuration
Redo versus Trail
GoldenGate supports:
Environment:
Name Abbreviation Value
Home Directory $GG_HOME /home/oracle/goldengate
GoldenGate Schema GGSCHEMA GG01
Databases:
Source Target
Hostname vm4 vm5
Database Name NORTH SOUTH
Oracle GoldenGate
Manager Manager
Classic Integrated
Capture Capture
Logical
Online Standby Change Integrated Trail
Redo Logs Redo Logs Records Extract File
Logical
Online Archive Change Integrated Trail
Redo Logs Redo Logs Records Extract File
Data
Capture Replicat
Pump
Data
Replicat Capture
Pump
Server A Server B
ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
mkdir /home/oracle/goldengate
$ cd /home/oracle/goldengate
$ unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
export PATH=/home/oracle/goldengate:$PATH
export LD_LIBRARY_PATH=/home/oracle/goldengate:$LD_LIBRARY_PATH
$ ggsci
GGSCI 1> HELP
For example:
[oracle@vm5]$ ggsci
GGSCI (vm5) 1> EDIT PARAMS rep1
$GG_HOME/dirprm/rep1.prm
-- This is a comment
[oracle@vm4]$ ggsci
GGSCI (vm4) 1> CREATE SUBDIRS
Creating subdirectories under current directory /home/oracle/goldengate
Parameter files /home/oracle/goldengate/dirprm: created
Report files /home/oracle/goldengate/dirrpt: created
Checkpoint files /home/oracle/goldengate/dirchk: created
Process status files /home/oracle/goldengate/dirpcs: created
SQL script files /home/oracle/goldengate/dirsql: created
Database definitions files /home/oracle/goldengate/dirdef: created
Extract data files /home/oracle/goldengate/dirdat: created
Temporary files /home/oracle/goldengate/dirtmp: created
Stdout files /home/oracle/goldengate/dirout: created
[oracle@vm4]$ ggsci
GGSCI 1> EDIT PARAMS ./GLOBALS
GGSCHEMA gg01
[oracle@vm4]$ cd /home/oracle/goldengate
[oracle@vm4]$ sqlplus / as sysdba
SQL> @role_setup
GGS Role setup script
This script will drop and recreate the role GGS_GGSUSER_ROLE
Enter GoldenGate schema name:GG01
[oracle@vm4]$ cd /home/oracle/goldengate
[oracle@vm4]$ sqlplus / as sysdba
SQL> GRANT GGS_GGSUSER_ROLE TO gg01;
[oracle@vm4]$ ggsci
GGSCI 1> EDIT PARAMS MGR
PORT 7809
DYNAMICPORTLIST 7810-7820
oracle@vm4]$ ggsci
GGSCI 2> START MANAGER
Executable is $GG_HOME/mgr
Classic capture
Captures changes from online redo log or archived redo log
Fetches additional data from database
Integrated capture
Captures changes from log miner
EXTRACT ex1
USERID gg01, PASSWORD gg01
EXTTRAIL /home/oracle/goldengate/dirdat/ex
TABLE US03.*;
EXTRACT dp1
USERID gg01, PASSWORD gg01
RMTHOST vm5, MGRPORT 7809
RMTTRAIL /home/oracle/goldengate/dirdat/rt
TABLE US03.*;
REPLICAT rep1
USERID gg01, PASSWORD gg01
ASSUMETARGETDEFS
DISCARDFILE /home/oracle/goldengate/discards, PURGE
MAP US03.* TARGET US03.*;
[oracle@vm4]$ ggsci
GGSCI> ADD EXTRACT ex1, TRANLOG, BEGIN NOW
GGSCI> ADD EXTTRAIL /home/oracle/goldengate/dirdat/ex, EXTRACT ex1
GGSCI> ADD EXTRACT dp1 EXTTRAILSOURCE /home/oracle/goldengate/dirdat/ex
GGSCI> ADD RMTTRAIL /home/oracle/goldengate/dirdat/rt, EXTRACT dp1
[oracle@vm5]$ ggsci
GGSCI> ADD REPLICAT rep1, EXTTRAIL /home/oracle/goldengate/dirdat/rt
[oracle@vm4]$ ggsci
GGSCI> DBLOGIN USERID gg01, PASSWORD gg01
GGSCI> ADD CHECKPOINTTABLE gg01.checkpointtable
[oracle@vm4]$ ggsci
GGSCI> EDIT PARAMS ./GLOBALS
GGSCHEMA gg01
CHECKPOINTTABLE gg01.checkpointtable
[oracle@vm4]$ ggsci
GGSCI> START EXTRACT ex1
GGSCI> START EXTRACT dp1
[oracle@vm4]$ ggsci
GGSCI (vm4.juliandyke.com) 1> INFO ALL
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING DP1 00:00:00 00:00:04
EXTRACT ABENDED DP2 00:00:00 24:23:14
EXTRACT RUNNING EX1 00:00:00 00:00:05
EXTRACT STOPPED EX2 00:00:00 02:34:41
[oracle@vm5]$ ggsci
GGSCI (vm5.juliandyke.com) 1> INFO ALL
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REP1 00:00:00 00:00:05
REPLICAT RUNNING REP2 00:00:00 00:00:04
[oracle@vm4]$ ggsci
GGSCI> VIEW REPORT ex1
00 00 00 04 32 30 31 33
FF FF 00 00
DATE
2-bytes followed by 19 ASCII characters in the format:
YYYY-MM-DD:HH24:MI:SS
00 00 32 30 31 33 2D 30 33 2D 31 34 3A 32 32 3A 33 39 3A 35 36
FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 0A 47 6F 6C 64 65 6E 47 61 74 65
CHAR
2-byte length followed by ASCII characters space-padded
e.g. GoldenGate in CHAR(20)
00 00 47 6F 6C 64 65 6E 47 61 74 65 20 20 20 20 20 20 20 20 20 20
NULL values stored as:
FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Logdump> NEXT # or N
[oracle@vm4]$ ggsci
GGSCI 1> DBLOGIN USERID us01 PASSWORD us01
GGSCI 2> ADD TRANDATA t1
Logging of supplemental redo data enabled for table US01.T1.
[oracle@vm4]$ cd /home/oracle/goldengate
[oracle@vm4]$ sqlplus / as sysdba
SQL> @sequence.sql
Replicat process:
REPLICAT rep1
USERID gg01, PASSWORD gg01
ASSUMETARGETDEFS
DISCARDFILE /home/oracle/goldengate/discards, PURGE
MAP US03.SEQ1, TARGET US03.SEQ1;
MAP US03.T*, TARGET US03.*;
49 2013 Julian Dyke juliandyke.com
GoldenGate
TRUNCATE Statements
TRUNCATE statements are not supported by default
[oracle@vm4]$ cd /home/oracle/goldengate
[oracle@vm4]$ sqlplus / as sysdba
SQL> @marker_setup
SQL> @ddl_setup
SQL> @role_setup
SQL> @ddl_enable
No configuration necessary on target server for DDL support
On the source
[oracle@vm4]$ cd /home/oracle/goldengate
[oracle@vm4]$ ggsci
GGSCI 1> EDIT PARAMS defgen1
DEFSFILE ./dirdef/defgen1.def
USERID us03 PASSWORD us03
TABLE us03.t54;
Generate the definitions using
[oracle@vm4]$ cd /home/oracle/goldengate
[oracle@vm4]$ ./defgen paramfile /home/oracle/goldengate/dirprm/defgen1.prm
REPLICAT rep1
USERID gg01, PASSWORD gg01
SOURCEDEFS ./dirdef/defgen1.def
DISCARDFILE /home/oracle/goldengate/discards, PURGE
MAP US03.T54 TARGET US01.T55, &
COLMAP (col1=c1, col3=c2, col4=c3, col2=c4);
To avoid warnings
BEGIN
dbms_goldengate_auth.grant_admin_privilege
(
grantee => 'GG01',
privilege_type => 'CAPTURE',
grant_select_privileges => TRUE
);
END;
/
On source server register extract group with database
[oracle@vm4]$ ggsci
GGSCI (vm4) 1> DBLOGIN USERID gg01 PASSWORD gg01
Successfully logged into database.
GGSCI (vm4) 2> REGISTER EXTRACT ex2 DATABASE
2013-04-19 14:04:01 INFO OGG-02003 Extract EX2 successfully registered
with database at SCN 2109330.
EXTRACT ex2
USERID gg01, PASSWORD gg01
TRANLOGOPTIONS INTEGRATED PARAMS (MAX_SGA_SIZE 100)
EXTTRAIL /home/oracle/goldengate/dirdat/il
TABLE us01.t101;
Data pump process parameters
EXTRACT dp2
USERID gg01, PASSWORD gg01
RMTHOST vm5, MGRPORT 7809
RMTTRAIL /home/oracle/goldengate/dirdat/ir
TABLE US01.*;
[oracle@vm4]$ ggsci
GGSCI> ADD EXTRACT ex2 INTEGRATED TRANLOG, BEGIN NOW
GGSCI> ADD EXTTRAIL /home/oracle/goldengate/dirdat/il, EXTRACT ex2
GGSCI> ADD EXTRACT dp2 EXTTRAILSOURCE /home/oracle/goldengate/dirdat/il
GGSCI> ADD RMTTRAIL /home/oracle/goldengate/dirdat/ir, EXTRACT dp2
[oracle@vm5]$ ggsci
GGSCI> ADD REPLICAT rep2, EXTTRAIL /home/oracle/goldengate/dirdat/ir
COMMIT; 5.4
Commit 24.4
62 2013 Julian Dyke juliandyke.com
Redo versus Trail
Multi-Row Inserts
Redo Trail
INSERT INTO t2
SELECT * FROM t1; TX Header
5.2 Insert Row 1
QMD Undo
5.1
11.3 Insert Row 2
Insert Row 4
Commit
COMMIT; 5.4
24.4
63 2013 Julian Dyke juliandyke.com
Redo versus Trail
Direct Inserts Redo Trail
Direct Load
Insert Row 4
Insert Row 5
Insert Row 6
5.2
5.1
Index Insert 10.2
Commit
COMMIT; 5.4
24.4
64 2013 Julian Dyke juliandyke.com
Redo versus Trail
Single-Row Updates
Redo Trail
UPDATE t2 TX Header
SET c2 = Alpha 5.2 Update Row 1
WHERE c1 = 1; URP Undo
5.1
11.5 Update Row 2
URP Redo
UPDATE t2 5.20
SET c2 = Beta URP Undo Update Row 3
WHERE c1 = 2; 5.1
11.5
URP Redo
UPDATE t2 URP Undo 5.1
SET c2 = Gamma
WHERE c1 = 3; 11.5
5.1
URP Redo
Commit
COMMIT; 5.4
24.4
65 2013 Julian Dyke juliandyke.com
Redo versus Trail
Multi-Row Updates
Redo Trail
UPDATE t2 TX Header
SET c3 = c3 * 1.1; 5.2 Update Row 1
URP Undo
5.1
11.5 Update Row 2
URP Redo
5.20
URP Undo Update Row 3
5.1
11.5
URP Redo
Commit
COMMIT; 5.4
24.4
66 2013 Julian Dyke juliandyke.com
Redo versus Trail
Single-Row Deletes
Redo Trail
TX Header
COMMIT; 5.4
24.4
67 2013 Julian Dyke
Commit
juliandyke.com
Redo versus Trail
Multi-Row Deletes
Redo Trail
TX Header
COMMIT; 5.4
24.4
68 2013 Julian Dyke
Commit
juliandyke.com
Thank You For Your Interest
info@juliandyke.com