Files
notes/Golden_Gate/ogg_04.txt
2026-03-12 22:01:38 +01:00

417 lines
9.8 KiB
Plaintext

# setup source schema
#####################
create user WOMBAT identified by "NDbGvewNHVj8@#2FFGfz!De";
grant connect, resource to WOMBAT;
alter user WOMBAT quota unlimited on USERS;
connect WOMBAT/"NDbGvewNHVj8@#2FFGfz!De";
drop table T0 purge;
drop table T1 purge;
drop table T2 purge;
drop table T3 purge;
create table JOB (
id NUMBER GENERATED ALWAYS AS IDENTITY,
d DATE not null
);
alter table JOB add constraint JOB_PK_ID primary key (ID);
create table T0 (
id NUMBER GENERATED ALWAYS AS IDENTITY,
d DATE not null,
c VARCHAR2(20),
n NUMBER
)
partition by range (d)
interval (interval '1' MONTH) (
partition p0 values less than (DATE'2000-01-01')
)
;
alter table T0 add constraint T0_PK_ID primary key (ID);
create table T1 (
d DATE not null,
c VARCHAR2(10),
n1 NUMBER,
n2 NUMBER
)
partition by range (d)
interval (interval '1' MONTH) (
partition p0 values less than (DATE'2000-01-01')
)
;
create table T2 (
d DATE not null,
n1 NUMBER,
n2 NUMBER,
n3 NUMBER
)
partition by range (d)
interval (interval '1' MONTH) (
partition p0 values less than (DATE'2000-01-01')
)
;
create table T3 (
d DATE not null,
n NUMBER,
c1 VARCHAR2(10),
c2 VARCHAR2(10),
c3 VARCHAR2(10)
)
partition by range (d)
interval (interval '1' MONTH) (
partition p0 values less than (DATE'2000-01-01')
)
;
CREATE OR REPLACE FUNCTION random_date(
p_from IN DATE,
p_to IN DATE
) RETURN DATE
IS
BEGIN
RETURN p_from + DBMS_RANDOM.VALUE() * (p_to -p_from);
END random_date;
/
CREATE OR REPLACE FUNCTION random_string(
maxsize IN NUMBER
) RETURN VARCHAR2
IS
BEGIN
RETURN dbms_random.string('x',maxsize);
END random_string;
/
CREATE OR REPLACE FUNCTION random_integer(
maxvalue IN NUMBER
) RETURN NUMBER
IS
BEGIN
RETURN trunc(dbms_random.value(1,maxvalue));
END random_integer;
/
# add some data into tables
###########################
set timing ON
DECLARE
imax NUMBER default 100000;
i number;
begin
dbms_random.seed (val => 0);
for i in 1 .. imax loop
insert /*+ APPEND */ into T0 (d,c,n) values (random_date(DATE'2000-01-01',SYSDATE),random_string(20),random_integer(999999999));
end loop;
commit;
end;
/
DECLARE
imax NUMBER default 100000;
i number;
begin
dbms_random.seed (val => 0);
for i in 1 .. imax loop
insert /*+ APPEND */ into T1 (d,c,n1,n2) values (random_date(DATE'2000-01-01',SYSDATE),random_string(10),random_integer(999999999),random_integer(999999999));
end loop;
commit;
end;
/
DECLARE
imax NUMBER default 100000;
i number;
begin
dbms_random.seed (val => 0);
for i in 1 .. imax loop
insert /*+ APPEND */ into T2 (d,n1,n2,n3) values (random_date(DATE'2000-01-01',SYSDATE),random_integer(999999999),random_integer(999999999),random_integer(999999999));
end loop;
commit;
end;
/
DECLARE
imax NUMBER default 100000;
i number;
begin
dbms_random.seed (val => 0);
for i in 1 .. imax loop
insert /*+ APPEND */ into T3 (d,n,c1,c2,c3) values (random_date(DATE'2000-01-01',SYSDATE),random_integer(999999999),random_string(10),random_string(10),random_string(10));
end loop;
commit;
end;
/
# run this PL/SQL block to generate living data
###############################################
connect WOMBAT/"NDbGvewNHVj8@#2FFGfz!De";
DECLARE
i number;
begin
loop
sys.dbms_session.sleep(5);
dbms_random.seed (val => 0);
i:=random_integer(999999999);
insert into JOB (d) values (sysdate);
update T0 set c=random_string(20) where n=i;
update T1 set c=random_string(20) where n2 between i-1000 and i+1000;
update T2 set d=random_date(DATE'2000-01-01',SYSDATE) where n1 between i-1000 and i+1000;
update T3 set c1=random_string(20),d=random_date(DATE'2000-01-01',SYSDATE) where n between i-1000 and i+1000;
insert into T0 (d,c,n) values (random_date(DATE'2000-01-01',SYSDATE),random_string(20),random_integer(999999999));
insert into T1 (d,c,n1,n2) values (random_date(DATE'2000-01-01',SYSDATE),random_string(10),random_integer(999999999),random_integer(999999999));
insert into T2 (d,n1,n2,n3) values (random_date(DATE'2000-01-01',SYSDATE),random_integer(999999999),random_integer(999999999),random_integer(999999999));
insert into T3 (d,c1,c2,c3) values (random_date(DATE'2000-01-01',SYSDATE),random_string(10),random_string(10),random_string(10));
commit;
exit when 1=0;
end loop;
end;
/
## Golden Gate setup
####################
# on source & destination
alias gg='rlwrap /app/oracle/product/ogg21/ggsci'
create user OGGADMIN identified by "eXtpam!ZarghOzVe81p@1";
# maybe too much
grant DBA to OGGADMIN;
Edit params ./GLOBALS
#-->
GGSCHEMA OGGADMIN
#<--
# on source
add credentialstore
info credentialstore domain admin
alter credentialstore add user OGGADMIN@//togoria:1521/ANDOPRD password "eXtpam!ZarghOzVe81p@1" alias ANDOPRD domain admin
dblogin useridalias ANDOPRD domain admin
# on destination
add credentialstore
info credentialstore domain admin
alter credentialstore add user OGGADMIN@//bakura:1521/EWOKPRD password "Chan8em11fUwant!" alias EWOKPRD domain admin
info credentialstore domain admin
dblogin useridalias EWOKPRD domain admin
# setup replication only for tables T0, T1 and T2
#################################################
# on source machine
dblogin useridalias ANDOPRD domain admin
list tables WOMBAT.*
add trandata WOMBAT.T0
add trandata WOMBAT.T1
add trandata WOMBAT.T2
edit params extr_w1
-------------------------------->
EXTRACT extr_w1
useridalias ANDOPRD domain admin
EXTTRAIL ./dirdat/w1
LOGALLSUPCOLS
UPDATERECORDFORMAT compact
table WOMBAT.T0;
table WOMBAT.T1;
table WOMBAT.T2;
<--------------------------------
dblogin useridalias ANDOPRD domain admin
register extract extr_w1 database
add extract extr_w1, integrated tranlog, begin now
add exttrail ./dirdat/w1, extract extr_w1, megabytes 5
start extr_w1
info extr_w1
# on source, configure the datapump
edit params dpump_w1
-------------------------------->
EXTRACT dpump_w1
PASSTHRU
RMTHOST bakura, MGRPORT 7809
RMTTRAIL ./dirdat/w1
table WOMBAT.T0;
table WOMBAT.T1;
table WOMBAT.T2;
<--------------------------------
add extract dpump_w1, exttrailsource ./dirdat/w1
add rmttrail ./dirdat/w1, extract dpump_w1, megabytes 5
start dpump_w1
info dpump_w1
# on target, setup replcat but not start it
edit params repl_w1
-------------------------------->
REPLICAT repl_w1
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/repl_w1.dsc, purge
useridalias EWOKPRD domain admin
MAP WOMBAT.T0, TARGET OTTER.T0;
MAP WOMBAT.T1, TARGET OTTER.T1;
MAP WOMBAT.T2, TARGET OTTER.T2;
<--------------------------------
dblogin useridalias EWOKPRD domain admin
add replicat repl_w1, integrated, exttrail ./dirdat/w1
# perform the intial LOAD
#########################
# Note down the current scn of the source database
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
4531616
# on destination, import tables
create public database link ANDOPRD connect to OGGADMIN identified by "Chan8em11fUwant!" using '//togoria:1521/ANDOPRD';
select * from DUAL@ANDOPRD;
# create target schema using same DDL defionotion as on source database
create user OTTER identified by "50DbGvewN00K@@)2FFGfzKg";
grant connect, resource to OTTER;
alter user OTTER quota unlimited on USERS;
impdp userid=OGGADMIN/"Chan8em11fUwant!"@//bakura:1521/EWOKPRD logfile=MY:WOMBAT_01.log network_link=ANDOPRD tables=WOMBAT.T0,WOMBAT.T1,WOMBAT.T2 flashback_scn=4531616 remap_schema=WOMBAT:OTTER
start repl_w1, aftercsn 4531616
# when LAG is catched, retart replcat
stop repl_w1
start repl_w1
info repl_w1
# add 2 tables to SYNC
######################
# on source, add 2 tables to extract & datapump
stop dpump_w1
stop extr_w1
# add new tables in extract & datapump parameter files
edit params extr_w1
-------------------------------->
EXTRACT extr_w1
useridalias ANDOPRD domain admin
EXTTRAIL ./dirdat/w1
LOGALLSUPCOLS
UPDATERECORDFORMAT compact
table WOMBAT.T0;
table WOMBAT.T1;
table WOMBAT.T2;
table WOMBAT.JOB;
table WOMBAT.T3;
<--------------------------------
# add trandata for new tables
dblogin useridalias ANDOPRD domain admin
list tables WOMBAT.*
add trandata WOMBAT.JOB
add trandata WOMBAT.T3
start extr_w1
info extr_w1
edit params dpump_w1
-------------------------------->
EXTRACT dpump_w1
PASSTHRU
RMTHOST bakura, MGRPORT 7809
RMTTRAIL ./dirdat/w1
table WOMBAT.T0;
table WOMBAT.T1;
table WOMBAT.T2;
table WOMBAT.JOB;
table WOMBAT.T3;
<--------------------------------
start dpump_w1
info dpump_w1
# once extract & datapump are up and running, we will proceed with the initial load of the nexw tables using expdp/impdp
# Note down the current scn of the source database
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
4675686
impdp userid=OGGADMIN/"Chan8em11fUwant!"@//bakura:1521/EWOKPRD logfile=MY:WOMBAT_02.log network_link=ANDOPRD tables=WOMBAT.JOB,WOMBAT.T3 flashback_scn=4675686 remap_schema=WOMBAT:OTTER
# on target, stop replicat, add new tables and start FROM THE GOOD SCN ON NEW TABLES
stop repl_w1
edit params repl_w1
-------------------------------->
REPLICAT repl_w1
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/repl_w1.dsc, purge
useridalias EWOKPRD domain admin
MAP WOMBAT.T0, TARGET OTTER.T0;
MAP WOMBAT.T1, TARGET OTTER.T1;
MAP WOMBAT.T2, TARGET OTTER.T2;
MAP WOMBAT.JOB, TARGET OTTER.JOB, filter(@GETENV ('TRANSACTION','CSN') > 4633243);
MAP WOMBAT.T3, TARGET OTTER.T3, filter(@GETENV ('TRANSACTION','CSN') > 4633243);
<--------------------------------
start repl_w1
info repl_w1
# wen lag is catched, remove SCN clauses from replicat and restart
stop repl_w1
edit params repl_w1
-------------------------------->
REPLICAT repl_w1
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/repl_w1.dsc, purge
useridalias EWOKPRD domain admin
MAP WOMBAT.T0, TARGET OTTER.T0;
MAP WOMBAT.T1, TARGET OTTER.T1;
MAP WOMBAT.T2, TARGET OTTER.T2;
MAP WOMBAT.JOB, TARGET OTTER.JOB;
MAP WOMBAT.T3, TARGET OTTER.T3;
<--------------------------------
start repl_w1
info repl_w1