Anwendungsentwicklung mit Data Guard

Werbung
Anwendungsentwicklung für
Hochverfügbare Datenbanken
Sebastian Solbach
BU Core & Cloud Technologies
ORACLE Deutschland B.V. Co. KG
Mai, 2017
[email protected]
@s2solbach
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for
information purposes only, and may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality, and should not be relied upon
in making purchasing decisions. The development, release, and timing of any features or
functionality described for Oracle’s products remains at the sole discretion of Oracle.
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
1
Grundlagen: Session, Connection Pools und Services
2
Transparente Wartungsarbeiten
3
Gesicherte Transaktionen für die Applikation
4
Application Continuity
5
Bonustrack: Für den DBA
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
4
Program Agenda
1
Grundlagen: Session, Connection Pools und Services
2
Transparente Wartungsarbeiten
3
Gesicherte Transaktionen für die Applikation
4
Application Continuity
5
Bonustrack: Für den DBA
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
5
Services
• Pro Datenbank existieren mehrere Services
– Default Service (DB_UNIQUE_NAME) – nur für den DBA
– Applikations-Services zur primären Verbindung von Applikationen
• Beschreiben Anwendungen und Gruppieren Sessions
• Über Services können Zugriffe gesteuert, Ressourcen zugeteilt, Session
beendet und Verfügbarkeit gesteuert werden
• Erlaubt Verwendung von Easy Connect
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
6
Verwenden eines eigenen Services !!!
... und das gilt nicht nur für RAC, Data Guard und Multitenant (PDB)
• Oracle Datenbank 12c & Oracle Client 12c
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=pri-scan)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME = gold))
)
• Services in der Datenbank:
https://apex.oracle.com/pls/apex/germancommunities/dbacommunity/tipp/741/index.html
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
7
12.1 Java Thin Data Guard Service Verbindung
(DESCRIPTION =
(CONNECT_TIMEOUT=4) (RETRY_COUNT=20) (RETRY_DELAY=3)
(ADDRESS_LIST =
(LOAD_BALANCE=on)
(ADDRESS = (PROTOCOL=TCP)(HOST=primary)(PORT=1521)))
(ADDRESS_LIST =
(LOAD_BALANCE=on)
(ADDRESS = (PROTOCOL=TCP)(HOST=standby)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME = gold)))
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
8
12.1 OCI Data Guard Verbindung
ALIAS = (DESCRIPTION =
(CONNECT_TIMEOUT=90) (RETRY_COUNT=20) (RETRY_DELAY=3)
(TRANSPORT_CONNECT_TIMEOUT=3)
(ADDRESS_LIST =
(LOAD_BALANCE=on)
(ADDRESS = (PROTOCOL=TCP)(HOST=primary)(PORT=1521)))
(ADDRESS_LIST =
(LOAD_BALANCE=on)
(ADDRESS = (PROTOCOL=TCP)(HOST=standby)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME = gold)))
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
9
Erfahrungen
• IMMER einen eigenen Service für Applikationen verwenden
– Default Service der PDB oder Datenbank ist NUR für die Administration
• Aktueller 12c Client verwenden (für neue und alte DB Releases)
• 1x DESCRIPTION – mehr verlangsamen Verbindungsaufbau
• CONNECT_TIMEOUT=90 gegen Logon Storm (OCI & ODP)
• Vorsicht: JDBC Property oracle.net.ns.SQLnetDef.TCP_CONNTIMEOUT_STR hat Vorrang
• LOAD_BALANCE=ON pro SCAN Address Liste
• Nie RETRY_COUNT ohne RETRY_DELAY
• Kein Easy*Connect (kein HA)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
10
Connection Pools
Microservice
Connection Pool
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
11
Connection Pools
Microservice
Connection Pool
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
12
Connection Pools
Microservice
Connection Pool
Connection conn = getConnection(pds);
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
13
Connection Pools
Microservice
Connection Pool
Connection conn = getConnection(pds);
PreparedStatement pstmt = …
…
SQL, PL/SQL, local calls, RPC
…
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
14
Connection Pools
Microservice
Connection Pool
Connection conn = getConnection(pds);
PreparedStatement pstmt = …
…
SQL, PL/SQL, local calls, RPC
…
conn.commit();
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
15
Connection Pools
Microservice
Connection Pool
Connection conn = getConnection(pds);
PreparedStatement pstmt = …
…
SQL, PL/SQL, local calls, RPC
…
conn.commit();
conn.close();
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
16
Connection Pools
Microservice
Connection Pool
Connection conn = getConnection(pds);
PreparedStatement pstmt = …
…
SQL, PL/SQL, local calls, RPC
…
conn.commit();
conn.close();
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
17
Connection Pools
Microservice
Connection Pool
Connection conn = getConnection(pds);
PreparedStatement pstmt = …
…
SQL, PL/SQL, local calls, RPC
…
conn.commit();
conn.close();
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
18
Klassischer Connection Pool im Fehlerfall
Microservice
Standby Datenbank
Connection Pool
Test: Select * from dual;
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
19
Klassischer Connection Pool im Fehlerfall
Microservice
Standby Datenbank
Connection Pool
Test: Select * from dual;
Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
20
Klassischer Connection Pool im Fehlerfall
Microservice
Neue Primär Datenbank
Connection Pool
TCP/IP Timeout....
Alte Primär Datenbank
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
21
Klassischer Connection Pool im Fehlerfall
Microservice
Neue Primär Datenbank
Connection Pool
TCP/IP Timeout....
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
22
Oracle Universal Connection Pool (UCP) im Fehlerfall
ONS
Microservice
Standby Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Primär Datenbank
23
Oracle Universal Connection Pool (UCP) im Fehlerfall
ONS
Microservice
Standby Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Primär Datenbank
24
Oracle Universal Connection Pool (UCP) im Fehlerfall
ONS
Microservice
Neue Primär Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Alte Primär Datenbank
25
Oracle Universal Connection Pool (UCP) im Fehlerfall
ONS
Microservice
Neue Primär Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Alte Primär Datenbank
26
Oracle Universal Connection Pool (UCP) im Fehlerfall
ONS
Microservice
Neue Primär Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Alte Primär Datenbank
27
Fast Application Notification
• Oracle Notification Server (ONS) überwacht die Knoten
– Ereignisse führen zum Senden einer Benachrichtigung
FAN event type: service_member
Properties: version=1.0 service=OLTP database=SSDB
instance=SSDB host=bumucsvm1 status=up
• Event Type: SERVICE, INSTANCE, DATABASE, ASM, NODE
• Status: UP, DOWN, UNKNOWN
• Reason: USER, FAILURE
– Subscription des Clients zu mehreren ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
28
Ausfall feststellen: Fast Application Notification
Applikationen verlieren Zeit
FAN & FCF
•Warten auf TCP/IP Timeouts
 Down – Service/Knoten down
<50ms für Failover
•Fehler bei geplanten Ausfällen
•Verbindungsabbrüche bei
Nichtverfügbarkeit des Services
•Keine Neu-Verbindungsversuche bei
Serviceverfügbarkeit
•Verbindungen auf überlastete Knoten
 Planned Down – Entleerung des
Connectionspools ohne Verbindungsabbrüche
 Up – Verteilung der Arbeitslast bei
Serviceverfügbarkeit
 RLB % - Informationen zur optimalen Verteilung
 Affinity – Optimierung Workload lokal zu halten
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
29
Fast Application Notification: Wo?
Client
11g
12c
JDBC Universal Connection Pool
ONS
ONS
ODP.NET Unmanaged (OCI)
AQ
ONS
ODP.NET Managed (C#)
ONS
OCI Session Pool
AQ
ONS
WebLogic Active GridLink
ONS
ONS
Tuxedo
ONS
ONS
JDBC thin standalone (12.2)
OCI/OCCI driver
ONS
AQ
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
ONS
30
FAN Client: Java-Beispiel
• Bibliothek in CLASSPATH einbinden
– $ORACLE_HOME/opmn/lib/ons.jar
• Client Program:
ons = new ONS("primary:6200,standby:6200");
s=ons.createNewSubscriber("","database/event");
....
e = s.receive(true);
...
System.out.println(e.type());
System.out.println(e.body());
Fast Application Notification (including fanWatcher)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
31
12cR2 FAN Immer an / Auto-Konfiguration
11.2 / 12.1 und 12.2
• Neuer JDBC Thin Treiber inkludiert FAN
• SimpleFAN und ONS jar im Classpath:
– For using Oracle RAC Fast Application Notification, the simplefan.jar file must be
present in the classpath, and either the ons.jar file must be present in the classpath
or an Oracle Notification Services (ONS) client must be installed and running in the
client system.
• https://docs.oracle.com/cd/E18283_01/java.112/e16548/apxracfan.htm
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
32
12c JDBC FAN Konfiguration (12.2: On by Default)
• ONS Konfiguration wird aus URL abgeleitet
• Prüfen, ob ons.jar im Classpath enthalten ist
• Vor 12.2
– Registrierung bei den ONS daemons
ods.setConnectionCachingEnabled(True);
ods.setFastConnectionFailoverEnabled(true);
– Wichtig: SCAN Loadbalancing aktivieren
oracle.jdbc.thinForceDNSLoadBalancing=true
– Default: ONS verwendet 3 End-points. Bei Data Guard dies ggf. erhöhen:
oracle.ons.maxconnections=4 (or more)
• Vor 12.1:
ods.setONSConfiguration("nodes=bumucsvm1:6200,bumucsvm2:6200,bumucsvm3:6200");
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
33
12c OCI FAN Konfiguration (Auto)
• 12.2 OCI Clients & 12 Datenbank
– Service Konfiguration für die AQ HA Notification:
srvctl modify service -db EM -service GOLD -notification TRUE
– ONS Konfiguration aus TNS
• 12.1 OCI Clients
– Verwenden von oraaccess.xml
• Pre-12c OCI Clients
<oraaccess>
<default_parameters>
<events>true</events>
</default_parameters>
</oraaccess>
– Aktivierung der OCI_EVENTS während der Laufzeit im Client (OCIEnvCreate(...) )
– Linken der Applikation mit der Client Thread O/S library.
– Falls die Session nicht in den Pool zurückgegeben werden:
Check OCI_ATTR_SERVER_STATUS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
34
12c ODP.NET FAN Konfiguration
• Aktivierung von HA Events durch "HA Events=true“ und "pooling=true" im
Connection String
"user id=oracle; password=pwd; data source=HA; pooling=true; HA events=true;"
• "Load Balancing=true" zur Verwendung von Runtime Conntection LB.
"user id=oracle; password=pwd; data source=HA;
pooling=true; HA events=true; load balancing=true;"
• Falls die Session nicht in den ODP.NET zurückgegeben werden:
Check Connection.State (6620732)
• Pre-12c SRVCTL für die Event Notification (wie bei OCI)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
35
Program Agenda
1
Grundlagen: Session, Connection Pools und Services
2
Transparente Wartungsarbeiten
3
Gesicherte Transaktionen für die Applikation
4
Application Continuity
5
Bonustrack: Für den DBA
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
36
Geplante Wartungsarbeiten
ONS
Microservice
Standby Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Primär Datenbank
37
Switchover
ONS
Microservice
Standby Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Primär Datenbank
38
Switchover
ONS
Microservice
Standby Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Primär Datenbank
39
Switchover
ONS
Microservice
Standby Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Primär Datenbank
40
Switchover
ONS
Microservice
Standby Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Primär Datenbank
41
Switchover
ONS
Microservice
Primär Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Standby Datenbank
42
Switchover
ONS
Microservice
Primär Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Standby Datenbank
43
Switchover
ONS
Microservice
Primär Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Standby Datenbank
44
Switchover
ONS
Microservice
Primär Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Standby Datenbank
45
Transparent Client Connection Failover
Beibehalten von Verbindungen auf Standby
Read/Write
Read
• Session bleiben bei Active Data
Guard erhalten
(Failover/Switchover)
• Vorteil:
Primary
Active Data Guard
Standby
Read/Write
– Benutzer bleiben Verbunden
– Kein Reconnect Storm nach Failover
• Automatisch
– Nur Services müssen konfiguriert sein
Failed Primary
Primary
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
46
12cR2 FAN Enable Connection Tests to Drain
Unterstützt 11.2, 12.1 & 12.2
• JDBC
–
–
–
–
–
isValid
isUsable
isClosed
pingDatabase
SQL Tests (with HINT)
• OCI
– OCI_ATTR_SERVER_STATUS
• ODP.Net
– connection.status
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
47
“Drain” von Applikation Servern an “sicheren” Stellen
Application Server
Test Name
Connection Test to DB
Oracle WebLogic –
Generic and Multi data sources
TestConnectionsOnReserve
isUsable
TestConnectionsOnCreate
SQL – SELECT 1 FROM DUAL
Oracle WebLogic Active GridLink embedded
isUsable
IBM WebSphere
PreTest Connections
SQL - SELECT 1 FROM DUAL
Red Hat JBoss
check-valid-connection-sql
SQL - SELECT COUNT(*) FROM
DUAL
Apache TomCat
TestonBorrow
TestonRelease
SQL - SELECT 1 FROM DUAL
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
48
“Drain” von Applikation Servern an “sicheren” Stellen
Application
Condition
Connection Test to DB
eBusiness Suite
Connection borrowed from Weblogic
TestConnectionsOnReserve
with "BEGIN NULL; END;"
Fusion Applications
Connection returned to WebLogic and C++
pools and checked
TestConnectionsOnReserve
with isValid
OCI_ATTR_SERVER_STATUS
Siebel
EAI (batch) checks status before starting
OCI_ATTR_SERVER_STATUS
Customer
Custom pool with Meta data table
Checks status every 60s
OCI_ATTR_SERVER_STATUS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
49
Program Agenda
1
Grundlagen: Session, Connection Pools und Services
2
Transparente Wartungsarbeiten
3
Gesicherte Transaktionen für die Applikation
4
Application Continuity
5
Bonustrack: Für den DBA
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
50
Oracle Universal Connection Pool (UCP) im Fehlerfall
ONS
Microservice
Neue Primär Datenbank
UCP
ONS
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Alte Primär Datenbank
51
Unterbrechung der Datenbank Verbindung
5 Probleme für den Anwendungsentwickler
• Ausfall feststellen
• Wiederaufnahme im vorgegebenen Zeitfenster
• Exception Handling
• Transaktionsstatus herausfinden
• Weiterführung der aktuellen Transaktion
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
52
Unterbrechung der DB Verbingung
5 Probleme für den Anwendungsentwickler
Ausfall festestellen - FAN
Wiederaufnahme im vorgegebenen Zeitfenster – RAC/Data Guard
• Exception Handling
• Transaktionsstatus herausfinden
• Weiterführung der aktuellen Transaktion
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
53
Exception Handling? “Recoverable Error”
• Formalisiert:
– OracleException.IsRecoverable property
– JDBC throws SQLRecoverableException
• Applikationen brauchen keine eigene Liste mit Fehlercodes
(z.B., ORA-1033, ORA-1034, ORA-xxx)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
54
Lösungen für Transaktionsstatus & Fortführung
Neu in Oracle Database 12c
Transaction Guard
Application Continuity
Verlässliches Protokoll und API den
Status der letzten Transaktionen zu
überprüfen
Automatische Wiederholung
(Replay) der Benutzer-transaktion
nach einem Ausfall oder während
einer Wartung
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
55
Herausforderung: Commit Ergebnis
Unterbrechung der Kommunikation während eines COMMIT
• Java/JDBC Applikation bekommt eine Fehlermeldung :”Failed”
– Keine Information über das Ergebnis dieser “in-flight” Transaktion
• Typisches Szenario
– t0: Applikation prüft Status der Transaktion und erhält “Not COMMITTED”. Auf Basis
dieser Information wird das weitere Vorgehen bestimmt
– t1: Transaktion wird doch noch abgeschlossen
– Es gibt (bis 12c) keinen verlässliche Möglichkeit den Status einer in-flight Transaktion
zu prüfen
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
56
Transaction Guard – Schematische Darstellung
Applikation/Treiber - RDBMS Interaktion
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
57
Transaction Guard
Verlässliche Information des COMMIT Ergebnisses
1. RDBMS assoziiert zu jeder “in-flight” Transaktion eine logische
TransaktionsID (LTXID)
LTXID wechselt NUR bei einem erfolgreichen COMMIT oder ROLLBACK
2. LTXID wird z.B. an JDBC kommuniziert
3. Falls die Verbindung abbricht
LogicalTransactionId ltxid = oldConn.getLogicalTransactionId();
OracleConnection newConn = getConnection();
CallableStatement cstmt = newConn.prepareCall(GET_LTXID_OUTCOME);
RDBMS: Falls GET_LTXID_OUTCOME weder Committed noch Rollback zurückgibt,
wird die Transaktion daran gehindert zu COMMITTEN
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
58
Commit Outcome
GET_COMMIT_OUTCOME forciert das Commit Ergebnis der Session:
• COMMITTED
– TRUE: Der Aufruf hat mindestens einen erfolgreichen Commit enthalten
– FALSE: Der Aufruf ist uncommited und wird auch nicht mehr ausgeführt
• USER_CALL_COMPLETED
– TRUE: Der Aufruf lief bis zum Ende
– FALSE: Es gibt keine Informationen ob der Aufruf beendet wurde
Z.B. Das Autocommit Ergebnis von PL/SQL Bind Variablen (Out) fehlt
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
59
Ein Beispiel
• Datenbank Sessions brechen ab:
– FAN & FCF schließen tote Sessions (sehr schnell!)
– Applikation bekommt einen Fehler
• Wenn “recoverable error” dann
– Get last LTXID von der toten Session
– Anfordern einer neuen Datenbank Session
– Forcieren des Commit Ergebnisses:
DBMS_APP_CONT.GET_LTXID_OUTCOME with last LTXID
If committed then {
process committed;
if user_call_completed then application may continue
else application may not be able to continue}
Else process uncommitted
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
60
Transaction Guard
Best Practices
Transaction Guard nur verwenden, wenn die Session tot ist oder nicht reagiert:
• NICHT die LTXID abfragen und für die Laufzeitumgebung verwenden
• NICHT die Funktion GET_LTXID_OUTCOME auf die eigene Session ausführen
• NICHT nach GET_LTXID_OUTCOME fragen mit einer LTXID einer anderen Umgebung
• GET_LTXID_OUTCOME sollte verwendet werden für eine Session, die einen
“Recoverable Error” erhalten hat oder auf eine Zeitüberschreitung (Timeout) gelaufen
ist
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
61
Transaction Guard
Treiber Unterstützung mit 12.1.0.2
• Supportete Commit Modelle
– Local TXN
– Auto-commit, Commit on Success
– Commit embedded in PL/SQL
– DDL, DCL, Parallel DDL
– Remote, Distributed
– XA ab 12.2
• Ausgeschlossen
– R/W DBLinks von Active Data Guard / Read Only
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
62
Program Agenda
1
Grundlagen: Session, Connection Pools und Services
2
Transparente Wartungsarbeiten
3
Gesicherte Transaktionen für die Applikation
4
Application Continuity
5
Bonustrack: Für den DBA
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
63
Die Einheit: “Datenbank Request”
Legt die Grenzen für die Wiederholung fest
PoolDataSource pds = GetPoolDataSource();
Connection conn = getConnection(pds);
PreparedStatement pstmt = …
…
SQL, PL/SQL, local calls, RPC
…
conn.commit();
conn.close();
Begin
Request
Request Body
schließt
gewöhnlich mit
COMMIT ab
End
Request
JDK9 Standard Datenbank Request:
Unit of work, Default zwischen Check-out & Check-in
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
64
Phasen bei Application Continuity
1-Laufzeit Operationen
2-Reconnect
3-Replay
• Überwachung der einzelnen
Datenbank Requests
• Server ermittelt was / was
nicht wiederholt werden kann
• Client speichert den orginären
Aufruf inkl. Bind Variablen und
Validierung
• Prüft ob für den Request Replay
aktiviert wurde
• Verwaltung von Timeouts
• Eröffnet neue Verbindung
• Validiert die
Zieldatenbank/Zielinstanz
• Verwendet Transaction Guard
zur Ermittlung des COMMIT
Ergebnisses
• 12.2 Herstellen initialer
Status
• Wiederholung der
gespeicherten Aufrufe
• Verifizierung der Ergebnisse
mit den Vorhergehenden.
• Führt den Request weiter,
falls die Wiederholung
erfolgreich ist
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
65
Konfiguration Application Continuity
JDBC / WLS
• JDBC URL oder Property Datei
# Verwendung der neuen 12.1 Replay DataSource
datasource=oracle.jdbc.replay.OracleDataSourceImpl
• WebLogic Console oder UCP/Weblogic Property Datei
# Auswählen der neuen 12.1
replay datasource=oracle.jdbc.replay.OracleDataSourceImpl
• Setzen von ONS nicht mehr notwendig, da in 12c die ONS Server
automatisch konfiguriert werden (via. Listener)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
66
Ausnahmen: Replay deaktiviert
Global
• Default Datenbank Service
oder Default PDB Service
• 12.1: XA in 12.1, OCI, ODP.NET,
Tuxedo, SQL*Plus
• 12.2: Nur: ODP.NET managed
• Verwendung einiger JDBCKlassen aus dem Package
oracle.sql*
Request
• Restricted Calls
(eigentlich logisch) :
– Alter System
– Alter Database
• Active Data Guard mit
read/write Datenbanklinks
Target Database
• Nicht verfügbar bei
– Logical Standby
– Golden Gate
– PDB Clone
*Acchk (Teil von Orachk) “Replay Coverage Analysis” – Analysiert % der SQL Aufrufe, die nicht vom automatischen Replay erfasst würden
ORAchk - Health Checks for the Oracle Stack (Doc ID 1268927.2) https://t.co/sSltFjewJo
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
67
SQL*PLUS
$ sqplus -H
...
Usage 2: sqlplus [ [<option>] [{logon | /nolog}] [<start>] ]
<option> is: [-AC] [-C <version>] [-L] [-M "<options>"] [-NOLOGINTIME] [-R <level>]
[-S]
-AC
Enable Application Continuity.
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
68
Konfiguration
Setzen der Service Attribute !
• FAILOVER_TYPE = TRANSACTION für Application Continuity
• FAILOVER_RESTORE = LEVEL1 für “normale” Server State
• AQ_HA_NOTIFICATIONS=True für FAN mit OCI Treiber, ODP.NET, Tuxedo, SQL*Plus
• Java Client: Replay Data Source, Lokal oder XA (12.2)
replay datasource=oracle.jdbc.replay.OracleDataSourceImpl
• OCI, ODP.NET, Tuxedo, SQL*Plus
On when enabled on the service
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
69
Restriktionen: Wann wird nicht wiederholt?
Normal Runtime
Reconnect
Aufrufe im selben Request nach
• Fehler ist nicht “recoverable”
• Einem erfolgreichen Commit im
dynamischen Modus
• Fehler beim erneuten
Verbindungsaufbau
• Auftreten eines “restricted call”
• Zieldatenbank nicht für Replay
geeignet
• disableReplay API
Replay
• Validierung erkennt
Unterschiede im Ergebnis
• Letzter Aufruf erfolgreich
committed im dynamischen Modus
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
70
Initialer Session State vor dem Replay
• 12.1 (leerer State)
• Applikationen setzen State pro Request
• WebLogic, UCP, DRCP verwenden Connection Labels
• Logon Triggers
– TAF oder JDBC Callback für schwierige Fälle
• 12.2.0.1 - FAILOVER_RESTORE = LEVEL1 für einige Standard State
• Zukunft: Datenbank erkennt ob Session State notwendig ist oder nicht.
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
71
Deaktiveren von Replay ?
• Verwenden der disableReplay() API für Aufrufe, die nicht wiederholt
werden sollen/dürfen, insbesondere für Externe Aktionen:
– Autonome Transaktionen
– UTL_HTTP, UTL_URL
– UTL_FILE, UTL_FILE_TRANSFER
– UTL_SMPT, UTL_TCP
– UTL_MAIL
– DBMS_PIPE (nicht empfohlen bei RAC)
– DBMS_ALERT
• Verwenden anderer Connection
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
72
Optionale Datenbank Konfiguration
„Mutables“ Rechte vergeben
• Damit z.B. Sysdate bei einem Replay denselben Wert zurückgibt:
GRANT [KEEP DATE TIME | KEEP SYSGUID].. [to USER]
REVOKE [KEEP DATE TIME | KEEP SYSGUID][from USER]
GRANT KEEP SEQUENCE.. [to USER] on [sequence object];
REVOKE KEEP SEQUENCE [from USER] on [sequence object];
ALTER SEQUENCE.. [sequence object] [KEEP|NOKEEP];
CREATE SEQUENCE.. [sequence object] [KEEP|NOKEEP];
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
73
Program Agenda
1
Grundlagen: Session, Connection Pools und Services
2
Transparente Wartungsarbeiten
3
Gesicherte Transaktionen für die Applikation
4
Application Continuity
5
Bonustrack: Für den DBA
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
74
Geplante Wartungsarbeiten
• DBA „schwenkt“ Service von Primary auf Standby:
– Manuell: srvctl relocate/stop service
– 12.2 DG Broker: DGMGRL> switchover to standby wait;
– Connection Pool baut offene Sessions ab, sobald diese inaktiv im Pool sind. Neue Connections werden
auf den neuen Knoten geöffnet
• Nach XX Minuten werden die verbleibenden Sessions Transaktional geschlossen
exec
dbms_service.disconnect_session('service_name‚DBMS_SERVICE.POST_TRANSACTION);
• 12.2: JDBC, OCI, ODP.NET ... Treiber versuchen Connection an „sicheren Stellen“
anzuhalten
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
75
Verwenden eines eigenen Services !!!
... und das gilt nicht nur für RAC, Data Guard und Multitenant (PDB)
• Oracle Datenbank 12c & Oracle Client 12c
srvctl modify service -db ORCL -service APPCON
-failovertype TRANSACTION -replay_init_time 300
-failoverretry 30 -failoverdelay 3
-notification TRUE -commit_outcome TRUE
-session_state DYAMIC –drain_timeout 30 –failover_restore LEVEL1
• Services in der Datenbank:
https://apex.oracle.com/pls/apex/GERMAN_COMMUNITIES.SHOW_TI
PP?P_ID=741
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
76
Service Konfiguration Transaction Guard
• COMMIT_OUTCOME
– Werte : TRUE oder FALSE, Default: FALSE
– Greift sofort bei neuen Sessions
• RETENTION_TIMEOUT
– Einheit: Sekunden, Default: 24 Stunden (86400)
– Maximalwert: 30 Tage (2592000)
• AQ_HA_NOTIFICATIONS
– Werte: TRUE oder FALSE, Default: FALSE (noch)
– Auf TRUE setzen für FAN !!
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
77
Service Konfiguration Application Continuity
Zusätzlich für Application Continuity
• FAILOVER_TYPE
– Werte : NONE, SESSION, SELECT, TRANSACTION, Default: NONE
– Für AC auf TRANSACTION setzen
• REPLAY_INITIATION_TIMEOUT = 300
– Zeit in Sekunden nach der ein Replay abgebrochen wird
• FAILOVER_RETRIES = 60
– Anzahl der Verbindungsversuche für einen Replay
• FAILOVER_DELAY = 3
– Verzögerung in Sekunden zwischen den Verbindungsversuchen
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
78
Service Konfiguration Application Continuity
• SESSION_STATE
– Werte : DYNAMIC, STATIC, Default: DYNAMIC
– Dynamischer oder Statische Request Grenzen
• DRAIN_TIMEOUT
– Zeit in Sekunden bis Service heruntergefahren wird
• FAILOVER_RESTORE
– Werte: NONE, LEVEL1, Default: NONE
– Wiederherstellen von Standard Session States
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
79
Rechte & Datenbank Parameter
• Applikationsbenutzer braucht Rechte auf das DBMS_APP_CONT Package
GRANT EXECUTE ON DBMS_APP_CONT TO <app-name>;
• REMOTE_LISTENERS muss alle Listener kennen, über die die Clients sich
initial verbinden (im Normalfall nur SCAN)
alter system set REMOTE_LISTENERS='SCAN.domain.com:1521'
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
80
Kill Session
Was passiert, wenn der DBA eine Session killt?
• Natürlich greift AC...
– ... nicht unbedingt immer gewollt!
SQL> alter system kill session 'sid, serial#, @inst' noreplay;
SQL> alter system disconnect session 'sid, serial#, @inst'
noreplay;
SQL> execute DBMS_SERVICE.DISCONNECT_SESSION(‘[service name]’,
DBMS_SERVICE.NOREPLAY) ;
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
81
Informationen LTXID Tabelle
• Partitioniert nach INST_ID
• Automatisch 1 Partition
pro Instanz
• Default: SYSAUX Tablespace
• Darf verschoben werden
(Online 12c Feature)
• Nur befüllt von Services mit
COMMIT_OUTCOME=TRUE
desc LTXID_TRANS
Name
Null?
------------- -------MAJ_VERSION
NOT NULL
MIN_VERSION
NOT NULL
INST_ID
NOT NULL
DB_ID
NOT NULL
SESSION_GUID NOT NULL
TXN_UID
NOT NULL
COMMIT_NO
NOT NULL
START_DATE
NOT NULL
SERVICE_ID
NOT NULL
STATE
NOT NULL
FLAGS
NOT NULL
REQ_FLAGS
NOT NULL
ERROR_CODE
NOT NULL
Type
--------------------------NUMBER
NUMBER
NUMBER
NUMBER
RAW(64)
NUMBER
NUMBER
TIMESTAMP(6) WITH TIME ZONE
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
82
Lizenzen für produktiven Einsatz
• Transaction Guard: Enterprise Edition
• Application Continuity: RAC oder Active Data Guard Option
• Oracle® Database Licensing Information 12c Release 1 (12.1)
http://docs.oracle.com/cd/E16655_01/license.121/e17614/edit
ions.htm#DBLIC116
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
83
Links & weitere Informationen
• DBA Community
https://blogs.oracle.com/dbacommunity_deutsch/
• OTN
http://www.oracle.com/technetwork/products/clustering/ac-overview-1967264.html
• Whitepapers
http://www.oracle.com/technetwork/database/database-cloud/private/transaction-guard-wp12c-1966209.pdf
http://www.oracle.com/technetwork/database/database-cloud/private/application-continuitywp-12c-1966213.pdf
• Dokumentation
• http://docs.oracle.com/cd/E16655_01/java.121/e17659/app_cont.htm#JJUCP8254
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
84
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
85
Herunterladen