Zweiphasige verteilte Commit-Transaktionen mit Oracle RAC konfigurieren
RAC-Konfigurationen (Real Application Cluster) für Oracle 10g haben ein inhärentes Problem mit dem Transaktionsmanager, wenn Oracle versucht, zweiphasige verteilte Commit-Transaktionen über mehrere Oracle-RAC-Knoten hinweg auszuführen. Es kann ein Problem auftreten, wenn ein Knoten ausfällt und Oracle den anderen noch aktiven Knoten für Geschäftsoperationen öffnet, bevor Oracle RAC die erforderliche Wiederherstellungsaktion für den ausgefallenen Knoten abgeschlossen hat. Die Fähigkeit des Anwendungsservers, die Transaktionsaffinität zu erhalten, gibt Ihnen die Möglichkeit, dieses Problem zu umgehen.
Informationen zu diesem Vorgang
ORA- 24756: transaction does not exist
Wenn dieser Fehler auftritt,
muss der Administrator der Oracle-Datenbank die unbestätigte Transaktion möglicherweise
manuell auflösen, indem er einem Rollback- oder Commit-Prozess erzwingt.
Wenn Sie jedoch keine manuellen Eingriffe wünschen, können Sie eine automatische und
transparente Strategie für die Transaktionswiederherstellung konfigurieren.
ORA-01591 lock held by in-doubt distributed transaction
Die Ergebnis davon ist, dass Teile der Datenbank nicht mehr verwendbar sind.Der Schlüssel für eine transparente Wiederherstellungsstrategie ist die Eliminierung einer globalen Transaktion, die sich über mehrere Transaktionsverzweigungen über mehrere RAC-Knoten hinweg erstreckt. Eine Transaktionsverzweigung entspricht einer Datenbankverbindung, die bei einer globalen Transaktion registriert ist. Wenn alle Verbindungen in einer globalen zweiphasigen Commit-Transaktion von demselben Knoten stammen, sollten eigentlich keine Probleme bei der Transaktionswiederherstellung auftreten. Konfigurieren Sie Oracle RAC für den Anwendungsserver, um Fehler bei zweiphasigen Transaktionen zu vermeiden.
Der Anwendungsserver verwaltet die Transaktionsaffinität für eingehende Verbindungen, und Sie können dieses Feature nutzen, um die automatische Wiederherstellung für Oracle RAC mit zweiphasigen Commit-Transaktionen zu konfigurieren. Wenn Sie diese Konfiguration implementieren, werden alle Verbindungen eines bestimmten Anwendungsservers von demselben Oracle-Knoten empfangen, und die Verbindungen werden auf demselben Knoten beendet. Mit dieser Konfiguration können Situationen vermieden werden, in denen sich Transaktionen über mehrere Knoten erstrecken. Außerdem treten keine Wiederherstellungsprobleme auf, wenn ein oder mehrere Oracle-Knoten ausfallen.
Vorgehensweise
Ergebnisse
srvctl start service -d -s
Wenn ein RAC-Knoten seine Verarbeitung stoppt, findet kein Failover des DTP-Service statt, solange die
Oracle-RAC-Bereinigung und -Wiederherstellung nicht abgeschlossen sind. Selbst wenn die Oracle-Knoten wieder verfügbar sind,
wird der Oracle-DTP-Service auf dem neu gestarteten RAC-Knoten nicht erneut gestartet.
Vielmehr müssen Sie den Service manuell auf den neu gestarteten RAC-Knoten übertragen.
Wenn Sie DTP im Oracle-Service konfigurieren, übertragen Sie damit die Lastverteilung vom Oracle-JDBC-Provider an den Anwendungsserver. Die Workload wird vom Anwendungsserver und nicht von Oracle verteilt, und aus diesem Grund haben Sie Services erstellt, die keine Lastverteilung implementieren und nur einen einzigen Primärknoten verwenden. Diese Konfiguration verhindert Situationen, in denen sich Transaktionsprozesse über mehrere RAC-Knoten erstrecken, und mildert Wiederherstellungsprobleme, die beim Ausfall eines oder mehrerer RAC-Knoten auftreten können.