Oracle Net - trivadis.com

Werbung
Oracle Net – Übersicht mit Tiefgang
Konrad Häfeli. Technology Manager Infrastructure. Januar 2010
1.
Schlüsselworte
Oracle Net Services, Oracle Net, SQL Net, Database Service, TAF, FAN, SDU, RTT
2.
Einleitung
Oracle Net, eine Komponente der Oracle Net Services, als Bindeglied und Entkopplungs-schicht
zwischen Applikationen und Datenbanken ermöglicht die Umsetzung von Client/Server resp.
Three Tier Architekturen. Es ist die Grundlage für die Verteilung der Belastungen auf
verschiedene physische oder auch logische Server. Die (Rückwärts-) Kompatibilität der
verschiedenen Versionen hat bis auf ein paar kleinere Vorkommnisse, wenn man sich an die
Grundfunktionalität gehalten hat, wenig Probleme bereitet. Meistens werden die Konfigurationen
via Files (sqlnet.ora, tnsnames.ora, listener.ora) gemacht, sodass diese relativ einfach kopiert und
auf die jeweiligen Bedürfnisse angepasst werden können.
Was war nun aber meine Motivation einen Vortrag über dies eigentlich nicht so prickelnde
Thema zu schreiben? Der Mensch wir aus Erfahrung klug… In einem MAA Projekt wurde die
scheinbar klare Konfiguration des Applikationszugriffs auf den hochverfügbaren
Datenbankservices (RAC abgesichert mit Dataguard) auf die Probe gestellt und gefährdete durch
Probleme die Endabnahme des Systems.
3.
Übersicht
Für die Verbindung eines Clients mit dem Server braucht Oracle Net die Information auf welchen
Server, über welchen Port auf welchen Service zugegriffen werden soll. Meistens geschieht das
mit dem TCP Protokoll und wird in einem sogenannten Verbindungsdeskriptor definiert. Dieser
definiert somit die physische Lokation des angegebenen Datenbankservices:
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = pyrrha09)
(PORT = 1521)
)
(CONNECT_DATA =
(SERVICE_NAME = TECH11.ttc.trivadis.com )
)
)
Diese Deskriptoren werden meistens mit einem Alias versehen und in Repositories abgelegt
welche entsprechend der Naming-Methode unterschiedlich ausgeprägt sind.




Local Naming
Directory Naming
Easy Connect Naming
External Naming
 tnsnames.ora File
 LDAP compliant Directory Server
 expliziter connect string
 z.B. NIS (Network Information Service)
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 01.12.2010 . Seite 1 / 5
4.
Verfügbarkeit
Die Verfügbarkeitsfunktionalität von Oracle Net spricht vor allem die Applikation an. Dadurch
wird der gewünschte Datenbank Service auch im Fehlerfall (Instanz, Knoten, Lokation) erreicht.
Durchsatz-Anforderungen sind hier meist nicht ausschlaggebend, sondern fehler- und möglichst
verzögerungsfreie Automatismen.
Failover:
Mehrere Adressen können in der ADDRESS_LIST angegeben werden, dann wird per default
„connect time failover“ (FAILOVER=ON) gesetzt. Es wird sequentiell die Liste durchgegangen bis
die Verbindungen hergestellt werden kann.
Loadbalance:
Bei mehreren Connect Deskriptoren (DESCRIPTION_LIST) ist loadbalancing defaultmässig
eingeschalten. Es werden „random“ die Verbindungen hergestellt um die Last zu verteilen.
Die Kombination der Parameter versucht random eine Verbindung herzustellen bis eine
funktioniert.
(DESCRIPTION =
(ADRESS_LIST =
(FAILOVER = ON)
(LOAD_BALANCE = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = pyrrha01)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = pyrrha02)(PORT = 1521))
)
(CONNECT_DATA = (SERVICE_NAME = TECH11.ttc.trivadis.com ))
)
Durch die Konfiguration des remote_listeners wir nicht nur eine zahlenmässig gleiche Verteilung
der Verbindungen gemacht (clientseitiges Loadbalancing), sondern entsprechend der Serverlast
die Connectionrequests verteilt (serverseitiges Loadbalancing) .
Transparent Application Failover (TAF) wird bevorzugt auf der Server Seite implementiert. Durch
das Setzen der FAILOVER_MODE Parameter der Datenbank Services wir ein automatisches
reconnect auf einen verfügbaren Knoten möglich. Der FAILOVER_TYPE „SESSION“ macht zwar
kein nahtloser failover von offenen Cursorn, hat aber auch keinen Overhead bei normalen SelectOperationen auf der Clientseite.
begin
DBMS_SERVICE.CREATE_SERVICE(
service_name
=> 'TECH11’,
network_name
=> 'TECH11’,
failover_method => 'BASIC',
failover_type
=> 'SESSION',
failover_retries => 180,
failover_delay
=> 1);
end;
/
Client Programme können mittels Fast Application Notification (FAN) von einem Failover
benachrichtigt werden und ohne eventuelle TCP Timeouts abzuwarten auf überlebende Knoten
oder Lokationen reconnecten. Bei OCI Clients ist das mittels Advanced Queuing Funktionalität
relativ einfach möglich. Wenn beim DB Service die Notification gesetzt ist beinhaltet die
SYS.REG$ Tabelle die nötigen Client Informationen welche z.B. vom Dataguard Broker beim
Rollentausch durch einen DB Down Event in der Alert Queue informiert werden.
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 01.12.2010 . Seite 2 / 5
begin
DBMS_SERVICE.MODIFY_SERVICE(
service_name
=> 'TECH11.ttc.trivadis.com',
aq_ha_notifications => true);
end;
/
Sind Knoten, resp. deren IP Adressen nicht mehr verfügbar ist es sehr zeitaufwändig durch die
verschiedenen ADDRESS Konfigurationen durch zu gehen und im schlimmsten Fall jeweils ein
TCP Connect Timeout abzuwarten. Durch das Setzen von
SQLNET.OUTBOUND_CONNECT_TIMEOUT im sqlnet.ora File kann dies auf den spezifizierten
Wert (wenige Sekunden) reduziert werden.
Es kann Applikationskonfigurationen geben, vor allem bei der Integration von alten Systemen, da
helfen die neuen Failoverfunktionen nicht in jedem Fall. Wenn im Extremfall IP Adressen direkt
in der Applikation codiert sind oder z.B. eigene Applikationsconnection Pools alloziert werden,
kann es Sinn machen die IP Adresse(n) des gecrashten Knotens auf den neuen PRIMARY Knoten
zu übernehmen. Solche Funktionalität kann mit Clustern oder eigenen Scripten implementiert
werden und ist in der Regel einfacher zu implementieren als komplizierte Client-Notifikationen in
alten Applikationen einzuführen.
5.
Performance
In der Regel ist die Datentransferlast einer Applikation kein Problem für eine Oracle Net
Verbindung. Datentransfer und das Verhalten bei grossen Lasten ist aber relevant beim Einsatz
von Oracle Net Services beim Redotransport in Dataguardumgebungen. Dabei tritt die Primary
Datenbank als Client auf, der Daten über das Netz zum Standby Knoten überträgt. Die Bandbreite
für die Übertragung der Daten von und zu den Clients hängt natürlich vom physischen
Netzwerkanschluss ab der heute meinst nicht unter 1GBit/sec liegt, was einer maximalen
Datenmenge von ca. 90 MB/s entspricht (Faustregel max. 70% Auslast des Netzwerks als
Sicherheit, Division durch 8 für Bit/Byte Umrechnung). Nebst konfigurationsrelevanten
Anpassungen kommen auch physische Effekte zum tragen, die in der Auslegung der Systeme
berücksichtig werden müssen, aber nicht umgangen werden können (gemessen als RTT, round
trip time).
Massive Verbesserugen im Netzwerkdurchsatz können erzielt werden wenn die beiden sqlnet.ora
Parameter RECV_BUF_SIZE und SEND_BUF_SIZE optimiert werden. Oracle empfiehlt diese auf
das Dreifache des „Bandwidth Delay Product“ (BDP) zu setzen. Dieses berechnet sich aus der
Roh-Bandbreite des Netzwerks multipliziert mit der Round Trip Time (RTT). Diese kann z.B.
durch den Einsatz von traceroute ermittelt werden (Faustregel ist 1 ms pro 50km
Übertragunsstrecke). Für ein GB Netzwerk mit einer Millisekunde RTT ergäbe das ein BDP von
125KB, die Bufferparameter sind optimal mit Faktor 3, somit auf 375‘000 Byte zu setzen.
1’000’000’000 bps * 0.001 s / 8 b * 3 = 375’000
RECV_BUF_SIZE = 375000
SEND_BUF_SIZE = 375000
Zur Verbesserung der Netzwerkauslastung und somit der Performance kann client- und serverseitig im sqlnet.ora der Wert für die „Session Data Unit“ (SDU) gesetzt werden. Default von 8kB
kann bei hoher Last auf 32KB gesetzt werden:
DEFAULT_SDU_SIZE=32767
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 01.12.2010 . Seite 3 / 5
Die SDU könnte ebenfalls im connect descriptor resp. in der SID_LIST des Listeners angegeben
werden.
Damit die Datenmenge für die Übertragung reduziert wird, hat Oracle ab 11gR1
Redocompression als Dataguardproperty eingeführt. Leider findet die Komprimierung nur statt
wenn ein log Gap geschlossen wird. Dabei aber ist die Reduktion mit 80-90% markant.
6.
Neue Funktionalität 11gR2
Oracle unterstützt in der aktuellen Version Internet Protocol Version 6 (IPv6), diese adressiert das
Problem der auslaufenden IPv4 Adressen. Für die Konfiguration von Oracle Net spielt das keine
Rolle, wenn der Hostname via DNS korrekt aufgelöst wird (entweder IPv4 oder IPv6).
Oracle Restart bringt eine Hochverfügbarkeitsfunktionalität auf Basis srvctl für eine Single-Instanz
Umgebung. Durch geeignete Konfiguration wird sichergestellt, dass der Listener-Prozess wieder
gestartet wird wenn er nicht mehr läuft.
srvctl
srvctl
srvctl
srvctl
add listener -l listener1120
remove listener -l listener1120
start listener -l listener1120
stop listener -l listener1120
Connection Timeouts können nun auf Basis der Deskriptoren konfiguriert werden und
übersteuern global gesetzte in sqlnet.ora. Dies ergibt flexiblere Konfigurationen im Dataguard
Umfeld:
TRANSPORT_CONNECT_TIMEOUT spezifiziert die Wartezeit von Oracle Net für die
Etablierung einer Verbindung auf den Datenbank Server. Er übersteuert
TCP.CONNECT_TIMEOUT im sqlnet.ora.
CONNECT_TIMEOUT spezifiziert die Wartezeit von Oracle Net für die Etablierung einer
Verbindung auf die Datenbank. Er übersteuert
SQLNET.OUTBOUND_CONNECT_TIMEOUT im sqlnet.ora.
7.
CIDR
Classless Inter-Domain Routing. In CIDR notation, an IPv6 subnet is denoted by the
subnet prefix and the size in bits of the prefix (in decimal), separated by the slash (/)
character. For example, 2001:0DB8:0000:0000::/64 denotes a subnet with
addresses 2001:0DB8:000:0000:0000:0000:0000:0000 through
2001:0DB8:000:0000:FFFF:FFFF:FFFF:FFFF. The CIDR notation includes
support for IPv4 addresses. For example, 192.168.2.1/24 denotes the subnet with
addresses 192.168.2.1 through 192.168.2.255.
8.
Fazit
Im Hochverfügbarkeitsumfeld, beim Einsatz von RAC und Dataguard, spielt Oracle Net und seine
optimale Konfiguration, eine grosse Rolle zur Erreichung der Ziele. Bei nicht optimierten
Einstellungen kann nebst der Datenbank Service Verfügbarkeit auch die Datensicherheit leiden,
weil aus Performancegründen nicht die nötigen Protection-Levels gesetzt werden können. Das
Austunen lohnt sich in jedem Fall und ist durch vergleichbar einfache Mittel zu erreichen. Schon
ab Oracle 10gR2 sind die wichtigen Funktionalitäten vorhanden, mit 11gR1 und R2 sind eher
kleinere Verbesserungen eingeführt worden.
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 01.12.2010 . Seite 4 / 5
Viel Erfolg beim Einsatz von Trivadis-Know-how wünscht Ihnen
Konrad Häfeli
Trivadis AG
Papiermühlestrasse 73
CH-3014 Bern
Internet: www.trivadis.com
Tel:
Fax:
Mail:
+41-(0) 31-928 09 60
+41-(0) 31-928 09 64
[email protected]
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 01.12.2010 . Seite 5 / 5
Herunterladen