1 configuring advanced replication julian dyke independent consultant web version - july 2009...

16
1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.co © 2009 Julian Dyke

Upload: dustin-carter

Post on 03-Jan-2016

218 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

1

ConfiguringAdvanced Replication

Julian Dyke

Independent Consultant

Web Version - July 2009

juliandyke.com

© 2009 Julian Dyke

Page 2: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

2

juliandyke.com

© 2009 Julian Dyke

Introduction

This presentation describes a basic Advanced Replication multi-master configuration

The configuration is between two databases DB1 and DB2 running on servers node1 and node2 respectively

One table called TEAM from the GP schema is replicated

The sample configuration was developed in Oracle 10.2.0.4 on Linux 32-bit

Page 3: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

3

juliandyke.com

© 2009 Julian Dyke

Advanced ReplicationReplicated Objects Create a user

CREATE USER gp IDENTIFIED BY gp;

GRANT DBA TO gp;

As the GP user create and populate a table to be replicated

CREATE TABLE team(

team_code VARCHAR2(3),team_name VARCHAR2(30),country_code VARCHAR2(3)

);

ALTER TABLE team ADD CONSTRAINT team_pk PRIMARY KEY (team_code);

INSERT INTO team VALUES ('MCL','McLaren','GBR');INSERT INTO team VALUES ('FER','Ferrari','FER');

COMMIT;

Note - table MUST have primary key constraint

Page 4: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

4

juliandyke.com

© 2009 Julian Dyke

Advanced ReplicationReplication Administrator On each node as SYS (SYSDBA)

create a user called REPADMIN

CREATE USER repadmin IDENTIFIED BY repadmin;

grant privileges to REPADMIN to create and manage the replicated environment

BEGINdbms_repcat_admin.grant_admin_any_schema (username=> 'REPADMIN');

END;/

Page 5: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

5

juliandyke.com

© 2009 Julian Dyke

Advanced ReplicationRegister Propagator On each node as SYS (SYSDBA)

register REPADMIN as a propagator

BEGINdbms_defer_sys.register_propagator (username => 'REPADMIN');

END;/

The propagator is responsible for propagating the deferred transaction queue to other master sites.

Page 6: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

6

juliandyke.com

© 2009 Julian Dyke

Advanced ReplicationRegister Receiver On each node as SYS (SYSDBA)

register REPADMIN as a receiver

BEGINdbms_repcat_admin.register_user_repgroup(

username => 'REPADMIN',privilege_type => 'RECEIVER',list_of_gnames => NULL

);END;/

The receiver receives the propagated deferred transactions sent by the propagator from other master sites.

Page 7: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

7

juliandyke.com

© 2009 Julian Dyke

Advanced ReplicationSchedule Purge On each node as REPADMIN

schedule an hourly purge of the deferred transactions queue

BEGINdbms_defer_sys.schedule_purge(

next_date => SYSDATE,interval => 'SYSDATE + 1/24',delay_seconds => 0

);END;

/

Successfully completed deferred transactions should be purged to reduce the size of the deferred transactions queue

Page 8: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

8

juliandyke.com

© 2009 Julian Dyke

Advanced ReplicationConfigure Network On each node add network services to

$ORACLE_HOME/network/admin/tnsnames.ora

DB1.JULIANDYKE.COM=(DESCRIPTION=

(ADDRESS= (PROTOCOL=TCP)(HOST=node1)(PORT=1521))(CONNECT_DATA = (SID=DB1))

)

DB2.JULIANDYKE.COM=(DESCRIPTION=

(ADDRESS= (PROTOCOL=TCP)(HOST=node2)(PORT=1521))(CONNECT_DATA = (SID=DB2))

)

Page 9: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

9

juliandyke.com

© 2009 Julian Dyke

Advanced ReplicationDatabase Links In DB1

As SYS (SYSDBA) create public database link e.g.

CREATE PUBLIC DATABASE LINK db2.juliandyke.com USING 'db2.juliandyke.com';

As REPADMIN create private database link e.g.

CREATE DATABASE LINK db2.juliandyke.comCONNECT TO repadmin IDENTIFIED BY repadmin;

In DB2 As SYS (SYSDBA) create public database link e.g.

CREATE PUBLIC DATABASE LINK db1.juliandyke.com USING 'db1.juliandyke.com';

As REPADMIN create private database link e.g.

CREATE DATABASE LINK db1.juliandyke.comCONNECT TO repadmin IDENTIFIED BY repadmin;

Page 10: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

10 juliandyke.co

m

© 2009 Julian Dyke

Advanced ReplicationScheduled Links In each database as REPADMIN

Define a schedule for each database link e.g. in DB1

BEGINdbms_defer_sys.schedule_push(

destination => 'db2.juliandyke.com',interval => 'SYSDATE + (1/144)',next_date => SYSDATE,parallelism => 1,execution_seconds => 1500,delay_seconds => 120

);END;/

In DB2 set the destination to db1.juliandyke.com

Page 11: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

11

juliandyke.com

© 2009 Julian Dyke

Advanced ReplicationReplication Group In DB1 only as REPADMIN

Create a replication group called REPGROUP1

BEGINdbms_repcat.create_master_repgroup (gname => 'REPGROUP1');

END;/

Page 12: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

12 juliandyke.co

m

© 2009 Julian Dyke

Advanced ReplicationReplication Objects In DB1 only as REPADMIN

Create a replication object for GP.TEAM table

BEGINdbms_repcat.create_master_repobject(

gname => 'REPGROUP1',type => 'TABLE',sname => 'GP',oname => 'TEAM',use_existing_object => TRUE,copy_rows => TRUE

);END;/

Page 13: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

13 juliandyke.co

m

© 2009 Julian Dyke

Advanced ReplicationAdd Master Databases In DB1 only as REPADMIN

Add DB2 as a second master database in REPGROUP1

BEGINdbms_repcat.add_master_database(

gname => 'REPGROUP1',master => 'db2.juliandyke.com',use_existing_objects => TRUE,copy_rows => TRUE,propagation_mode => 'ASYNCHRONOUS'

);END;/

Check new master has been added using:

SELECT dblink FROM dba_repsitesWHERE gname = 'REPGROUP1';

Page 14: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

14 juliandyke.co

m

© 2009 Julian Dyke

Advanced ReplicationGenerate Replication Support In DB1 only as REPADMIN

Generate replication support for GP.TEAM

BEGINdbms_repcat.generate_replication_support(

sname => 'GP',oname => 'TEAM',type => 'TABLE',min_communication => TRUE

);END;/

Page 15: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

15 juliandyke.co

m

© 2009 Julian Dyke

Advanced ReplicationStart Replication In DB1 only as REPADMIN

Resume replication for REPGROUP1

BEGINdbms_repcat.resume_master_activity (gname => 'REPGROUP1');

END;/

Page 16: 1 Configuring Advanced Replication Julian Dyke Independent Consultant Web Version - July 2009 juliandyke.com © 2009 Julian Dyke

16 juliandyke.co

m

© 2009 Julian Dyke

Thank you for your interest