Goldengate Best Parameters & TEST from Maclean

Sample
drop user ogg_maclean cascade;
create user ogg_maclean identified by oracle;
alter user ogg_maclean default tablespace users;
grant connect,resource to OGG_MACLEAN;

OGG_MACLEAN

maclean_press

create table maclean_press1(a int constraint key1 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press2(a int constraint key2 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press3(a int constraint key3 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press4(a int constraint key4 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press5(a int constraint key5 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press6(a int constraint key6 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press7(a int constraint key7 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press8(a int constraint key8 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press9(a int constraint key9 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);
create table maclean_press10(a int constraint key10 primary key,b varchar2(100),c varchar2(100),d date default sysdate,e date);

create or replace procedure trouble_ogg_sql as 
begin 
    for i in 1..2000000 loop
        insert into maclean_press1(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press2(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press3(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press4(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press5(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press6(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press7(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press8(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press9(a,b,c,d) values(i,i,i,sysdate);
        insert into maclean_press10(a,b,c,d) values(i,i,i,sysdate);
        if mod(i,2000)=0 then
            commit;
        end if;
    end loop;

        delete from maclean_press1 where a <= 10000;
         commit;
EXECUTE IMMEDIATE('alter table maclean_press1 move');
EXECUTE IMMEDIATE('alter index key1 rebuild');
        delete from maclean_press2 where a <= 10000;
        commit;
EXECUTE IMMEDIATE('alter table maclean_press2 move');
EXECUTE IMMEDIATE('alter index key2 rebuild');
delete from maclean_press3 where a <= 10000;
        commit;
EXECUTE IMMEDIATE('alter table maclean_press3 move');
EXECUTE IMMEDIATE('alter index key3 rebuild');
delete from maclean_press4 where a <= 10000;
    commit;        
EXECUTE IMMEDIATE('alter table maclean_press4 move');
EXECUTE IMMEDIATE('alter index key4 rebuild');
delete from maclean_press5 where a <= 10000;
commit;
EXECUTE IMMEDIATE('alter table maclean_press5 move');
EXECUTE IMMEDIATE('alter index key5 rebuild');
delete from maclean_press6 where a <= 10000;
commit;
EXECUTE IMMEDIATE('alter table maclean_press6 move');
EXECUTE IMMEDIATE('alter index key6 rebuild');
delete from maclean_press7 where a <= 10000;
commit;
EXECUTE IMMEDIATE('alter table maclean_press7 move');
EXECUTE IMMEDIATE('alter index key7 rebuild');
delete from maclean_press8 where a <= 10000;
commit;
EXECUTE IMMEDIATE('alter table maclean_press8 move');
EXECUTE IMMEDIATE('alter index key8 rebuild');
delete from maclean_press9 where a <= 10000;
commit;
EXECUTE IMMEDIATE('alter table maclean_press9 move');
EXECUTE IMMEDIATE('alter index key9 rebuild');
delete from maclean_press10 where a <= 10000;
        commit;
EXECUTE IMMEDIATE('alter table maclean_press10 move');
EXECUTE IMMEDIATE('alter index key10 rebuild');

for i in 1..1 loop
        update maclean_press1 set b=b+1 where a <= 20000;
         commit;
        update maclean_press2 set b=b+1 where a <= 20000;
        commit;
        update maclean_press3 set b=b+1 where a <= 20000;
        commit;
        update maclean_press4 set b=b+1 where a <= 20000;
    commit;        
        update maclean_press5 set b=b+1 where a <= 20000;
commit;
        update maclean_press6 set b=b+1 where a <= 20000;
commit;
        update maclean_press7 set b=b+1 where a <= 20000;
commit;
        update maclean_press8 set b=b+1 where a <= 20000;
commit;
        update maclean_press9 set b=b+1 where a <= 20000;
commit;
        update maclean_press10 set b=b+1 where a <= 20000;
        commit;
end loop;

for i in 1..1 loop
        delete from maclean_press1 where a > 30000 and a <= 40000;
         commit;
        delete from maclean_press2 where a > 30000 and a <= 40000;
        commit;
delete from maclean_press3 where a > 30000 and a <= 40000;
        commit;
delete from maclean_press4 where a > 30000 and a <= 40000;
    commit;        
delete from maclean_press5 where a > 30000 and a <= 40000;
commit;
delete from maclean_press6 where a > 30000 and a <= 40000;
commit;
delete from maclean_press7 where a > 30000 and a <= 40000;
commit;
delete from maclean_press8 where a > 30000 and a <= 40000;
commit;
delete from maclean_press9 where a > 30000 and a <= 40000;
commit;
delete from maclean_press10 where a > 30000 and a <= 40000;
        commit;
end loop;
end;
/

exec  ogg_maclean.trouble_ogg_sql;

select count(*),sum(a),sum(b) from maclean_press1;
select count(*),sum(a),sum(b) from maclean_press2;
select count(*),sum(a),sum(b) from maclean_press3;
select count(*),sum(a),sum(b) from maclean_press4;
select count(*),sum(a),sum(b) from maclean_press5;
select count(*),sum(a),sum(b) from maclean_press6;
select count(*),sum(a),sum(b) from maclean_press7;
select count(*),sum(a),sum(b) from maclean_press8;
select count(*),sum(a),sum(b) from maclean_press9;
select count(*),sum(a),sum(b) from maclean_press10;

主键更新测试(针对Quest)

create table tb1a (id number primary key, name varchar(30));
执行以下sql进行主键更新:
Begin
for i in 1..1000 loop
insert into tb1a values (i, 'aaa');
end loop;
commit;
update tb1a set id=id+100;
commit;
end;
/

select min(id),max(id),sum(id) from tb1a;

分区表

 create table maclean_partition (acct_no number(12),person varchar2(30),week_no number(2)) partition by range (week_no) (partition jan values less than(4),partition feb values less than(8),partition others values less than (maxvalue)) enable row movement;

  insert into maclean_partition values(1,'a',2);
 insert into maclean_partition values(2,'b',6);
 insert into maclean_partition values(3,'c',10);
 insert into maclean_partition values(6,'d',6);
 insert into maclean_partition values(8,'e',8);
 insert into maclean_partition values(9,'e',9);
 commit;
 update maclean_partition set person='d' where acct_no=2;
 commit;
 delete maclean_partition where acct_no=1;
 commit;

==========================================================================================================

ASM 的 tnsnames.ora 以及配置监听静态注册

===========================================================================================================

解压软件,配置ogg.sh 

export  GG_HOME=/goldengate
export  LD_LIBRARY_PATH=$ORACLE_HOME/lib   

    GGSCI> create subdirs

打开归档

Select log_mode from v$database;

shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

Select  
SUPPLEMENTAL_LOG_DATA_MIN
,SUPPLEMENTAL_LOG_DATA_PK
,SUPPLEMENTAL_LOG_DATA_UI
,SUPPLEMENTAL_LOG_DATA_FK
,SUPPLEMENTAL_LOG_DATA_ALL from v$database;

alter database add supplemental log data ;
--alter database add supplemental log data (primary key, unique,foreign key) columns;
alter system switch logfile;

Select  
SUPPLEMENTAL_LOG_DATA_MIN
,SUPPLEMENTAL_LOG_DATA_PK
,SUPPLEMENTAL_LOG_DATA_UI
,SUPPLEMENTAL_LOG_DATA_FK
,SUPPLEMENTAL_LOG_DATA_ALL from v$database;

Alter database force logging;

创建ogg 用户

--create tablespace
create tablespace goldengate datafile  size 1024M ;

-- Create the user 
create user goldengate identified by &A default tablespace goldengate;

-- Grant role privileges 
grant  resource, connect, dba to goldengate;

===========================================================================================================
[oracle@vrh1 ~]$ cat ogg.sh

export ORACLE_HOME=/s01/orabase/product/11.2.0/dbhome_1
export ORACLE_SID=VRAC1
export LD_LIBRARY_PATH=/ogg:$ORACLE_HOME/lib:$ORACLE_HOME/lib32
export PATH=/home/oracle/ogg:$PATH

cd /home/oracle/ogg
ggsci 

===========================================================================================================

./GLOBALS

add checkpointable ckpt

GGSCHEMA goldengate
CheckpointTable goldengate.ckpt
UnlockedTrailFiles

===========================================================================================================

MGR

Port 7809
userid goldengate , password oracle
DYNAMICPORTLIST 9101-9356
CheckMinutes 10
PurgeOldExtracts ./dirdat/*, UseCheckpoints, MinKeepHours 96
PurgeMarkerHistory MinKeepDays 3, MaxKeepDays 7, FrequencyMinutes 120
AutoRestart ER *, WaitMinutes 5, Retries 3
LagInfoMinutes 0
LagReportMinutes 10

===========================================================================================================

源端DDL

cd ogg

 GRANT EXECUTE ON UTL_FILE TO goldengate;

  ALTER SYSTEM SET RECYCLEBIN = OFF SCOPE = BOTH;

   @marker_setup.sql
    @ddl_setup.sql
    @role_setup.sql

    GRANT GGS_GGSUSER_ROLE TO goldengate;
     @ddl_enable.sql
     @ddl_pin.sql goldengate
     @sequence.sql

dblogin userid  goldengate ,     password oracle
add checkpointtable ckpt

ADD TRANDATA XX.XX

===========================================================================================================

add extract ext01, tranlog , begin now , threads 2 
add exttrail ./dirdat/me , extract ext01 , megabytes 200

extract ext01
SETENV (ORACLE_HOME="/s01/orabase/product/11.2.0/dbhome_1" )
SETENV (ORACLE_SID="VRAC1")
--TRANLOGOPTIONS EXCLUDEUSER <Replicat username>
--CacheMgr CacheDirectory ./dirtmp 51980MB, CacheDirectory ./dirtmp/goldengate_tmp
userid goldengate , password oracle
--TranLogOptions ExcludeUser goldengate
--TranLogOptions AltArchivedLogFormat Instance NETDB1 %t_%s_%r.dbf
--TranLogOptions AltArchivedLogFormat Instance NETDB2 %t_%s_%r.dbf
--TranLogOptions AltArchiveLogDest Primary Instance NETDB1 /arch1, AltArchiveLogDest Instance NETDB2 /arch2
tranlogoptions asmuser sys@ASM , ASMPASSWORD oracle
--TRANLOGOPTIONS DBLOGREADER, DBLOGREADER BUFSIZE [x], BUFSIZE [y]
ThreadOptions MaxCommitPropagationDelay 10000 IOLatency 3000
exttrail ./dirdat/me
DDL Include ALL
--DDL INCLUDE ALL, EXCLUDE OBJNAME "<schema name>.<object name> "
DDLOptions AddTranData, Report
DDLOptions NoCrossRename, Report
Table ogg_maclean.*;

-- Prevent data looping. This is generally used in bi-directional
-- configuration
TRANLOGOPTIONS EXCLUDEUSER <Replicat username>
===========================================================================================================
add extract pump01, EXTTRAILSOURCE ./dirdat/me 
add rmttrail ./dirdat/mr , extract pump01, megabytes 200

pump 

extract pump01
SETENV (ORACLE_HOME = "<Oracle home path>" )
SETENV (ORACLE_SID="<Oracle sid>")

passthru
rmthost 192.168.1.179 , mgrport 7809 
rmttrail ./dirdat/mr
--DISCARDFILE <diacard file path/<discard file name.dsc>, APPEND Megabytes <n>
table ogg_maclean.*;

===========================================================================================================

add replicat rep01, exttrail ./dirdat/mr

replicat 

replicat rep01
SETENV (ORACLE_HOME = "/s01/oracle/app/oracle/product/11.2.0/dbhome_1" )
SETENV (ORACLE_SID="PRODA")
SETENV (NLS_LANG ="American_America.AL32UTF8")
userid goldengate , password oracle
--HandleCollisions
AssumeTargetDefs
DiscardFile ./dirrpt/rep1.dsc, APPEND Megabytes 800 ,  Purge
DBOptions DeferrefConst
DBOptions SuppressTriggers    
MaxTransOps 10000
GroupTransOps 1000
SQLEXEC "ALTER SESSION SET COMMIT_WRITE = BATCH,NOWAIT"
BatchSQL
--DDL INCLUDE ALL, EXCLUDE OBJNAME "<schema name>.<object name> "
DDLOptions Report
DDLError 24344 Ignore
DDLError 4052 Ignore
DDLError 955 Ignore
DDLError 1408 Ignore
DDLError 911 Ignore
AllowNoOpUpdates
CheckSequenceValue
--IGNORETRUNCATES
--DEFERAPPLYINTERVAL 1 MINUTES
-- Sequence testgg.*, Target testgg.*
MapExclude ogg_maclean.SYS_EXPORT_SCHEMA* ;
map ogg_maclean.* , target ogg_maclean.* ;

--The SUPmaclean_pressTRIGGERS parameter prevents triggers from firing on target objects that are configured for replication with Oracle GoldenGate. This alleviates the need to manually disable triggers and constraints.  To use this option, the Replicat user must be an Oracle Streams administrator which can be granted by invoking dbms_goldengate_auth.grant_admin_privilege.

================================================================================================

DROP TABLE gg_test;
CREATE TABLE gg_test
(
    a        number(10),
    b             VARCHAR20(30),
        PRIMARY KEY (a)
        );
4.8    100字段表测试脚本
create table table_100cols
(
a1        number(10) not null,
a2        number(10),
a3        number(10),
a4        number(10),
a5        number(10),
a6        number(10),
a7        number(10),
a8        number(10),
a9        number(10),
a10       number(10),
a11       number(10),
a12       number(10),
a13       number(10),
a14       number(10),
a15       number(10),
a16       number(10),
a17       number(10),
a18       number(10),
a19       number(10),
a20       number(10),
a21       number(10),
a22       number(10),
a23       number(10),
a24       number(10),
a25       number(10),
a26       number(10),
a27       number(10),
a28       number(10),
a29       number(10),
a30       number(10),
a31       number(10),
a32       number(10),
a33       number(10),
a34       number(10),
a35       number(10),
a36       number(10),
a37       number(10),
a38       number(10),
a39       number(10),
a40       number(10),
a41       number(10),
a42       number(10),
a43       number(10),
a44       number(10),
a45       number(10),
a46       number(10),
a47       number(10),
a48       number(10),
a49       number(10),
a50       number(10),
a51       number(10),
a52       number(10),
a53       number(10),
a54       number(10),
a55       number(10),
a56       number(10),
a57       number(10),
a58       number(10),
a59       number(10),
a60       number(10),
a61       number(10),
a62       number(10),
a63       number(10),
a64       number(10),
a65       number(10),
a66       number(10),
a67       number(10),
a68       number(10),
a69       number(10),
a70       number(10),
a71       number(10),
a72       number(10),
a73       number(10),
a74       number(10),
a75       number(10),
a76       number(10),
a77       number(10),
a78       number(10),
a79       number(10),
a80       number(10),
a81       number(10),
a82       number(10),
a83       number(10),
a84       number(10),
a85       number(10),
a86       number(10),
a87       number(10),
a88       number(10),
a89       number(10),
a90       number(10),
a91       number(10),
a92       number(10),
a93       number(10),
a94       number(10),
a95       number(10),
a96       number(10),
a97       number(10),
a98       number(10),
a99       number(10),
a100      number(10)
)

alter table table_100cols
  add constraint PK_100cols primary key (a1)
  using index 
  tablespace CS_stat
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

  alter table table_100cols
  add constraint PK_100cols primary key (a1)
  using index 
  tablespace users
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

  insert into table_100cols values(1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100);
4.9    性能测试脚本
create sequence seq_gg start with 1 INCREMENT BY 1 MAXVALUE 999999999 cache 500000;

create or replace procedure gg_insert
is
begin
    for i in 1..1000000 loop
        insert into CM_USER (USER_ID,REGION_CODE,ACC_ID,CAUT_ID,USER_STATUS,USER_TYPE)
        values(seq_gg.nextval,571,1111,2222,3,4);
        if mod(i,1000)=0 then
            commit;
        end if;
    end loop;
    commit;
end;
/

create or replace procedure gg_update
is
CURSOR c_gg IS
    SELECT rowid FROM CM_USER;
v_rowid UROWID;
i number(10);
BEGIN
    OPEN c_gg;
    for i in 1..1000000 loop
        FETCH c_gg INTO v_rowid;
        EXIT WHEN c_gg%NOTFOUND;

        UPDATE CM_USER SET ACC_ID=seq_gg.nextval WHERE rowid = v_rowid;
        if mod(i,1000)=0 then
            commit;
        end if;
    end loop;
    commit;
    CLOSE c_gg;
END;
/

create or replace procedure gg_delete
is
begin
    for i in 1..1000 loop
        delete from  CM_USER where rownum<1001;
        commit;
    end loop;
    commit;
end;
/
    attachment: ogg parameters
原文地址:https://www.cnblogs.com/macleanoracle/p/2968108.html