SlideShare ist ein Scribd-Unternehmen logo
1 von 49
markusdba.de|.net
markusdba
Wie kommt der Client zur Datenbank?
Oracle Net für Einsteiger
Markus Flechtner
Markus Flechtner
• Principal Consultant, Trivadis, Düsseldorf
• Oracle seit 1990: SW-Entwicklung, Support, DBA
• Schwerpunkte: RAC, HA, Upgrade & Migration
• Kursreferent: RAC, New Features, Multitenant,
PostgreSQL
• Co-Autor des Buches "Der Oracle DBA"
(Hanser, 2016)
@markusdba www.markusdba.de|.net
Agenda
• Architektur von Oracle Net
• Datenbank-Services
• Konfiguration
• Varianten der Namensauflösung
• Verschlüsselung
• Datenbank-Links
• Troubleshooting
• Zusammenfassung
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
4
Überblick
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
5
Client Datenbank-Server
mit Listener-Prozess
Icons: https://www.flaticon.com/
- PixelPerfect / phatplus
TCP-Netzwerk
LSNR
?
Host?
Port?
Datenbank-Service?
Architektur von Oracle Net
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
6
Server-/Verbindungsvarianten
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
7
Dedicated Server jede Client-Session hat einen Server Prozess
Shared Server mehrere Client-Sessions "teilen" sich die Server-Prozesse ("Shared
Server Prozesse"), "Connection Pool in der DB", selten genutzt
Database Resident Connection
Pool (DRCP)
Ein Connection Broker (CMON-Prozess der DB-Instanz) "verwaltet"
"pooled server"-Prozesse in der Instanz. Clients sind mit dem CMON-
Prozess "verbunden" und erhalten von ihm einen "pooled server"-
Prozess für ihre Abfragen.
Universal Connection Pool
(UCP)
von Oracle bereitgestellte Connection Pool-Variante, bessere
Integration Client  Oracle Datenbank
Connection Pools (Application
Server)
Der Client (Application Server) stellt Verbindungen zur DB her (meist
Dedicated Server) und verteilt die SQL-Anfragen der Anwender
(Clients) auf diese Verbindungen
Client-Varianten:OCI, JDBC, ODBC, ODP.NET ..
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
8
Oracle Call Interface (OCI) (*)/
Transparent Network
Substrate (TNS)
API für Oracle Applikationen, z.B. von SQL*Plus genutzt,
inkl. API für Oracle Netzwerk-Verbindungen,
TNS "abstrahiert" des Netzwerk-Protokoll gegenüber OCI
JDBC ("thick") JDBC-Verbindung, die auf OCI aufsetzt  OCI
ODBC Open Database Connectivity (hauptsächlich Windows)
 nutzt OCI
ODP.NET (Windows) Oracle Data Provider for .NET (Windows)  nutzt OCI
JDBC ("thin") reiner JAVA Type IV-Treiber (jar-File, z.B. "ojdbc8.jar", das
eingebunden werden muss), Verwendung empfohlen,
Voraussetzung für Universal Connection Pool (UCP)
(*) OCI steht bei Oracle inzwischen auch für "Oracle Cloud Infrastructure"
Oracle Net – Client/Server-Schichten
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
9
Quelle: Oracle Net Services Administrator's Guide
Beispiel für Verbindungsaufbau – Dedicated Server
1. Verbindungsanfrage an den Listener
2. Start eines dedizierten Server Prozesses
3. Verbindung des Clients mit dem Server-
Prozess
4. Ausführung von SQL-Befehlen
5. Resultate an Client zurückgeben
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
10
➊
➍
➎ ➋
➌
SGA
Prozess
Listener
Listener
• Nimmt die Verbindungsanfragen entgegen
• Startet einen Dedicated Server Prozess und verbindet Client und Server-Prozess oder verbindet den
Client mit einem vorhandenen Shared-Server-Prozess
• Der Listener ist an der weiteren Kommunikation zwischen Client und Server nicht beteiligt
• Standard-Port 1521, weitere Ports + Hostnamen für den gleichen Listener sind möglich
• Standard-Name "LISTENER"
• Es kann auf einem Server mehrere Listener geben (unterschiedliche Ports und/oder
Hostnamen)
• Listener sollte die höchste Software-Version der Datenbanken haben, die vom Listener "bedient"
werden
• Eine Datenbank-Instanz registriert sich über den "LREG"-Prozess beim Listener
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
11
oracle 2296 1 0 21:33 ? 00:00:00 /oracle/product/19/bin/tnslsnr LISTENER -inherit
Listener - lsnrctl
oracle@bourbaki:~/ [CDB1] lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 17-MAY-2020 23:28:08
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 17-MAY-2020 21:33:45
Uptime 0 days 1 hr. 54 min. 22 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u00/app/oracle/network/admin/listener.ora
Listener Log File /u00/app/oracle/diag/tnslsnr/bourbaki/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bourbaki.markusdba.local)(PORT=1521)))
[..]
Services Summary...
Service "SAMPLESVC.markusdba.local" has 1 instance(s).
Instance "CDB1", status READY, has 1 handler(s) for this service...
[…]
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
12
Client – Beispiel SQL Developer
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
13
Datenbank-Services
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
14
Was ist ein Datenbank-Service?
• Ein Datenbank-Service ist ein "abstrakter
Einstiegspunkt" in eine Datenbank
• Jede Datenbank hat einen
Default-Service, gebildet aus:
DB_NAME.DB_DOMAIN
• Weitere Services mit unterschiedlichen
"Service-Eigenschaften" können
für eine DB definiert werden
• Tipp: für jede Applikation ein Service
• Services helfen z.B. bei
• Performance-Auswertungen
• Resource-Management
• Anmeldung an eine Datenbank
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
15
Datenbank DOAGDB
CRM Applikation
CRM.markusdba.local
HR Applikation
HR.markusdba.local
BI Applikation
BI.markusdba.local
Wie legt man einen Datenbank-Service an?
• Die Service-Administration erfolgt über das DBMS_SERVICE Package
• Starten des Services
• Der LREG Prozess der Datenbank-Instanz registriert den Default-Service beim Listener
• Beim Starten einer Instanz erfolgt kein automatischer Start der zusätzlichen Services
 "AFTER-STARTUP-OF-DATABASE"-Trigger anlegen, der DBMS_SERVICE.START_SERVICE
ausführt
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
16
SQL> exec DBMS_SERVICE.CREATE_SERVICE(
service_name => 'CRM.markusdba.local'
,network_name => 'CRM.markusdba.local')
SQL> exec DBMS_SERVICE.START_SERVICE(
service_name => 'CRM.markusdba.local’);
• Service stoppen
• Service löschen
• Alle Sessions, die einen Service nutzen, beenden
SQL> exec DBMS_SERVICE.STOP_SERVICE(
service_name => 'CRM.markusdba.local');
Service-Management (1)
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
17
SQL> exec DBMS_SERVICE.DELETE_SERVICE(
service_name => 'CRM.markusdba.local');
SQL> exec DBMS_SERVICE.DISCONNECT_SESSION(
service_name => 'CRM.markusdba.local');
• Welche Services laufen in einer Instanz?
• Welche Session nutzt welchen Service?
SQL> select * from V$ACTIVE_SERVICES;
Service-Management (2)
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
18
SQL> select sid,serial#,osuser,machine,program,username,service_name, [...]
2 from v$session;
Varianten der
Namensauflösung
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
19
Übersicht
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
20
Local Naming Die Verbindungsdaten (im Wesentlichen "host, port, DB-Service")
werden in lokalen Konfigurationsdateien abgelegt.
 vergleichbar mit einer lokalen "hosts"-Datei
Easy Connect Verbindungsdaten werden direkt beim Connect mit angegeben (für
einfache Varianten)
LDAP Verbindungsdaten werden auf einem LDAP-Server
unternehmensweit abgelegt
 vergleichbar mit DNS
Naming via URL (JDBC thin) Verbindungsdaten werden direkt beim Connect mit angegeben
• In der "tnsnames.ora"-Datei werden "Aliase" für Datenbank-Verbindungen definiert
PDB01.markusdba.local =
(DESCRIPTION =
(ADDRESS=(PROTOCOL=TCP)(HOST=bourbaki.markusdba.local)(PORT=1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDB01.markusdba.local)
)
)
Local Naming – tnsnames.ora
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
21
oracle@bourbaki:~/ [CDB1] sqlplus system/manager@pdb01.markusdba.local
SQL*Plus: Release 19.0.0.0.0 - Production on Mon May 18 16:51:22 2020
Version 19.7.0.0.0
[..]
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.7.0.0.0
SQL>
Meistens:
TNSNAMES-Alias=Service-Name
• Verbindungsinformationen werden direkt bei der Eingabe angegeben
• Wird der Standardport 1521 verwendet, dann kann der Port weggelassen werden
sqlplus <user>/<password>@<host>:<port>/<service>
EasyConnect
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
22
oracle@bourbaki:~/ sqlplus system/manager@localhost/PDB01.markusdba.local
SQL*Plus: Release 19.0.0.0.0 - Production on Mon May 18 17:01:36 2020
Version 19.7.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.7.0.0.0
SQL>
Standardport 1521
LDAP
• Verbindungsinformationen werden zentral auf einem LDAP-Server (häufig "Oracle Universal
Directory", OUD, oder "Oracle Internet Directory", OID) abgelegt
• Wird meist in großen Umgebungen mit einer sehr großen Anzahl von Clients verwendet
 Senkung des Administrationsaufwandes
• Über die Konfigurationsdatei "ldap.ora" bekommen die Clients die Informationen, welche LDAP-
Server sie ansprechen sollen
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
23
DIRECTORY_SERVERS= ldapserver1:389:636,ldapserver2:3060:3131
DEFAULT_ADMIN_CONTEXT = "dc=markusdba,dc=local"
DIRECTORY_SERVER_TYPE = OID
JDBC thin - URL
• Bei JDBC thin werden die Verbindungsdaten direkt in die URL eingetragen
• Einfache Variante:
• Komplexer (DataGuard)
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
24
connection-url="jdbc:oracle:thin:@
(DESCRIPTION=(CONNECT_TIMEOUT=5)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=OFF)(ADDRES
S=(PROTOCOL=TCP)(HOST=odin1.markusdba.local)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=o
din2.markusdba.local)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=CDB_RW.markusdba.local))
)"
connection-url="jdbc:oracle:thin:@bourbaki:1521:PDB01.markusdba.local"
Konfiguration
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
25
Konfigurationsdateien
• Speicherort:
$ORACLE_HOME/network/admin
• Oder: $TNS_ADMIN
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
26
sqlnet.ora
tnsnames.ora
listener.ora
tnsnames.ora
Client (OCI)
Server
sqlnet.ora
ldap.ora
ldap.ora
listener.ora
LISTENER =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL=IPC )(KEY=LISTENER ))
(ADDRESS =
(PROTOCOL = TCP )
(HOST = bourbaki.markusdba.local )
(PORT = 1521 )
)
)
CONNECT_TIMEOUT_LISTENER = 10
INBOUND_CONNECT_TIMEOUT_LISTENER = 10
LOGGING_LISTENER = ON
[..]
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
27
• Definiert "Aliase" für Datenbank-Verbindungen
• Komplexeres Beispiel (DataGuard)
tnsnames.ora (OCI/TNS)
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
28
CDB_RW.MARKUSDBA.LOCAL =
(DESCRIPTION =
(CONNECT_TIMEOUT = 5)
(RETRY_COUNT=3)
(ADDRESS_LIST =
(LOAD_BALANCE = OFF)
(ADDRESS = (PROTOCOL = TCP)(HOST = odin1.markusdba.local)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = odin2.markusdba.local)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CDB_RW.markusdba.local)
)
)
sqlnet.ora
# Defines the allowed name resolution methods and the resolution priority
NAMES.DIRECTORY_PATH=(LDAP, TNSNAMES, EZCONNECT )
# Default database domain
NAMES.DEFAULT_DOMAIN=markusdba.local
# Dead Connection Detection
# interval in minutes for a probe to verify that connections are active
SQLNET.EXPIRE_TIME = 10
# Connect timeouts in seconds
SQLNET.INBOUND_CONNECT_TIMEOUT = 10 # time for authentication of client
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 3 # connect timeout to instance
TCP.CONNECT_TIMEOUT = 3 # connect timeout to listener
NAMES.LDAP_CONN_TIMEOUT = 3 # connect timeout to LDAP server
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
29
• Sowie Informationen zum Logging und Tracing und zur Verschlüsselung
• .. Und mehr
Verschlüsselung
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
30
Einführung
• Standardmäßig sind Oracle Net Verbindungen nicht verschlüsselt
• Verschlüsselung kann aktiviert werden
• Verschiedene Algorithmen und Checksummen
• Verschiedene Abstufungen
• Lizenzkostenfrei 
• Sollte bei Verschlüsselung selbstverständlich sein
• Ist aber bei Oracle erst seit 2013 der Fall (Oracle Database 12c bzw. Patchset 11.2.0.4)
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
31
SQLNET.ENCRYPTION_CLIENT = requested
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256,AES192)
SQLNET.ENCRYPTION_SERVER = requested
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256,AES192)
SQLNET.CRYPTO_CHECKSUM_SERVER=requested
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA512,SHA384,SHA256,MD5)
SQLNET.CRYPTO_CHECKSUM_CLIENT=requested
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA512,SHA384,SHA256,MD5)
Konfiguration – sqlnet.ora (Beispiel)
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
32
SQLNET.ENCRYPTION_SERVER = [accepted | rejected | requested | required]
SQLNET.ENCRYPTION_TYPES_SERVER = (valid_encryption_algorithm
[,valid_encryption_algorithm])
SQLNET.CRYPTO_CHECKSUM_SERVER = [accepted|rejected|requested|required]
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (valid_crypto_checksum_algorithm
[,valid_crypto_checksum_algorithm])
Konfiguration – sqlnet.ora (allgemeiner)
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
33
• Analog für die Client-Parameter
• Mögliche Algorithmen
• Verschlüsselung: RC4_256, RC4_128, AES256, AES192, AES128, … und weitere
• Checksumme: SHA512, SHA256, SHA128, SHA1 MD5
SQL> SELECT NETWORK_SERVICE_BANNER
2 FROM v$session_connect_info where sid=sys_context('USERENV','SID');
NETWORK_SERVICE_BANNER
------------------------------------------------------------------------
TCP/IP NT Protocol Adapter for Linux: Version 19.0.0.0.0 - Production
Encryption service for Linux: Version 19.0.0.0.0 - Production
AES256 Encryption service adapter for Linux: Version 19.0.0.0.0 - Production
Crypto-checksumming service for Linux: Version 19.0.0.0.0 – Production
SHA512 Crypto-checksumming service adapter for Linux: Version 19.0.0.0.0 - Production
Kontrolle
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
34
Datenbank-Links
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
35
Was sindDatenbank-Links?
• Mit einem Datenbank-Link wird eine
Datenbank "Client" bei einer anderen
Datenbank
• Anwendungsfälle
• verteilte Transaktionen
• DB-übergreifende
Applikationen
• Datenmigrationen
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
36
DOAGDB MYDB
• Kontrolle
• Anlegen eines Datenbank-Links
SQL> CREATE DATABASE LINK MYDB.markusdba.local
2 CONNECT TO scott
3 IDENTIFIED BY tiger
4 USING 'MYDB.markusdba.local';
SQL> select * from dual@MYDB.markusdba.local;
Anlegen eines DB-Links
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
37
Troubleshooting
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
38
Troubleshooting - Allgemeines
• Häufigste Fehlerquellen
• Fehler bei der Auflösung der Hostnamen
• Firewall-Einstellungen
• Fehler bei der Auflösung der tns-Aliase:
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
39
Oracle bourbaki:~/ [CDB1] tnsping somedb.markusdba.local
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 17-MAY-2020
22:53:54
Copyright (c) 1997, 2019, Oracle. All rights reserved.
Used parameter files:
/u00/app/oracle/network/admin/sqlnet.ora
TNS-03505: Failed to resolve name
Tippfehler in der tnsnames.ora
oder kein tnsnames.ora-Eintrag
Troubleshooting - Ablauf
1. Funktioniert die Auflösung des Hostnamens vom Client aus?
• Nslookup
• Ping (Achtung: ICMP kann deaktiviert werden)  ping nicht erfolgreich
• Port prüfen ("telnet <host> <port>")
2. Funktioniert die Namensauflösung (tns)?
• Tnsping <tns>
• Testet nur, ob es einen Listener gibt, der auf Host, Port und Service-Namen "lauscht" (und ob
der Listener läuft)
3. Datenbank-Connect mit SQL*Plus versuchen
• Prüft dann ob Username/Password passen
• Tipp:
• Wenn auf dem Client kein Oracle-Client installiert ist  Oracle-Instant-Client nutzen
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
40
Was kommt beim Listener an?– listener.log
• Datei in $ORACLE_BASE/diag/tnslsnr/<hostname>/trace
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
41
2020-05-17T23:07:31.259495+02:00
17-MAY-2020 23:07:31 * ping * 0
2020-05-17T23:08:16.276321+02:00
17-MAY-2020 23:08:28 *
(CONNECT_DATA=(SERVICE_NAME=nonexistingsvc.markusdba.local)(CID=(PROGRAM=sqlplus)(HOST=bour
baki.markusdba.local)(USER=oracle))) *
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.108)(PORT=48378)) * establish *
nonexistingsvc.markusdba.local * 12514
TNS-12514: TNS:listener does not currently know of service requested in connect descriptor
17-MAY-2020 23:08:16 *
(CONNECT_DATA=(SERVICE_NAME=samplesvc.markusdba.local)(CID=(PROGRAM=sqlplus)(HOST=bourbaki.
markusdba.local)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.108)(PORT=48375))
* establish * samplesvc.markusdba.local * 0
Erfolgreicher tnsping
Connect-Versuch auf einen nicht-
vorhandenen Service
Erfolgreicher Connect
Logging & Tracing
• Auf Client- und Server-Ebene kann Logging und Tracing aktiviert werden, um weitere Diagnose-
Informationen zu bekommen
• Ist eher selten notwendig
• Kann eine große Menge an Daten generieren (=> Ausschalten nicht vergessen)
• Ergebnisse (Trace-Dateien) standardmäßig im ADR auf dem Server bzw. Client
• Weitere Informationen
• MOS-Note: 219968.1- SQL*Net & Oracle Net Services - Tracing and Logging at a Glance
• MOS-Note: 454927.1 - Using and Disabling the Automatic Diagnostic Repository (ADR) with
Oracle Net for 11g
• Oracle - Deutschsprachiger Datenbank & Cloud Technologie Blog:
https://blogs.oracle.com/coretec/was-geht-ab-sqlnet-tracing-erste-schritte-bei-der-
fehlersuche
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
42
Zusammenfassung
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
43
Zusammenfassung & Ausblick
• Oracle Net für die Verbindung zwischen Datenbank-Client und Server
• Die Client-Varianten lassen sich im Wesentlichen auf "OCI/TNS" und "JDBC thin" reduzieren
• Für unterschiedliche Anwendungsbereiche (z.B. abhängig von der Unternehemensgröße) gibt es
verschiedene Varianten der Namensauflösung
• Ausblick
• Es gibt weitere Parameter für Last-Verteilung, Failover-Verhalten, Timeouts etc.
• Über die "Oracle Gateways" (kostenpflichtige Zusatzprodukte) können Datenbank-Links zu
anderen Datenbanken (SQL-Server, DB2 etc.) angelegt werden
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
44
Weitere Informationen
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
45
Weitere Informationen – Dokumentation
• Database Concepts – Kapitel 16 Application and Oracle Net Services Architecture
https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/application-and-networking-
architecture.html#GUID-8A4A6339-417F-4E7C-997B-68206F38A6EC
• 2 Day DBA – Kapitel 4 Configuring the Network Environment
https://docs.oracle.com/en/database/oracle/oracle-database/19/admqs/configuring-the-network-
environment.html#GUID-C6DD213A-D37E-4905-983D-F9DCA8AE286A
• 2 Day Java Developers Guide – Introduction to JDBC, ..
https://docs.oracle.com/en/database/oracle/oracle-database/19/tdpjd/using-java-with-oracle-
database.html#GUID-8C73108B-E0F3-4CD5-A813-909B339339BB
• Oracle Database Net Services Administrators Guide
https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/index.html
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
46
Weitere Informationen – Links & Support Notes
• SQL*Net Tracing, erste Schritte bei der Fehlersuche
https://blogs.oracle.com/coretec/was-geht-ab-sqlnet-tracing-erste-schritte-bei-der-fehlersuche
• MOS Notes
• Examples of Troubleshooting Slow Oracle Net Connections (Doc ID 1076022.1)
• How to Use and Trace Oracle Net with SQLDeveloper (Doc ID 1991711.1)
• How Oracle Net Works: Description of a Network Layout From Application/Client to Oracle Database (Doc ID
2383026.1)
• Overview and Configuration of Oracle Network Encryption (Doc ID 76629.1)
• Master Note: Overview of Database Resident Connection Pooling (DRCP) (Doc ID 1501987.1)
• SQL*Net & Oracle Net Services - Tracing and Logging at a Glance (Doc ID 219968.1)
• Using and Disabling the Automatic Diagnostic Repository (ADR) with Oracle Net for 11g (Doc ID 454927.1)
• Error "ORA-28040: No matching authentication protocol" After database upgrade to 12c (Doc ID 755605.1)
17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank?
47
Fragen & Antworten
Markus Flechtner
markus.flechtner@trivadis.com
Telefon +49 211 5866 64725
@markusdba www.markusdba.de|.net
Vortrag auf
Wie kommt der Client zur Datenbank?

Weitere ähnliche Inhalte

Ähnlich wie Wie kommt der Client zur Datenbank?

Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
Steven Grzbielok
 
Best Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL InstallationBest Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL Installation
Samuel Zürcher
 

Ähnlich wie Wie kommt der Client zur Datenbank? (20)

DOAG 2015 enterprise_securitymitlda_pundpki-pub
DOAG 2015 enterprise_securitymitlda_pundpki-pubDOAG 2015 enterprise_securitymitlda_pundpki-pub
DOAG 2015 enterprise_securitymitlda_pundpki-pub
 
Codd & ACID - ein Ausflug in die Datenbank-Theorie und Geschichte
Codd & ACID - ein Ausflug in die Datenbank-Theorie und GeschichteCodd & ACID - ein Ausflug in die Datenbank-Theorie und Geschichte
Codd & ACID - ein Ausflug in die Datenbank-Theorie und Geschichte
 
Oracle Database 12c Release 2
Oracle Database 12c Release 2 Oracle Database 12c Release 2
Oracle Database 12c Release 2
 
Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2
 
Das ende von owb was nun migrationspfade fuer owb_projekte-dani schnider-stan...
Das ende von owb was nun migrationspfade fuer owb_projekte-dani schnider-stan...Das ende von owb was nun migrationspfade fuer owb_projekte-dani schnider-stan...
Das ende von owb was nun migrationspfade fuer owb_projekte-dani schnider-stan...
 
Elasticsearch & docker mit logstash, jdbc und ruby
Elasticsearch & docker mit logstash, jdbc und rubyElasticsearch & docker mit logstash, jdbc und ruby
Elasticsearch & docker mit logstash, jdbc und ruby
 
Roadshow Oracle Database 12c: News & Features
Roadshow Oracle Database 12c: News & FeaturesRoadshow Oracle Database 12c: News & Features
Roadshow Oracle Database 12c: News & Features
 
Oracle Datenbank-Architektur
Oracle Datenbank-ArchitekturOracle Datenbank-Architektur
Oracle Datenbank-Architektur
 
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - WinterbergSCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
SCA und SDO: Konzepte und Design - OPITZ CONSULTING - Maier - Winterberg
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
Oracle und Docker
Oracle und DockerOracle und Docker
Oracle und Docker
 
Cloud Connectivity - Herausforderungen und Loesungen
Cloud Connectivity - Herausforderungen und LoesungenCloud Connectivity - Herausforderungen und Loesungen
Cloud Connectivity - Herausforderungen und Loesungen
 
PRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
PRADO - Erstellung wiederverwendbarer Enterprise-ApplikationenPRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
PRADO - Erstellung wiederverwendbarer Enterprise-Applikationen
 
HA Datasource
HA DatasourceHA Datasource
HA Datasource
 
Ldap sqlnet
Ldap sqlnetLdap sqlnet
Ldap sqlnet
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
 
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?REST in Peace  - Mit ORDS, Node.JS, ADF, Java oder OSB?
REST in Peace - Mit ORDS, Node.JS, ADF, Java oder OSB?
 
Best Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL InstallationBest Practices SharePoint and SQL Installation
Best Practices SharePoint and SQL Installation
 
20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatenge20181210_ITTage2018_OracleNoSQLDB_KPatenge
20181210_ITTage2018_OracleNoSQLDB_KPatenge
 
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...Spezialitäten der Oracle Lizenzierung -  DOAG Konferenz 2010 - OPITZ CONSULTI...
Spezialitäten der Oracle Lizenzierung - DOAG Konferenz 2010 - OPITZ CONSULTI...
 

Mehr von Markus Flechtner

Mehr von Markus Flechtner (20)

My SYSAUX tablespace is full, please
My SYSAUX tablespace is full, pleaseMy SYSAUX tablespace is full, please
My SYSAUX tablespace is full, please
 
Rolle Rückwärts - Backported Features in Oracle Database 19c
Rolle Rückwärts - Backported Features in Oracle Database 19cRolle Rückwärts - Backported Features in Oracle Database 19c
Rolle Rückwärts - Backported Features in Oracle Database 19c
 
Container Only - Neue Features für Multitenant in Oracle 21c
Container Only - Neue Features für Multitenant in Oracle 21cContainer Only - Neue Features für Multitenant in Oracle 21c
Container Only - Neue Features für Multitenant in Oracle 21c
 
OraChk
OraChkOraChk
OraChk
 
TFA - Trace File Analyzer Collector
TFA - Trace File Analyzer CollectorTFA - Trace File Analyzer Collector
TFA - Trace File Analyzer Collector
 
High Availability for Oracle SE2
High Availability for Oracle SE2High Availability for Oracle SE2
High Availability for Oracle SE2
 
My SYSAUX tablespace is full - please help
My SYSAUX tablespace is full - please helpMy SYSAUX tablespace is full - please help
My SYSAUX tablespace is full - please help
 
Datenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerDatenbank-Hausputz für Einsteiger
Datenbank-Hausputz für Einsteiger
 
Should I stay or should I go?
Should I stay or should I go?Should I stay or should I go?
Should I stay or should I go?
 
Privilege Analysis with the Oracle Database
Privilege Analysis with the Oracle DatabasePrivilege Analysis with the Oracle Database
Privilege Analysis with the Oracle Database
 
New Features for Multitenant in Oracle Database 21c
New Features for Multitenant in Oracle Database 21cNew Features for Multitenant in Oracle Database 21c
New Features for Multitenant in Oracle Database 21c
 
Oracle - Checklist for performance issues
Oracle - Checklist for performance issuesOracle - Checklist for performance issues
Oracle - Checklist for performance issues
 
Einführung in den SQL-Developer
Einführung in den SQL-DeveloperEinführung in den SQL-Developer
Einführung in den SQL-Developer
 
Oracle Database: Checklist Connection Issues
Oracle Database: Checklist Connection IssuesOracle Database: Checklist Connection Issues
Oracle Database: Checklist Connection Issues
 
Checklist for Upgrades and Migrations
Checklist for Upgrades and MigrationsChecklist for Upgrades and Migrations
Checklist for Upgrades and Migrations
 
Datenbank-Selbstverwaltung - Das Oracle-Data-Dictionary
Datenbank-Selbstverwaltung - Das Oracle-Data-DictionaryDatenbank-Selbstverwaltung - Das Oracle-Data-Dictionary
Datenbank-Selbstverwaltung - Das Oracle-Data-Dictionary
 
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
 
Taming the PDB: Resource Management and Lockdown Profiles
Taming the PDB: Resource Management and Lockdown ProfilesTaming the PDB: Resource Management and Lockdown Profiles
Taming the PDB: Resource Management and Lockdown Profiles
 
Oracle Backup & Recovery für Einsteiger
Oracle Backup & Recovery für EinsteigerOracle Backup & Recovery für Einsteiger
Oracle Backup & Recovery für Einsteiger
 
Oracle Application Containers
Oracle Application ContainersOracle Application Containers
Oracle Application Containers
 

Wie kommt der Client zur Datenbank?

  • 1. markusdba.de|.net markusdba Wie kommt der Client zur Datenbank? Oracle Net für Einsteiger Markus Flechtner
  • 2. Markus Flechtner • Principal Consultant, Trivadis, Düsseldorf • Oracle seit 1990: SW-Entwicklung, Support, DBA • Schwerpunkte: RAC, HA, Upgrade & Migration • Kursreferent: RAC, New Features, Multitenant, PostgreSQL • Co-Autor des Buches "Der Oracle DBA" (Hanser, 2016) @markusdba www.markusdba.de|.net
  • 3.
  • 4. Agenda • Architektur von Oracle Net • Datenbank-Services • Konfiguration • Varianten der Namensauflösung • Verschlüsselung • Datenbank-Links • Troubleshooting • Zusammenfassung 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 4
  • 5. Überblick 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 5 Client Datenbank-Server mit Listener-Prozess Icons: https://www.flaticon.com/ - PixelPerfect / phatplus TCP-Netzwerk LSNR ? Host? Port? Datenbank-Service?
  • 6. Architektur von Oracle Net 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 6
  • 7. Server-/Verbindungsvarianten 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 7 Dedicated Server jede Client-Session hat einen Server Prozess Shared Server mehrere Client-Sessions "teilen" sich die Server-Prozesse ("Shared Server Prozesse"), "Connection Pool in der DB", selten genutzt Database Resident Connection Pool (DRCP) Ein Connection Broker (CMON-Prozess der DB-Instanz) "verwaltet" "pooled server"-Prozesse in der Instanz. Clients sind mit dem CMON- Prozess "verbunden" und erhalten von ihm einen "pooled server"- Prozess für ihre Abfragen. Universal Connection Pool (UCP) von Oracle bereitgestellte Connection Pool-Variante, bessere Integration Client  Oracle Datenbank Connection Pools (Application Server) Der Client (Application Server) stellt Verbindungen zur DB her (meist Dedicated Server) und verteilt die SQL-Anfragen der Anwender (Clients) auf diese Verbindungen
  • 8. Client-Varianten:OCI, JDBC, ODBC, ODP.NET .. 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 8 Oracle Call Interface (OCI) (*)/ Transparent Network Substrate (TNS) API für Oracle Applikationen, z.B. von SQL*Plus genutzt, inkl. API für Oracle Netzwerk-Verbindungen, TNS "abstrahiert" des Netzwerk-Protokoll gegenüber OCI JDBC ("thick") JDBC-Verbindung, die auf OCI aufsetzt  OCI ODBC Open Database Connectivity (hauptsächlich Windows)  nutzt OCI ODP.NET (Windows) Oracle Data Provider for .NET (Windows)  nutzt OCI JDBC ("thin") reiner JAVA Type IV-Treiber (jar-File, z.B. "ojdbc8.jar", das eingebunden werden muss), Verwendung empfohlen, Voraussetzung für Universal Connection Pool (UCP) (*) OCI steht bei Oracle inzwischen auch für "Oracle Cloud Infrastructure"
  • 9. Oracle Net – Client/Server-Schichten 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 9 Quelle: Oracle Net Services Administrator's Guide
  • 10. Beispiel für Verbindungsaufbau – Dedicated Server 1. Verbindungsanfrage an den Listener 2. Start eines dedizierten Server Prozesses 3. Verbindung des Clients mit dem Server- Prozess 4. Ausführung von SQL-Befehlen 5. Resultate an Client zurückgeben 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 10 ➊ ➍ ➎ ➋ ➌ SGA Prozess Listener
  • 11. Listener • Nimmt die Verbindungsanfragen entgegen • Startet einen Dedicated Server Prozess und verbindet Client und Server-Prozess oder verbindet den Client mit einem vorhandenen Shared-Server-Prozess • Der Listener ist an der weiteren Kommunikation zwischen Client und Server nicht beteiligt • Standard-Port 1521, weitere Ports + Hostnamen für den gleichen Listener sind möglich • Standard-Name "LISTENER" • Es kann auf einem Server mehrere Listener geben (unterschiedliche Ports und/oder Hostnamen) • Listener sollte die höchste Software-Version der Datenbanken haben, die vom Listener "bedient" werden • Eine Datenbank-Instanz registriert sich über den "LREG"-Prozess beim Listener 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 11 oracle 2296 1 0 21:33 ? 00:00:00 /oracle/product/19/bin/tnslsnr LISTENER -inherit
  • 12. Listener - lsnrctl oracle@bourbaki:~/ [CDB1] lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 17-MAY-2020 23:28:08 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 17-MAY-2020 21:33:45 Uptime 0 days 1 hr. 54 min. 22 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u00/app/oracle/network/admin/listener.ora Listener Log File /u00/app/oracle/diag/tnslsnr/bourbaki/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bourbaki.markusdba.local)(PORT=1521))) [..] Services Summary... Service "SAMPLESVC.markusdba.local" has 1 instance(s). Instance "CDB1", status READY, has 1 handler(s) for this service... […] 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 12
  • 13. Client – Beispiel SQL Developer 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 13
  • 14. Datenbank-Services 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 14
  • 15. Was ist ein Datenbank-Service? • Ein Datenbank-Service ist ein "abstrakter Einstiegspunkt" in eine Datenbank • Jede Datenbank hat einen Default-Service, gebildet aus: DB_NAME.DB_DOMAIN • Weitere Services mit unterschiedlichen "Service-Eigenschaften" können für eine DB definiert werden • Tipp: für jede Applikation ein Service • Services helfen z.B. bei • Performance-Auswertungen • Resource-Management • Anmeldung an eine Datenbank 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 15 Datenbank DOAGDB CRM Applikation CRM.markusdba.local HR Applikation HR.markusdba.local BI Applikation BI.markusdba.local
  • 16. Wie legt man einen Datenbank-Service an? • Die Service-Administration erfolgt über das DBMS_SERVICE Package • Starten des Services • Der LREG Prozess der Datenbank-Instanz registriert den Default-Service beim Listener • Beim Starten einer Instanz erfolgt kein automatischer Start der zusätzlichen Services  "AFTER-STARTUP-OF-DATABASE"-Trigger anlegen, der DBMS_SERVICE.START_SERVICE ausführt 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 16 SQL> exec DBMS_SERVICE.CREATE_SERVICE( service_name => 'CRM.markusdba.local' ,network_name => 'CRM.markusdba.local') SQL> exec DBMS_SERVICE.START_SERVICE( service_name => 'CRM.markusdba.local’);
  • 17. • Service stoppen • Service löschen • Alle Sessions, die einen Service nutzen, beenden SQL> exec DBMS_SERVICE.STOP_SERVICE( service_name => 'CRM.markusdba.local'); Service-Management (1) 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 17 SQL> exec DBMS_SERVICE.DELETE_SERVICE( service_name => 'CRM.markusdba.local'); SQL> exec DBMS_SERVICE.DISCONNECT_SESSION( service_name => 'CRM.markusdba.local');
  • 18. • Welche Services laufen in einer Instanz? • Welche Session nutzt welchen Service? SQL> select * from V$ACTIVE_SERVICES; Service-Management (2) 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 18 SQL> select sid,serial#,osuser,machine,program,username,service_name, [...] 2 from v$session;
  • 19. Varianten der Namensauflösung 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 19
  • 20. Übersicht 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 20 Local Naming Die Verbindungsdaten (im Wesentlichen "host, port, DB-Service") werden in lokalen Konfigurationsdateien abgelegt.  vergleichbar mit einer lokalen "hosts"-Datei Easy Connect Verbindungsdaten werden direkt beim Connect mit angegeben (für einfache Varianten) LDAP Verbindungsdaten werden auf einem LDAP-Server unternehmensweit abgelegt  vergleichbar mit DNS Naming via URL (JDBC thin) Verbindungsdaten werden direkt beim Connect mit angegeben
  • 21. • In der "tnsnames.ora"-Datei werden "Aliase" für Datenbank-Verbindungen definiert PDB01.markusdba.local = (DESCRIPTION = (ADDRESS=(PROTOCOL=TCP)(HOST=bourbaki.markusdba.local)(PORT=1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = PDB01.markusdba.local) ) ) Local Naming – tnsnames.ora 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 21 oracle@bourbaki:~/ [CDB1] sqlplus system/manager@pdb01.markusdba.local SQL*Plus: Release 19.0.0.0.0 - Production on Mon May 18 16:51:22 2020 Version 19.7.0.0.0 [..] Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.7.0.0.0 SQL> Meistens: TNSNAMES-Alias=Service-Name
  • 22. • Verbindungsinformationen werden direkt bei der Eingabe angegeben • Wird der Standardport 1521 verwendet, dann kann der Port weggelassen werden sqlplus <user>/<password>@<host>:<port>/<service> EasyConnect 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 22 oracle@bourbaki:~/ sqlplus system/manager@localhost/PDB01.markusdba.local SQL*Plus: Release 19.0.0.0.0 - Production on Mon May 18 17:01:36 2020 Version 19.7.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.7.0.0.0 SQL> Standardport 1521
  • 23. LDAP • Verbindungsinformationen werden zentral auf einem LDAP-Server (häufig "Oracle Universal Directory", OUD, oder "Oracle Internet Directory", OID) abgelegt • Wird meist in großen Umgebungen mit einer sehr großen Anzahl von Clients verwendet  Senkung des Administrationsaufwandes • Über die Konfigurationsdatei "ldap.ora" bekommen die Clients die Informationen, welche LDAP- Server sie ansprechen sollen 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 23 DIRECTORY_SERVERS= ldapserver1:389:636,ldapserver2:3060:3131 DEFAULT_ADMIN_CONTEXT = "dc=markusdba,dc=local" DIRECTORY_SERVER_TYPE = OID
  • 24. JDBC thin - URL • Bei JDBC thin werden die Verbindungsdaten direkt in die URL eingetragen • Einfache Variante: • Komplexer (DataGuard) 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 24 connection-url="jdbc:oracle:thin:@ (DESCRIPTION=(CONNECT_TIMEOUT=5)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=OFF)(ADDRES S=(PROTOCOL=TCP)(HOST=odin1.markusdba.local)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=o din2.markusdba.local)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=CDB_RW.markusdba.local)) )" connection-url="jdbc:oracle:thin:@bourbaki:1521:PDB01.markusdba.local"
  • 25. Konfiguration 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 25
  • 26. Konfigurationsdateien • Speicherort: $ORACLE_HOME/network/admin • Oder: $TNS_ADMIN 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 26 sqlnet.ora tnsnames.ora listener.ora tnsnames.ora Client (OCI) Server sqlnet.ora ldap.ora ldap.ora
  • 27. listener.ora LISTENER = (ADDRESS_LIST = (ADDRESS = (PROTOCOL=IPC )(KEY=LISTENER )) (ADDRESS = (PROTOCOL = TCP ) (HOST = bourbaki.markusdba.local ) (PORT = 1521 ) ) ) CONNECT_TIMEOUT_LISTENER = 10 INBOUND_CONNECT_TIMEOUT_LISTENER = 10 LOGGING_LISTENER = ON [..] 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 27
  • 28. • Definiert "Aliase" für Datenbank-Verbindungen • Komplexeres Beispiel (DataGuard) tnsnames.ora (OCI/TNS) 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 28 CDB_RW.MARKUSDBA.LOCAL = (DESCRIPTION = (CONNECT_TIMEOUT = 5) (RETRY_COUNT=3) (ADDRESS_LIST = (LOAD_BALANCE = OFF) (ADDRESS = (PROTOCOL = TCP)(HOST = odin1.markusdba.local)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = odin2.markusdba.local)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = CDB_RW.markusdba.local) ) )
  • 29. sqlnet.ora # Defines the allowed name resolution methods and the resolution priority NAMES.DIRECTORY_PATH=(LDAP, TNSNAMES, EZCONNECT ) # Default database domain NAMES.DEFAULT_DOMAIN=markusdba.local # Dead Connection Detection # interval in minutes for a probe to verify that connections are active SQLNET.EXPIRE_TIME = 10 # Connect timeouts in seconds SQLNET.INBOUND_CONNECT_TIMEOUT = 10 # time for authentication of client SQLNET.OUTBOUND_CONNECT_TIMEOUT = 3 # connect timeout to instance TCP.CONNECT_TIMEOUT = 3 # connect timeout to listener NAMES.LDAP_CONN_TIMEOUT = 3 # connect timeout to LDAP server 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 29 • Sowie Informationen zum Logging und Tracing und zur Verschlüsselung • .. Und mehr
  • 30. Verschlüsselung 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 30
  • 31. Einführung • Standardmäßig sind Oracle Net Verbindungen nicht verschlüsselt • Verschlüsselung kann aktiviert werden • Verschiedene Algorithmen und Checksummen • Verschiedene Abstufungen • Lizenzkostenfrei  • Sollte bei Verschlüsselung selbstverständlich sein • Ist aber bei Oracle erst seit 2013 der Fall (Oracle Database 12c bzw. Patchset 11.2.0.4) 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 31
  • 32. SQLNET.ENCRYPTION_CLIENT = requested SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256,AES192) SQLNET.ENCRYPTION_SERVER = requested SQLNET.ENCRYPTION_TYPES_SERVER = (AES256,AES192) SQLNET.CRYPTO_CHECKSUM_SERVER=requested SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA512,SHA384,SHA256,MD5) SQLNET.CRYPTO_CHECKSUM_CLIENT=requested SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA512,SHA384,SHA256,MD5) Konfiguration – sqlnet.ora (Beispiel) 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 32
  • 33. SQLNET.ENCRYPTION_SERVER = [accepted | rejected | requested | required] SQLNET.ENCRYPTION_TYPES_SERVER = (valid_encryption_algorithm [,valid_encryption_algorithm]) SQLNET.CRYPTO_CHECKSUM_SERVER = [accepted|rejected|requested|required] SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (valid_crypto_checksum_algorithm [,valid_crypto_checksum_algorithm]) Konfiguration – sqlnet.ora (allgemeiner) 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 33 • Analog für die Client-Parameter • Mögliche Algorithmen • Verschlüsselung: RC4_256, RC4_128, AES256, AES192, AES128, … und weitere • Checksumme: SHA512, SHA256, SHA128, SHA1 MD5
  • 34. SQL> SELECT NETWORK_SERVICE_BANNER 2 FROM v$session_connect_info where sid=sys_context('USERENV','SID'); NETWORK_SERVICE_BANNER ------------------------------------------------------------------------ TCP/IP NT Protocol Adapter for Linux: Version 19.0.0.0.0 - Production Encryption service for Linux: Version 19.0.0.0.0 - Production AES256 Encryption service adapter for Linux: Version 19.0.0.0.0 - Production Crypto-checksumming service for Linux: Version 19.0.0.0.0 – Production SHA512 Crypto-checksumming service adapter for Linux: Version 19.0.0.0.0 - Production Kontrolle 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 34
  • 35. Datenbank-Links 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 35
  • 36. Was sindDatenbank-Links? • Mit einem Datenbank-Link wird eine Datenbank "Client" bei einer anderen Datenbank • Anwendungsfälle • verteilte Transaktionen • DB-übergreifende Applikationen • Datenmigrationen 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 36 DOAGDB MYDB
  • 37. • Kontrolle • Anlegen eines Datenbank-Links SQL> CREATE DATABASE LINK MYDB.markusdba.local 2 CONNECT TO scott 3 IDENTIFIED BY tiger 4 USING 'MYDB.markusdba.local'; SQL> select * from dual@MYDB.markusdba.local; Anlegen eines DB-Links 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 37
  • 38. Troubleshooting 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 38
  • 39. Troubleshooting - Allgemeines • Häufigste Fehlerquellen • Fehler bei der Auflösung der Hostnamen • Firewall-Einstellungen • Fehler bei der Auflösung der tns-Aliase: 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 39 Oracle bourbaki:~/ [CDB1] tnsping somedb.markusdba.local TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 17-MAY-2020 22:53:54 Copyright (c) 1997, 2019, Oracle. All rights reserved. Used parameter files: /u00/app/oracle/network/admin/sqlnet.ora TNS-03505: Failed to resolve name Tippfehler in der tnsnames.ora oder kein tnsnames.ora-Eintrag
  • 40. Troubleshooting - Ablauf 1. Funktioniert die Auflösung des Hostnamens vom Client aus? • Nslookup • Ping (Achtung: ICMP kann deaktiviert werden)  ping nicht erfolgreich • Port prüfen ("telnet <host> <port>") 2. Funktioniert die Namensauflösung (tns)? • Tnsping <tns> • Testet nur, ob es einen Listener gibt, der auf Host, Port und Service-Namen "lauscht" (und ob der Listener läuft) 3. Datenbank-Connect mit SQL*Plus versuchen • Prüft dann ob Username/Password passen • Tipp: • Wenn auf dem Client kein Oracle-Client installiert ist  Oracle-Instant-Client nutzen 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 40
  • 41. Was kommt beim Listener an?– listener.log • Datei in $ORACLE_BASE/diag/tnslsnr/<hostname>/trace 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 41 2020-05-17T23:07:31.259495+02:00 17-MAY-2020 23:07:31 * ping * 0 2020-05-17T23:08:16.276321+02:00 17-MAY-2020 23:08:28 * (CONNECT_DATA=(SERVICE_NAME=nonexistingsvc.markusdba.local)(CID=(PROGRAM=sqlplus)(HOST=bour baki.markusdba.local)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.108)(PORT=48378)) * establish * nonexistingsvc.markusdba.local * 12514 TNS-12514: TNS:listener does not currently know of service requested in connect descriptor 17-MAY-2020 23:08:16 * (CONNECT_DATA=(SERVICE_NAME=samplesvc.markusdba.local)(CID=(PROGRAM=sqlplus)(HOST=bourbaki. markusdba.local)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.108)(PORT=48375)) * establish * samplesvc.markusdba.local * 0 Erfolgreicher tnsping Connect-Versuch auf einen nicht- vorhandenen Service Erfolgreicher Connect
  • 42. Logging & Tracing • Auf Client- und Server-Ebene kann Logging und Tracing aktiviert werden, um weitere Diagnose- Informationen zu bekommen • Ist eher selten notwendig • Kann eine große Menge an Daten generieren (=> Ausschalten nicht vergessen) • Ergebnisse (Trace-Dateien) standardmäßig im ADR auf dem Server bzw. Client • Weitere Informationen • MOS-Note: 219968.1- SQL*Net & Oracle Net Services - Tracing and Logging at a Glance • MOS-Note: 454927.1 - Using and Disabling the Automatic Diagnostic Repository (ADR) with Oracle Net for 11g • Oracle - Deutschsprachiger Datenbank & Cloud Technologie Blog: https://blogs.oracle.com/coretec/was-geht-ab-sqlnet-tracing-erste-schritte-bei-der- fehlersuche 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 42
  • 43. Zusammenfassung 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 43
  • 44. Zusammenfassung & Ausblick • Oracle Net für die Verbindung zwischen Datenbank-Client und Server • Die Client-Varianten lassen sich im Wesentlichen auf "OCI/TNS" und "JDBC thin" reduzieren • Für unterschiedliche Anwendungsbereiche (z.B. abhängig von der Unternehemensgröße) gibt es verschiedene Varianten der Namensauflösung • Ausblick • Es gibt weitere Parameter für Last-Verteilung, Failover-Verhalten, Timeouts etc. • Über die "Oracle Gateways" (kostenpflichtige Zusatzprodukte) können Datenbank-Links zu anderen Datenbanken (SQL-Server, DB2 etc.) angelegt werden 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 44
  • 45. Weitere Informationen 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 45
  • 46. Weitere Informationen – Dokumentation • Database Concepts – Kapitel 16 Application and Oracle Net Services Architecture https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/application-and-networking- architecture.html#GUID-8A4A6339-417F-4E7C-997B-68206F38A6EC • 2 Day DBA – Kapitel 4 Configuring the Network Environment https://docs.oracle.com/en/database/oracle/oracle-database/19/admqs/configuring-the-network- environment.html#GUID-C6DD213A-D37E-4905-983D-F9DCA8AE286A • 2 Day Java Developers Guide – Introduction to JDBC, .. https://docs.oracle.com/en/database/oracle/oracle-database/19/tdpjd/using-java-with-oracle- database.html#GUID-8C73108B-E0F3-4CD5-A813-909B339339BB • Oracle Database Net Services Administrators Guide https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/index.html 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 46
  • 47. Weitere Informationen – Links & Support Notes • SQL*Net Tracing, erste Schritte bei der Fehlersuche https://blogs.oracle.com/coretec/was-geht-ab-sqlnet-tracing-erste-schritte-bei-der-fehlersuche • MOS Notes • Examples of Troubleshooting Slow Oracle Net Connections (Doc ID 1076022.1) • How to Use and Trace Oracle Net with SQLDeveloper (Doc ID 1991711.1) • How Oracle Net Works: Description of a Network Layout From Application/Client to Oracle Database (Doc ID 2383026.1) • Overview and Configuration of Oracle Network Encryption (Doc ID 76629.1) • Master Note: Overview of Database Resident Connection Pooling (DRCP) (Doc ID 1501987.1) • SQL*Net & Oracle Net Services - Tracing and Logging at a Glance (Doc ID 219968.1) • Using and Disabling the Automatic Diagnostic Repository (ADR) with Oracle Net for 11g (Doc ID 454927.1) • Error "ORA-28040: No matching authentication protocol" After database upgrade to 12c (Doc ID 755605.1) 17.05.2022 DOAG-DB-Konferenz 2020 - Wie kommt der Client zur Datenbank? 47
  • 48. Fragen & Antworten Markus Flechtner markus.flechtner@trivadis.com Telefon +49 211 5866 64725 @markusdba www.markusdba.de|.net Vortrag auf

Hinweis der Redaktion

  1. "Oracle Net" wird oft auf "SQL*Net" (= ursprünglicher Name) genannt.
  2. Der Vortrag dreht sich somit im Wesentlichen um 2 Fragen: Wie definiere ich, auf welche Verbindungsanfragen (Hostname, Port) der Datenbank-Server (genauer: der Listener) hört? Wie bekommt der Client die notwendigen Informationen zur Datenbank-Verbindung (Host, Port, Service-Name)?
  3. Presentation Layer: Two-Task Common (TTC). Oracle Net Foundation Layer Transparent Network Substrate (TNS) Oracle Protocol Support Layer TCP/IP etc. OCI = Oracle Call Interface OPI = Oracle Program Interface
  4. Dedicated Server sind geeignet für ... kleinere Client-Communities bis ca. 1000 gleichzeitige Verbindungen für Batch-Processing und Reportinganwendungen Zwingend notwendig für Startup/Shutdown-Operationen Zwingend notwendig für das Tracing von Applikationen Voraussetzung für RMAN-Backup und –Restore
  5. Standardmäßig registriert sich die Instanz bei dem Listener, der auf Port 1521 läuft. Mit dem Parameter LOCAL_LISTENER kann man aber auch einen Listener angeben, bei dem sich die Instanz registrieren soll. Weitere Informationen dazu: Database Reference – Parameter LOCAL_LISTENER: https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/LOCAL_LISTENER.html#GUID-70F5D04D-02A3-4E89-8A3F-9410B6861BC4 Database Concepts - The Oracle Net Listener https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/application-and-networking-architecture.html#GUID-D6E2465E-E8E6-4B95-95D3-B9581E264ED1
  6. Weitere lsnrctl-Befehle Lsnrctl start => Starten des Listeners Lsnrctl stop => Stoppen des Listeners Lsnrctl reload => Neues Auslesen der listener.ora Lsnrctl services => Zeigt genauere Informationen zu den Services an
  7. SQL> select con_id,name from v$active_services; CON_ID NAME ---------- -------------------------------------------------------- 5 samplepdb 1 CDB1.markusdba.local 5 SAMPLESVC.markusdba.local 1 SYS$BACKGROUND 1 SYS$USERS 1 CDB1XDB 7 pdb01
  8. Lsnrctl status zeigt alle Services, die an dem Listener registriert sind: oracle@bourbaki:~/ [rdbms19000] lsnrctl status […] Services Summary... Service "7b2136c415e70cbee0536838a8c05034.markusdba.local" has 1 instance(s). Instance "CDB1", status READY, has 1 handler(s) for this service... Service "CDB1.markusdba.local" has 1 instance(s). Instance "CDB1", status READY, has 1 handler(s) for this service... Service "CDB1XDB.markusdba.local" has 1 instance(s). Instance "CDB1", status READY, has 1 handler(s) for this service... Service "a021ed931b2c521fe0536c38a8c087ff.markusdba.local" has 1 instance(s). Instance "CDB1", status READY, has 1 handler(s) for this service... Service "pdb01.markusdba.local" has 1 instance(s). Instance "CDB1", status READY, has 1 handler(s) for this service... Service "samplepdb.markusdba.local" has 1 instance(s). Instance "CDB1", status READY, has 1 handler(s) for this service... The command completed successfully
  9. Anstelle von "(SERVICE_NAME = PDB01.markusdba.local)" kann auch mit der (historischen Variante "(ORACLE_SID=<INSTANZ>)" gearbeitet werden. Dies ist aber nicht empfohlen, denn In einer Container-Datenbank landet man damit im Root-Container (CDB$ROOT) und nicht in der PDB Beim RAC ist man mit dem Syntax auf eine der RAC-Instanzen festgelegt
  10. Im DataGuard gibt es zwei Server (bzw. Datenbanken): Primärdatenbank (aktiv) Standby-Datenbank (passiv, Änderungen auf der Primär-DB werden automatisch zur Standby-DB übertragen) Im Fehlerfall (=Ausfall der Primär-DB) wird die Standby-DB "aktiv". Damit in diesem Fall die Client-Konfiguration nicht geändert werden muss, werden beide Server in den TNSNAMES-Eintrag eingetragen. Der Service mit dem die Applikation arbeitet (CDB_RW.markusdba.local) ist nur auf der jeweiligen Primär-DB aktiv. "Findet" der Client den Service nicht auf dem einen Rechner, probiert er einen Connect auf den anderen. CONNECT_TIMEOUT = Wartezeit beim Verbindungsaufbau (Sek.) RETRY_COUNT = Anzahl der Wiederholungen beim Verbindungsaufbau) LOAD_BALANCE=OFF (keine Lastverteilung zwischen den Rechnern (geht auch nicht, da der Service immer nur auf einer Seite aktiv ist)
  11. Auszug aus dem Oracle Database 19c Licensing Guide (https://docs.oracle.com/en/database/oracle/oracle-database/19/dblic/Licensing-Information.html#GUID-AB56CEE3-955E-4E56-8B44-6075E889C283 ): " Network encryption (native network encryption, network data integrity, and SSL/TLS) and strong authentication services (Kerberos, PKI, and RADIUS) are no longer part of Oracle Advanced Security and are available in all licensed editions of all supported releases of Oracle Database." MOS Notes zum Thema "Kerberos Authentication": Oracle Support Document 132804.1 (Enabling Kerberos Authentication) https://support.oracle.com/epmos/faces/DocumentDisplay?id=132804.1 Oracle Support Document 1304004.1 (Configuring ASO Kerberos Authentication with a Microsoft Windows 2008 R2 Active Directory KDC) https://support.oracle.com/epmos/faces/DocumentDisplay?id=1304004.1
  12. Liste aller Algorithmen (gemäß https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/parameters-for-the-sqlnet.ora.html#GUID-9E9E6054-DD98-4B51-93A4-3802B5AA779F): 3des112 for triple DES with a two-key (112-bit) option 3des168 for triple DES with a three-key (168-bit) option aes128 for AES (128-bit key size) aes192 for AES (192-bit key size) aes256 for AES (256-bit key size) des for standard DES (56-bit key size) des40 for DES (40-bit key size) rc4_40 for RSA RC4 (40-bit key size) rc4_56 for RSA RC4 (56-bit key size) rc4_128 for RSA RC4 (128-bit key size) rc4_256 for RSA RC4 (256-bit key size) ARIA128 for ARIA (128-bit key size) ARIA192 for ARIA (192-bit key size) ARIA256 for ARIA (256-bit key size) SEED128 for SEED (128-bit key size) GOST256 for GOST (256-bit key size)
  13. Es gibt Public Database Links (=> nutzbar für all Datenbankbenutzer) Private Database Links (=> nur für den Eigentümer nutzbar) "Connected-User"-Datenbank Links – Public Links ohne Angabe von Benutzer und Kennwort  Benutzer und Kennwort des angemeldeten Benutzers werden verwendet (=> und müssen dann auf der Zieldatenbank identisch zur Ausgangsdatenbank sein)
  14. Wenn auf dem angesprochenen DB-Server kein Listener läuft, der auf den Port "hört", dann kommt die Fehlermeldung "No Listener".