Replikation mit SharePlex
Ausgangssituation
Im folgenden Blogeintrag sollen die wesentliche Schritte vorgestellt werden, um eine einfache Tabellenreplikation mit dem Tool SharePlex der Firma Quest aufzusetzen.
Als Ausgangspunkt dienen zwei Oracle 19c NONCDB Datenbanken, die jeweils auf einem Oracle Linux 8 Server laufen.
Die Server bzw. Datenbanken werden im Folgenden Source Host/Datenbank bzw. Target Host/Datenbank genannt.
Installation von SharePlex
Die Installation der SharePlex Software muss auf beiden Hosts erfolgen. Eine Installation kann nur mit einem gültigen Lizenz Key erfolgen, in unserem Fall war eine 30 Tage-Trial-Lizenz vorhanden.
Folgende SharePlex Security Gruppen sind anzulegen, mit denen der Zugriff zu den SharePlex Prozesse ermöglicht wird:
# groupadd spadmin
# groupadd spopr
# groupadd spview
Weiterhin muss ein SharePlex Administrator-Nutzer angelegt werden (hier splex).
Der Nutzer muss sowohl Mitglied der spadmin-Gruppe sein wie auch der Oracle-Gruppe dba.
Auf jedem Source- und Target-System muss es mindestens ein Nutzer mit Administratorrechten geben.
# useradd -g spadmin -G dba,oinstall splex
Weitere Installationsveraussetzungen für das jeweilige Betriebssystem können in der Quest-Dokumentation nachgelesen werden.
Jetzt kann die Installation von SharePlex auf beiden Hosts erfolgen.
# su - splex
$ chmod 755 SharePlex-10.1.2-b45-rhel-amd64-m64.tpm
$ ./SharePlex-10.1.2-b45-rhel-amd64-m64.tpm
SharePlex installation program:
SharePlex Version: 10.1.2
Build platform: rhel-amd64
Target platform: lin-amd64
Please enter the product directory location? /home/splex/splex/prod
Please enter the variable data directory location? /home/splex/splex/var
Please specify the SharePlex Admin group (select a number):
1. [spadmin]
2. dba
3. oinstall
Please enter the TCP/IP port number for SharePlex communications? [2100]
Preparing to install SharePlex v.10.1.2:
User: splex
Admin Group: spadmin
Product Directory: /home/splex/splex/prod
Variable Data Directory: /home/splex/splex/var
Proceed with installation? [yes]
Do you have a valid SharePlex v. 10.1.2 license? [yes]
Please enter the License key? EGS03WPS1A2F2HHWPAY0FAV3NCZY6853ZF
Please enter the customer name associated with this license key? Robotron Datenbank-Software GmbH
SharePlex v. 10.1.2 license validation successful:
Customer Name: Robotron Datenbank-Software GmbH
License Key: EGS03WPS1A2F2HHWPAY0FAV3NCZY6853ZF
Product Name: SharePlex for Oracle - RAC
License Key Type: "Trial Key"
Expires: at Midnight of Feb 03, 2022
NOTE: You can upgrade this license key or add license keys for additional machines
by executing utility /home/splex/splex/prod/install/splex_add_key.
Installation log saved to: /home/splex/.shareplex/INSTALL-SharePlex-10.1.2-2201071520.log
SharePlex v.10.1.2 installation successful.
Nach der Installation ist die Umgebung für SharePlex auf beiden Hosts anzupassen.
Hier sieht man einen Ausschnitt aus der .bashrc des Nutzers splex auf dem Source Host:
….
export TMP=/tmp
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:/usr/sbin/:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export SP_SYS_PRODDIR=/home/splex/splex/prod
export SP_SYS_VARDIR=/home/splex/splex/var
export SP_COP_TPORT=2100
export SP_COP_UPORT=2100
export SP_SYS_HOST_NAME=lehrvpc233
export PATH=$PATH:$SP_SYS_PRODDIR/bin
alias spbin='cd $SP_SYS_PRODDIR/bin'
alias spvar='cd $SP_SYS_VARDIR/'
alias splog='cd $SP_SYS_VARDIR/log'
alias spc='$SP_SYS_PRODDIR/bin/sp_ctrl'
alias gocop='$SP_SYS_PRODDIR/bin/sp_cop &'
…
Im Verzeichnis $SP_SYS_PRODDIR/bin finden wir wichtige Programme von SharePlex.
Aus diesem Verzeichnis wird das SharePlex mit dem folgenden Kommando auf beiden Hosts gestartet.
$ $SP_SYS_PRODDIR/bin/sp_cop &
Das "status" Kommando der SharePlex Command Utilities zeigt anfangs, dass nur SharePlex und das Command Utility gestartet sind, es gibt noch keine aktive Konfiguration.
[splex@lehrvpc233 bin]$ cd $SP_SYS_PRODDIR/bin
[splex@lehrvpc233 bin]$ ./sp_ctrl
*******************************************************
* SharePlex Command Utility
* Copyright 2021 Quest Software Inc.
* ALL RIGHTS RESERVED.
* Protected by U.S. Patents: 7,461,103 and 7,065,538
*******************************************************
Bad terminal type: "xterm-256color". Will assume vt100.
Anfangs ist nur SharePlex und das Command Utlity gestartet, es gibt keine aktive Konfiguration.
sp_ctrl (lehrvpc233:2100)> status
Brief Status for lehrvpc233
Process State PID Running Since
--------------- ------------------------------ -------- --------------------
Cop Running 32582 07-Jan-22 15:33:56
Cmd & Ctrl Running 32631 07-Jan-22 15:44:13
There are no active configuration files
Konfiguration
Nun werden Source- und Target-Datenbank mit dem Skript "ora_setup" für die Kommunikation mit SharePlex vorbereitet.
$ ora_setup
Welcome to the Oracle SharePlex setup process for port 2100.
This process creates tables and user accounts needed to run
Oracle SharePlex replication.
Will the SharePlex install be using a BEQUEATH connection? (Entering 'n' implies a SQL*net connection) [y] :
Enter the Oracle SID for which SharePlex should be installed [ORCL] : ORCL
Enter a DBA user for ORCL : system
Enter password for the DBA account, which will not echo :
connecting--This may take a few seconds.
validating user name and password. . . This may take a few seconds.
SharePlex objects will need to be created under a special
account. You can pick an existing user or create a new one.
Would you like to create a new SharePlex user ? [y] :
Enter username for new user [splex/splex] :
Warning: This user is now being granted unlimited tablespace.
This privilege will remain in effect until it is explicitly changed.
Granting select on sys.user$ to splex
Do you want to enable replication of tables with TDE? [n] :
To enable replication of tables with TDE in the future, please rerun ora_setup.
Setup will now install SharePlex objects.
These are the existing tablespaces.
SYSTEM SYSAUX UNDOTBS1 TEMP USERS
Enter the default tablespace for use by SharePlex [USERS] :
Enter the temporary tablespace for use by SharePlex [TEMP] :
Enter the index tablespace for use by SharePlex [ ] : USERS
Creating SharePlex objects [Installation type: Fresh]. . .
Creating SharePlex Oracle-timezone-region map . . . Done.
Creating Conflict Resolution Package . . . Done.
Creating SharePlex Dataequator package . . .
Loading Compare Package from "/home/splex/splex/prod/util/sp_deq_pkg.plb"...Done.
Loading Compare Varray Package from "/home/splex/splex/prod/util/sp_deq_v_pkg.plb"...Done.
Will the current setup for sid: [ORCL] be used as source (including cases as source for failover or master-master setups)? [y] :
Setup of SharePlex objects successful . . .
Changing SharePlex connection database . . .
Setup of ORCL completed successfully
-- The datasource identifier in the SharePlex configuration is 'o.ORCL' --
Der zuletzt ausgegeben Datasource Identifier 'o.ORCL' wird in der Konfiguration benötigt.
Für beide Datenbanken muss das "Minimal supplemental logging" aktiviert werden.
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (Primary key, Foreign Key, unique) columns;
SQL> ALTER SYSTEM SWITCH LOGFILE;
Jetzt kann die SharePlex Konfiguration durchgeführt werden.
Im entsprechenden Verzeichnis gibt es bereits Konfigurationen.
$ ls -l /home/splex/splex/var/config
…
-rw-rw-r-- 1 splex spadmin 151 Jan 7 15:22 ORA_config
…
Anzeige der Konfigurationen:
sp_ctrl (lehrvpc233:2100)> list config
File Name State Datasource
-------------------------------------------------- ---------- ---------------
ORA_config Inactive o.SOURCE_SID
Last Modified At: 07-Jan-22 15:22 Size: 151
…
Die vorhandene Konfiguration ist derzeit inaktiv.
Jetzt wird die neue Konfigurationsdatei scott_config_eine_table.lst erstellt.
Dabei soll die Tabelle MY_DEPT des Nutzers scott unter analogem Nutzer und Tabellennamen auf die Target-Datenbank repliziert werden.
$ cat /home/splex/splex/var/config/scott_config_eine_table.lst
Datasource:o.ORCL
#Source Table Destination Table Routing Map
scott.MY_DEPT scott.MY_DEPT lehrvpc234@o.ORCL
Quell- und Ziel-Tabellennamen sind im Beispiel gleich, über den Routing Map wird der Ziel Host definiert.
Jetzt ist die neue Datei im Standardverzeichnis auch sichtbar:
sp_ctrl (lehrvpc233:2100)> list config
File Name State Datasource
-------------------------------------------------- ---------- ---------------
scott_config_eine_table.lst Inactive o.ORCL
Last Modified At: 19-Jan-22 09:08 Size: 120
ORA_config Inactive o.SOURCE_SID
…
Noch sind beide Konfigurationen inaktiv.
Über das SharePlex Command Utility können verschiedene DDL Replikationsmöglichkeiten eingestellt werden.
Beim folgenden Parameter SP_OCT_REPLICATE_DDL bedeutet der Wert 3, dass auch alle DDL für die in der Konfiguration verwendeten Tabellen repliziert werden, also auch drop und create.
Das ist auch die in der Praxis am meisten eingesetzte Variante.
sp_ctrl (lehrvpc233:2100)> list param capture
…
SP_OCT_REPLICATE_DDL 3 Live
…
Mit "verify" wird die syntaktische Richtigkeit der Konfiguration geprüft.
Nach erfolgreichem Test wird die Konfiguration mit "activate" aktiviert.
sp_ctrl (lehrvpc233:2100)> verify config scott_config_eine_table.lst detail
1: Datasource:o.ORCL
2: #Source Table Destination Table Routing Map
3: "SCOTT"."MY_DEPT" "SCOTT"."DEPT" lehrvpc234@o.ORCL
Config scott_config_eine_table.lst is valid
View detailed config in /home/splex/splex/var/temp/scott_config_eine_table.lst
sp_ctrl (lehrvpc233:2100)> activate config scott_config_eine_table.lst
sp_ctrl (lehrvpc233:2100)> list config
File Name State Datasource
-------------------------------------------------- ---------- ---------------
scott_config_eine_table.lst Active o.ORCL
Last Modified At: 19-Jan-22 09:08 Size: 120
ORA_config Inactive o.SOURCE_SID
…
Das folgende Kommando gibt einen Überblick der replizierten Objekte.
sp_ctrl (lehrvpc233:2100)> show config
Tables Replicating with no key:
"SCOTT"."MY_DEPT"
File Name :scott_config_eine_table.lst
Datasource :ORCL
Activated :19-Jan-22 13:23:18
Actid :6
Total Objects :1
Total Objects Replicating :1
Total Objects Not Replicating :0
View config summary in /home/splex/splex/var/log/ORCL_config_log
Auf Source Host lehrvpc233 wurden weitere Prozesse gestartet, z.B. Capture,
ebenso auf dem Target Host lehrvpc234, z.B. Post.
sp_ctrl (lehrvpc233:2100)> status
Brief Status for lehrvpc233
Process State PID Running Since
--------------- ------------------------------ -------- --------------------
Cop Running 113119 20-Jan-22 09:33:31
Cmd & Ctrl Running 113135 20-Jan-22 09:34:28
Capture Running 113210 20-Jan-22 09:42:43
Read Running 113219 20-Jan-22 09:42:44
Export Running 113237 20-Jan-22 09:42:47
System is used as a source machine
There is 1 active configuration file
sp_ctrl (lehrvpc234:2100)> status
Brief Status for lehrvpc234
Process State PID Running Since
--------------- ------------------------------ -------- --------------------
Cop Running 109165 20-Jan-22 09:33:36
Cmd & Ctrl Running 109169 20-Jan-22 09:34:26
Import Running 109199 20-Jan-22 09:42:32
Post Running 109200 20-Jan-22 09:42:32
There are no active configuration files
Test der Replikation
Damit sind alle Voraussetzungen erfüllt, um die Replikation zu testen.
Die Ausgangssituation auf Source und Target sieht so aus:
SYS@ORCL> conn scott/tiger
Connected.
SCOTT@ORCL>select table_name from user_tables;
TABLE_NAME
----------
DEPT
SALGRADE
BONUS
EMP
Im ersten DDL Test wird die Tabelle auf der Source-Datenbank neu angelegt.
Die Tabelle wird erfolgreich auf der Target-Datenbank angelegt.
$ sqlplus scott/tiger
SCOTT@ORCL> create table my_dept as select * from dept;
-> Tabelle wird auf Target übertragen….
SCOTT@ORCL>select table_name from user_tables;
TABLE_NAME
----------
…
MY_DEPT
….
Im zweiten Test wird DML getestet.
Auch hier wurde der neue Datensatz erfolgreich repliziert.
SCOTT@ORCL>insert into my_dept values ( 60,'Schulung', 'Leipzig');
SCOTT@ORCL>commit;
-> Target - Daten angekommen !!
select * from my_dept
DEPTNO DNAME LOC
---------- -------- -------
…
60 Schulung Leipzig
Damit hat die logische Replikation fehlerfrei und schnell funktioniert.
Zusammenfassung
In diesem Blogeintrag wurden die wesentlichen Schritte vorgestellt, um mit SharePlex eine logische Tabellenreplikation initial zwischen zwei Oracle Datenbanken aufzusetzen. Die Replikation nutzt dabei auch Informationen der aktuellen Redo Log Gruppe. Die Konfiguration der zu replizierten Objekte über eine Textdatei ist sehr einfach.
Dabei erfolgt Steuerung der Replikation immer von der Quelle aus. Die Zieldatenbank ist dabei vollständig read / write geöffnet (im Unterschied z.B. zu Oracle Data Guard Konfigurationen). Falls also (versehentlich) manuell replizierten Daten auf dem Target verändert werden, so bekommt die Quelle diese Veränderung nicht mit und die Daten sind "Out of Sync". Eine Möglichkeit der Korrektur ist das komplette Löschen und Neuanlegen der betroffenen Tabelle auf Source und Target sowie das Aktivieren der vorhandenen Konfiguration, wie im Blog gezeigt.
Eine zweite Möglichkeit ist die Synchronisation der Tabellen, die "Out of Sync" sind.
Diese Funktionalität stellen wir Ihnen noch in einem kommenden Blogeintrag vor.
Kommentare
Keine Kommentare