Anleitung zum Aufsetzen einer Multi-Master-Replikation

Werbung
Anleitung zum Aufsetzen einer Multi-Master-Replikation
anhand eines Beispiels (Oracle9i)1
Johann Murauer, 6.August 2004
Umgebung und DBServer Version
Es werden zwei Rechner verwendet: der T-JMU-1 (Windows XP, engl.) und ENTRUST (Win
2000, deutsch). Diese beiden Rechner müssen sich selbstverständlich pingen können.
Auf beiden Rechnern ist Oracle9i (Enterprise Edition) installiert. Die Replikation funktioniert
nur mit der Enterprise Edition.
Wie bestimmt man, ob man die richtige Oracle-Version installiert hat? Man verbindet sich als
SYS zur einer bestehenden DB und sieht sich den Inhalt der Tabelle v$version an. Dort findet
man die Antwort:
conn sys/oracle as sysdba
select * from v$version
BANNER
---------------------------------------------------------------Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0
Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
5 rows selected.
Datenbanken erzeugen
Ehe man replizieren kann, braucht man die entsprechenden Datenbanken. Wenn man nicht
bestehende verwenden will, muss man neue erzeugen. Da es dabei einiges zu beachten gibt,
führe ich es hier durch. Ich nehme an, der Rechner T-JMU-1 steht in Bamako und der
Rechner ENTRUST steht in Mopti2.
Entsprechend vergebe ich die Datenbanknamen: T-JMU-1 erhält die Datenbank BAM,
ENTRUST erhält die Datenbank MOP.
Neue Datenbanken werden mit dem Database Configuration Assistant erzeugt. Schritt 1
Create Database. Im Schritt 2 wird die Art der zu erzeugenden DB ausgewählt. Dabei werden
nur einige Parameter in den Oracle – INI – Files gesetzt und diese Eintstellungen können auch
1
Ein anderer Titel wäre: „Oracle Replikation für Dummies – gezeigt an einem Beispiel aus Mali“
Diese Städte wurden deshalb gewählt, um der Vorliebe gewisser Personen für malische Städte gerecht zu
werden. Allerdings erlaube ich mir eine Abweichung von Lieblingsort Timbuktu da mir das schon ziemlich
langweilig erscheint und auch Geographiekenntnisse erweiterungswürdig sind.
2
Seite 1 von 31
später wieder geändert werden (sofern man weiß, welcher Parameter was bedeutet und
welcher Werte er annehmen kann). Hier ist es wichtig „Transaction Processing“ auszuwählen,
da ansonsten Parameter gesetzt werden, die dann später einer Replikation im Wege stehen
(also nicht „General Purpose“ wie man vielleicht vermuten könnte).
Seite 2 von 31
Im Schritt 3 muss der DB Name eingeben werden. Hierbei ist es ganz wichtig, eine Extension
anzugeben (hier: WORLD). Die SID ist üblicherweise der Global Database Name ohne
Extension. Zwar sollte es auch möglich sein, ohne diese Extension zu arbeiten. Aber hier
traten dann Probleme auf (es wurde an einigen Stellen immer eine unbrauchbare DefaultExtension angehängt, was wir nicht abstellen konnten).
Im Schritt 4 hat man einen Dedicated Server auszuwählen. Im nächsten Schritt wird die
Shared Pool Size auf 100 MByte geändert. Dann wird „All Initialization Parameters“ gewählt
– es müssen ein paar Einstellungen kontrolliert bzw. manuell angepasst werden.
Die wichtigste Einstellung ist „global_names“ – sie ist von FALSE auf TRUE zu ändern und
das Häckchen ist zu setzen.
Dann sind noch diese Parameter zu prüfen:
distributed_transaction
db_domain
open_links
parallel_max_server
replication_dependency_tracking
10 hier darf kein Häckchen sein !!!
WORLD
4
10
TRUE
Die numerischen Werte hängen von der CPU – Anzahl u.a. ab. Sie dürfen / sollten aber nicht
0 oder riesig groß sein. WORLD ist die vorhin eingegebene Extension.
Seite 3 von 31
Seite 4 von 31
Seite 5 von 31
Nach ein paar „OK-Buttons“ kommen wir zum abschließenden Schritt:
Sollte es aussehen, als würde die Applikation hängen, dann kann das einen dummen Grund
haben: es ist ein Fehler (etwa aufgrund falsch gesetzter Parameter), es wird dies in einer
Dialogbox ausgegeben aber diese ist nicht an der Oberfläche sichtbar sondern wartet unter
dem anderen Fenster auf OK / Abbrechen.
Seite 6 von 31
Diesen Fehler kann man nicht ignorieren. Bei den Parameter würde das entsprechende
Häckchen nicht entfernt. Also: ein paar Schritte zurück, Häckchen entfernen und alles
nochmal durchführen.
Wenn die DB erzeugt werden konnte, muss man die Passwörter für SYS und SYSTEM
eingeben.
Randbemerkung: der SYS ist mächtiger als der SYSTEM, die Rolle SYSDBA ist mächtiger
als die Rolle SYSOPER. Eigentlich braucht man als den SYSTEM gar nicht wenn man die
Sicherheit einmal außer Acht lässt.
Randbemerkung: Wir hier in Linz stellten fest, dass wir auf bestimmten Rechner unter Win
2000 Oracle nicht problemlos installieren und betreiben konnten. Mögliche Erklärung: Unter
Win 2000 gibt es bei bestimmten Pentium Prozessoren Probleme – aber auch entsprechende
Patches.
Nachdem nun die DB erzeugt wurde vergessen wir den Database Configuration Assistant und
gehen zur Oracle Enterprise Manager Console.
Seite 7 von 31
Wir binden die neue Datenbank BAM ein (man beachte, dass die SID richtig eingegeben
wird). Unter bestimmten Vorraussetzungen wir die DB automatisch erkannt und eingebunden.
Dennoch ist das Wissen um die manuelle Einbindung nützlich (wir brauchen es später).
Und wir prüfen gleich, ob wir uns als SYS (dieser hat nur die Rollen SYSDBA und
SYSOPER) einloggen könne.
Wir sind nun einmal auf der einen Seite T-JMU-1 / BAM fertig.
Wir gehen zum Rechner ENTRUST und erzeugen dort die Datenbank MOP (Globaler
Datenbank Name: MOP.WORLD, SID: MOP) ganz analog.
Randbemerkung: Bei dieser Form der Erzeugung wird der Replikationssupport bei den
jeweiligen DBs gleich mit installiert. Wenn das nicht der Fall sein sollte, kann dies
nachträglich durch das Skript (hier in meiner Umgebung)
E:\oracle\ora92\rdbms\admin\catrep.sql erledigt werden. Das habe ich aber nicht getestet.
Man kann überprüfen, ob die Replikation installiert ist, indem man in der DB (als SYS) im
Schema SYS die Views aufmacht und kontrolliert, ob die DEFxxx Views vorhanden sind.
Seite 8 von 31
Randbemerkung: In E:\oracle\admin\BAM (BAM oder ein anderer DB-Name) findet man log
und trace files, die bei administrativen Tätigkeiten erstellt werden. So findet man auch ein
init.ora.75200492652. Das ist ein Binärfile mit den vorgenommen Einstellungen und kann mit
WordPad gelesen werden. In E:\oracle\ora92\database findet man SPxxxx.ORA Files für jede
Datenbank (SP Server Paramter). Auch diese Files sind Binär aber können mit WordPad
gelesen und analysiert werden.
Datenbanken verbinden
Wenn wir damit fertig sind, habe wir also zwei „nackte“ Datenbanken an zwei Orten. Wir
wollen diese nun verbinden.
In E:\oracle\ora92\network\admin findet man wichtige Dateien für die Netzwerkkommunikation und Konfiguration. Für uns geht es darum, dass a) T-JMU-1 auf seine
„gegenüberliegende“ Datenbank MOP zugreifen kann und dass b) ENTRUST auf seine
„gegenüberliegende“ Datenbank BAM zugreifen kann.
Wir öffnen auf T-JMU-1 im Verzeichnis E:\oracle\ora92\network\admin das File
tnsnames.ora und kopieren die Sektion
BAM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = t-jmu-1)(PORT = 1521))
Seite 9 von 31
)
(CONNECT_DATA =
(SID = BAM)
(SERVER = DEDICATED)
)
)
Nun öffnen wir auf ENTRUST in D:\oracle\ora92\network\admin auch die Datei
tnsnames.ora und fügen die obige Sektion BAM = ein. Aus dieser Datei kopieren wir die
Sektion
MOP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = t-entrust-1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MOP.WORLD)
)
)
und fügen diese in tnsnames.ora von T-JMU-1 ein. Jeder der beiden Rechner weiß nun, wo
die andere DB sich befindet.
Wir überprüfen dass, indem wir bei jedem Rechner im Oracle Enterprise Managager die
„gegenüberliegende“ Datenbank einbinden und uns bei ihr als SYS anmelden.
Im Prinzip könnten wir nun vom Enterprise Manager eines einziges Rechners alles erledigen
– da dass aber ein paar Probleme aufwerfen kann (und schnelle unübersichtlich wird),
verzichten wir einstweilen darauf und arbeiten weiterhin auf beiden Rechnern.
REPADMIN einrichten
Seite 10 von 31
Der nächste Schritt besteht darin, auf in beiden Datenbanken eine Benutzer REPADMIN mit
bestimmten Rechten einzurichten. Hier der Rechner T-JMU-1 mit der Datenbank BAM:
Bei BAM als SYS angemeldet, Security, Users, Create, den Namen REPADMIN und das
Passwort eingeben. Der Tablespace sollte USER bzw. TEMP sein. Dann zu den Role
wechseln. REPADMIN muss die Rollen CONNECT und RESOURCE erhalten. Das
Häckchen bei Admin Option braucht nicht gesetzt sein, es würde nur ermöglichen, dass
REPADMIN diese Rolle weiter geben kann. Nun zu System wechseln und diese Rechte noch
vergeben:
COMMENT ANY TABLE
CREATE ANY SYNONYM (eventuell überflüssig)
EXECUTE ANY PROCEDURE
LOCK ANY TABLE
SELECT ANY DICTIONARY
Seite 11 von 31
Nachdem REPADMIN erfolgreich erzeugt wurde, braucht er noch etwas „finetuning“. Dies
wird entweder mit sqlplus oder mit dem SQL *Pluss Worksheet vorgenommen (SQL
scratchpad geht hier nicht).
Anmelden an die DB als SYS mit
Seite 12 von 31
conn sys@bam/oracle as sysdba
(ja, ja, mein Passwort in dieser Testumgebung ist immer und überall oracle).
Das Statement
execute dbms_repcat_admin.grant_admin_schema('REPADMIN')
eintippen und mit F5 ausführen.
REPADMIN muss noch als Propagator eingerichtet werden. Das geschieht durch:
execute dbms_defer_sys.register_propagator('REPADMIN')
In beiden Fällen muss die Ausgabe „PL/SQL procedure successfully completed.“ lauten.
Genau das gleiche muss nun noch auf den zweiten Rechner ENTRUST, Datenbank MOP
durchgeführt werden. Wichtig: auch dort muss der Name REPADMIN sein und dann das
finetuning nicht vergessen:
conn sys@mop/oracle as sysdba
execute dbms_repcat_admin.grant_admin_schema('REPADMIN')
execute dbms_defer_sys.register_propagator('REPADMIN')
So, dass war die Theorie. Die Praxis zeigte, dass ein solcher REPADMIN zu wenige Rechte
hat. Daher geht später beim Erzeugen der Master-Gruppen das Generieren der rep-Daten
schief. Man kann entweder später oder jetzt gleich die erforderlichen Rechte hinzufügen.
Jeder REPADMIN weist daher folgende Konfiguration auf (das sind sicher mehr als die
benötigten Rechte, das minimale Set ist mir im Moment nicht bekannt):
Roles:
CONNECT / RESOURCE / SELECT_CATALOG_ROLE
System Privileges:
ALTER ANY CLUSTER
ALTER ANY INDEX
ALTER ANY PROCEDURE
ALTER ANY SEQUENCE
ALTER ANY SNAPSHOT
ALTER ANY TABLE
ALTER ANY TRIGGER
ALTER ANY TYPE
ALTER SESSION
COMMENT ANY TABLE
CREATE ANY CLUSTER
CREATE ANY INDEX
CREATE ANY INDEXTYPE
CREATE ANY OPERATOR
CREATE ANY PROCEDURE
CREATE ANY SEQUENCE
CREATE ANY SNAPSHOT
CREATE ANY SYNONYM
CREATE ANY TABLE
CREATE ANY TRIGGER
Seite 13 von 31
CREATE ANY TYPE
CREATE ANY VIEW
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE PUBLIC SYNONYM
CREATE SESSION
DELETE ANY TABLE
DROP ANY CLUSTER
DROP ANY INDEX
DROP ANY INDEXTYPE
DROP ANY OPERATOR
DROP ANY PROCEDURE
DROP ANY SEQUENCE
DROP ANY SNAPSHOT
DROP ANY SYNONYM
DROP ANY TABLE
DROP ANY TRIGGER
DROP ANY TYPE
DROP ANY VIEW
DROP PUBLIC SYNONYM
EXECUTE ANY PROCEDURE
INSERT ANY TABLE
LOCK ANY TABLE
SELECT ANY DICTIONARY
SELECT ANY TABLE
UNLIMITED TABLESPACE
UPDATE ANY TABLE
Object Privileges (in Security, ... sichtbar)
EXECUTE ON SYS.DBMSOBJGWRAPPER
EXECUTE ON SYS.DBMS_DEFER_INTERNAL_QUERY
EXECUTE ON SYS.DBMS_DEFER_INTERNAL_SYS
EXECUTE ON SYS.DBMS_DEFER_QUERY
EXECUTE ON SYS.DBMS_DEFER_SYS
EXECUTE ON SYS.DBMS_INTERNAL_REPCAT
EXECUTE ON SYS.DBMS_OFFLINE_OG
EXECUTE ON SYS.DBMS_OFFLINE_SNAPSHOT
EXECUTE ON SYS.DBMS_RECTIFIER_DIFF
EXECUTE ON SYS.DBMS_REPCAT
EXECUTE ON SYS.DBMS_REPCAT_DECL
EXECUTE ON SYS.DBMS_REPCAT_RGT
EXECUTE ON SYS.DBMS_REPCAT_UTL
EXECUTE ON SYS.DBMS_SNAPSHOT
EXECUTE ON SYS.DBMS_SAAP_REPAPI
SELECT ON SYS.DEFLOB
SELECT ON SYSTEM.DEF$_LOB
Consumer Groups Granted
kein Eintrag
Seite 14 von 31
Datenbanklinks erstellen
Als nächsten müsse die beiden Datenbank für den Benutzer REPADMIN verbunden werden
(die Verbindung via tnsnames.ora war nur der erste Schritt). Wiederum muss dies auf beiden
Seiten vorgenommen werden. Wir beginnen mit T-JMU-1 und BAM. Auf jeder Seite
brauchen wir zwei Links, einen öffentlichen und einen privaten (der REPADMIN gehört).
Der öffentliche Link von BAM zu MOP: Man muss als SYS an BAM angemeldete sein, man
wählt den Menüpunkt Distributed – Database Links aus Create und gibt den vollständigen
Namen der remote DB (MOP.WORLD) ein. Als Benutzer wird Connected User gewählt und
als Service Name aben MOP. Die Checkbox „public“ wird noch angekreuzt.
Der private Link von BAM zu MOP: Dafür melden wir uns als REPADMIN an BAM an. Der
Link erhält den gleichen Namen (MOP.WORLD), auch der Service ist identisch. Aber: public
darf nicht gewählt werden und es wird ein Fixed User (REPADMIN mit Passwort) verwendet.
Seite 15 von 31
Seite 16 von 31
Bei Erfolg sieht man dann einen Link unter Public und einen unter REPADMIN.
Nun gehen wir zum Rechner ENTRUST und der Datenbank MOP und erzeugen dort Links
auf T-JMU-1 mit seiner Datenbank BAM.
Seite 17 von 31
Testen der Links
Ich gehe zu T-JMU-1 (die DB MOP braucht nicht im Enterprise Manager eingebunden sein),
öffne ein SQL *Plus Worksheet und melde mich an MOP an. Dann setze ich ein SELECT
Statement an auf die Tabelle dual über den Link mop.world. Dass muss funktionieren.
conn sys@mop/oracle as sysdba
select * from [email protected]
Ich melde mich an BAM als REPADMIN an und setze ein SELECT auf den Link zu MOP ab.
conn repadmin@bam/oracle
select * from [email protected]
Diese Tests kann man analog auf der anderen Seite durchführen. Ich verwende die Tabelle
DUAL, weil es sie immer und überall gibt. Auch eine andere Tabelle wäre natürlich möglich.
Benutzer anlegen
Das Replizieren geht am einfachsten, wenn es auf beiden Seiten (BAM bzw. MOP) den
gleichen Benutzer gibt. Ich wähle hier den Benutzer TRAORE3.
3
Da wir nun schon einmal in Mali sind verwende ich diesen Namen, da er eben in Mali häufig vorkommt. Man
denke nur an den Ex-Präsidenten Moussa Traoré oder an den berühmten Traoré Boubacar (Musiker) genannt Kar
Kar und seinem wunderbaren Mali Blues.
Seite 18 von 31
Also, zu T-JMU-1, als SYS bei BAM angemeldet, Security Users Create:
Diese Rollen braucht er (wir geben ihm sehr wenig, es ist ja nur ein ganz normaler
Anwender):
Seite 19 von 31
Und dieses eine System-Recht braucht er:
Voilà, der Benutzer ist fertig angelegt.
Nun sollte der Benutzer natürlich auch zu replizierende Objekte haben. Wir halten es ganz
einfach und wollen ihm dazu nur eine einzige Tabelle geben. Dieser erzeugen wir (auf beiden
Seiten), indem wir uns als TRAORE anmelden (SQL *Plus Worksheet) und ein CREATE
absetzen:
conn traore/oracle
create table repdata (myid number, field_a varchar2(100), field_b varchar2(100))
So, nun ab zum Rechner ENTRUST, als SYS bei MOP angemeldet, Security Users Create einen identischen Benutzer TRAORE anlegen.
Erzeugen der Master-Gruppen
Nun müssen wir uns für einen Rechner (bzw. DB) entscheiden, der wir den Vorrang geben.
Das, was wir nun machen, kann auf den anderen Rechner nicht mehr verändert werden. Wir
entscheiden uns für T-JMU-1 und die Datenbank BAM4.
Also gehen wir zu T-JMU-1, binden BAM und MOP ein und melden uns an BAM als
REPADMIN an.
4
Entsprechend der in Mali vorhanden französicher Tradition entscheiden auch wir uns für den Zentralismus, d.h.
wir bleiben in Bamako und nicht in diesem Provinznest Mopti – die geschichtliche Bedeutung von Mopti hin
oder her.
Seite 20 von 31
Wir erzeugen eine neue Master Gruppe mit dem Namen REPGRP. Als Objekt geben wir die
Tabelle von TRAORE hinzu. Man sieht hier übrigens, dass man nicht alles replizieren kann –
z.B. keine Sequences!
Nun sehen wir diese Dlg-Box:
Seite 21 von 31
Der Grund dafür dürfte sein, dass wir bei der Erstellung der Tabelle keine Primary Key
angegen habe (wir wählen MYID aus).
Wenn wir das alles so hinzugefügt habe, sehen wir uns einmal unter Adminstration die
Topologie an. Da sehen wir unsere zwei Rechner.
Seite 22 von 31
Nun müssen wir unser Replikation noch aktivieren und mit einem Zeitplan versehen. Dazu
gehen wir wieder zurück zur Mastergruppe, Objects und betätigen den Button Generate
Replication Support (das Bild zeigt den Zustand nach erfolgreicher Ausführung). Wenn es
hierbei zu einem Fehler kommt, dann hat der REPADMIN eventuell nicht die erforderlichen
Rechte bzw. es hat was mit der zu replizierenden Tabelle (z.B. Unterschiede).
Fortgeschrittene Anwender können auch die Tabelledefinition replizieren, d.h. die Tabelle auf
der anderen Seite braucht nicht zu existieren sondern sie wird durch den
Replikationsmechanismus erzeugt.
Seite 23 von 31
Wenn es hierbei zu einem Fehler gekommen ist, gibt es einen nützlichen Button unter
General. Unter View Administrative Request sieht man eine Art von Error – Log. Nach dem
erfolgreichen letzten Schritt muss die Replikation auch noch gestartet werden bzw. eine
gestartete Replikation kann angehalten werden. Dazu gibt es unter General den Button Submit
Start / Stop Request.
Seite 24 von 31
Wir haben noch eine Zeitplan für die Ausführung festzulegen bzw. die Default-Einstellungen
anzupassen. Dazu gibt es mehrere Möglichkeiten. Eine ist unter Administration – Schedule zu
finden. (Eine andere Möglichkeit besteht darin, den Zeitplan gleich bei der Erstellung des
Objektes / Master Gruppe anzugeben. SQL und ORACLE Gurus können das auch via SQL
machen.). Im unten stehenden Beispiel habe ich eine Minute eingegeben. Das ist natürlich ein
unrealistisch kurzes Intervall aber für unsere Testzwecke genau richtig.
Seite 25 von 31
Das ist aber erst die halbe Sache. Man muss auch bei der gegenüberliegenden Datenbank(en)
dein Schedule konfigurieren bzw. einschalten. Ansonsten geht der Datentransfer nur in eine
Richtung.
Test der Datenübertragung
Wir gehen in der Datenbank BAM, Schema TRAORE, Tabelle REPDATA und fügen eine
Satz ein:
(Apply nicht vergessen)
Dann gehen wir zur Datenbank MOP, Schema TRAORE, Tabelle REPDATA und nach ca.
einer Minute sehen wir das da:
Seite 26 von 31
Weil es so viel Spaß macht und wir auch ein Erfolgserlebnis verspüren wollen, testen wir
auch den den umgekehrten Weg – von MOP zu BAM.
Sollten die Daten nur in eine Richtung übertragen werden, dann ist möglicherweise nur ein
Schedule aktiviert (nur OK aber nicht Apply gedrückt?). In Prinzip ist aber die
Datenübertragung in beiden Richtungen fertig konfiguriert. Wenn wir eine Satz in einer
Tabelle löschen, dann wird er auch in der anderen Tabelle entfernt – die beiden Tabellen
werden also immer auf den gleichen Stand gehalten.5
Replikationskonflikte
Ich will ich einen Replikationskonflikt provozieren. Zuerst lösche ich einemal alle Einträge
auf einer Seite (z.B. BAM) inder Tabelle REPDATA. Nach kurzer Zeit verschwinden auch
die Einträge in der gegenüberliegenden Datenbank.
Nun geht es los:
Zuerst wird bei beiden Tabellen auf MYID ein UINIQUE Constraint gelegt. Dann auf beiden
Seiten einen Satz mit der gleichen MYID eingefügen, schnell hintereinander Apply drücken
und die Replikation abwarten.
5
Und in Mali würde man dazu vielleicht sagen: Bolo fila bè nyògòn ko ka jè (Bambara, eine wichtige
Umgangssprache in Mali: „Zwei Hände waschen einander um rein zu werden“ eine Hand wäscht die andere.)
Seite 27 von 31
Auch nach einiger Zeit tauchen die Daten nicht auf der gegenüberliegenden Seite auf –
sondern in jeder DB steht nur der eigene Datensatz.
Auf jeder Seite findet man unter Administration – Error die entsprechenden Error – Einträge.
Seite 28 von 31
conn repadmin@bam/oracle
select * from deferror
Das liefert auch eine Fehlerbeschreibung:
DEFERRED_TRAN_ID
ORIGIN_TRAN_ID
START_TIM ERROR_NUMBER
ERROR_MSG
ORIGIN_TRAN_DB
CALLNO DESTINATION
RECEIVER
-----------------------------5.3.666
MOP.WORLD
6.14.663
0 BAM.WORLD
05-AUG-04
100
ORA-01403: no data found
REPADMIN
10.5.640
MOP.WORLD
9.16.657
0 BAM.WORLD
05-AUG-04
100
ORA-01403: no data found
REPADMIN
5.12.667
MOP.WORLD
3.13.639
0 BAM.WORLD
05-AUG-04
-1
ORA-00001: unique constraint (TRAORE.REPDATA_UK11091718022153) violated
ORA-02063: preceding line from BAM
Seite 29 von 31
REPADMIN
3 rows selected.
Das kann man auch auf der anderen Seite machen, dort sieht man es umgekehrt:
DEFERRED_TRAN_ID
ORIGIN_TRAN_DB
ORIGIN_TRAN_ID
CALLNO DESTINATION
START_TIM ERROR_NUMBER
ERROR_MSG
RECEIVER
-----------------------------8.16.661
BAM.WORLD
6.3.653
0 MOP.WORLD
05-AUG-04
100
ORA-01403: no data found
REPADMIN
5.5.685
BAM.WORLD
8.14.637
0 MOP.WORLD
05-AUG-04
100
ORA-01403: no data found
REPADMIN
6.9.665
BAM.WORLD
1.21.648
0 MOP.WORLD
05-AUG-04
-1
ORA-00001: unique constraint (TRAORE.REPDATA_UK11091718071054) violated
ORA-02063: preceding line from MOP
REPADMIN
3 rows selected.
Die Replikationsfehler stehen also in der Tabelle DEFERROR (dafür gibt es angeblich auch
noch eine View, aber welche?)
Vermischtes
Wenn die Replikation überhaupt nicht funktionieren will, dann hat das vermutlich einen ganz
schwerwiegenden Grund: Irgendwo tief drinnen im System ist ein Parameter falsch gesetzt
oder es fehlen irgendwelche Rechte. Ohne tiefere Oracle Kenntnisse ist es sehr schwer, da
etwas herauszufinden. Da hilft oft nur probieren (oder man gibt auf und lässt die Replikation
bleiben – sie ruhe in Frieden6 – was aber für uns keine Option darstellt).
Ein paar Tricks, abgeschaut bei der Vorführung (auch die lief nicht auf anhieb), welche
vielleicht nützlich sein können:
# select * from v$version
DB Version feststellen
6
In Mali und anderen afrikanischen Ländern würde man da sagen: Die Erde möge ihr (gemeint ist die
Replikation) leicht sein.
Seite 30 von 31
# eventuelle sind die Tabellen minimal unterschiedlich (NULL erlaubt / nicht erlaubt,
VARCHAR-Länge, ...)
# Im alert_xxx.log File nachsehen (in E:\oracle\admin\BAM\bdump)
# falls eventuell immer ein unerwünschte Postfix bei den Namen angehängt wird (etwa bei
den Links): dann passt vermutlich GLOBAL_NAME nicht, in
E:\oracle\ora92\network\admin\sqlnet.ora kann man das prüfen und einen eventuell störenden
Eintrag auskommentieren, wie z.B. diesen da:
NAMES.DEFAULT_DOMAIN = entrust.utimaco.at
# angeblich darf distributed_transaction nicht aufgenommen werden (Eine Systemvariable,
kein Hackerln geben. Auf beiden (!!!) Rechnern)
# select * from global_name; globaler DB Name feststellen / überprüfen (z.B.
BAM.WORLD)
# alter database rename global_name to xxx.yyy Datenbanknamen ändern
# was man nicht machen darf: auf einem Rechner eine Master-Gruppe anlegen und auch eine
Namensgleiche Master-Gruppe auf den anderen Rechner erstellen.
# desc traore.repdata Tabellenbeschreibung ermitteln
# select * from v$instance wichtige DB Informationen
# show user angemeldeter Benutzer
# select * from dual Tests; dual gibt es immer und überall
# spool xxxx.txt eine Log – Datei wird mitgeführt
spool off Logging ausschalten
Datei ist in E:\oracle\ora92\bin
# select privilege from dba_sys_privs where grantee='REPADMIN'
Analyse der System Privilegien
# select * from user_objects
welche User gibt es
Seite 31 von 31
Herunterladen