Oracle GW / MSSQL Linked Server Setup und Besonderheiten Rainer Klomps BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF HAMBURG KOPENHAGEN LAUSANNE MÜNCHEN STUTTGART WIEN ZÜRICH
Agenda 1. Oracle Gateway / MS SQL Linked Server, was ist das? 2. Motivation zum Einsatz 3. Setup 4. Verhalten / Features / Bugs 5. Demos 2 9/6/2018
Oracle Gateway / MS SQL Linked Server, was ist das? 3 9/6/2018
Oracle Gateway / MS SQL Linked Server, was ist das? Vergleichbar mit DB-Links in Oracle Kommunikationsmittel zwischen Datenbanken unterschiedlicher Hersteller * * Linked Server ist wie einige andere SQL Server Features - unter Linux nicht verfügbar (vgl. https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-release-notes?view=sqlserver-2017) * * * * Ausnahme: Linked Server zwischen zwei SQL Server DBs 4 9/6/2018
Oracle Gateway / MS SQL Linked Server, was ist das? Graphische Darstellung der Kommunikation MSSQL Oracle DB https://docs.microsoft.com/de-de/sql/relational-databases/linked-servers/linked-servers-database-engine 5 9/6/2018
Oracle Gateway / MS SQL Linked Server, was ist das? Graphische Darstellung der Kommunikation Oracle DB - MSSQL Oracle DB Oracle TNS Oracle Gateway für MSSQL Netzwerk MSSQL 6 9/6/2018
Motivation zum Einsatz 7 9/6/2018
Motivation zum Einsatz DB Kommunikation Integration Migration Lizenzkosteneinsparung Datenkonsolidierung 8 9/6/2018
Setup 9 9/6/2018
Setup - Standard Linked Server Bestandteil der SQL Server Installation OLE DB Provider für Microsoft Directory Services (ADsDSOObject) OLE DB Simple Provider (MSDAOSP) Microsoft OLE DB Provider for ODBC Drivers (MSDASQL) Microsoft OLE DB Provider for Analysis Services 14.0 (MSOLAP) Microsoft OLE DB Provider for Search (Search.CollatorDSO) SQL Server Native Client 11.0 (SQLNCLI11) Microsoft OLE DB Provider for SQL Server (SQLOLEDB) OLE DB Provider for SQL Server Integration Services (SSISOLEDB) 10 9/6/2018
Setup - Verfügbare Oracle Gateways Die folgenden Gateways sind im Rahmen der Oracle Gateway Installation auswählbar Oracle Database Gateway für Informix Sybase MS SQL Server Teradata APPC (advanced program to program communication IBM mainframe) WebSphere MQ ODBC (keine Lizenzkosten,kein Support) DRDA (Distributed Relational Database Architecture) Oracle Provider for DRDA 11 9/6/2018
Setup Linked Server (1) Aktivierung von Mixed Mode Authentifizierung in der DB-Instanz 12 9/6/2018
Setup Linked Server (2) Installation des Oracle Provider for OLE DB 64 bit (Komponente der benutzerdefinierten Oracle Client-Installation) 13 9/6/2018
Setup Linked Server (3) Die Einstellung der Eigenschaft InProcess für den Oracle OLE DB Provider ist zwingend erforderlich. 14 9/6/2018
Setup Linked Server (4) Neuen Linked Server / Verbindungsserver anlegen 15 9/6/2018
Setup Linked Server (5) Informationen zur Anmeldung der SQL Server Session bei Oracle im Menü Sicherheit 16 9/6/2018
Setup Linked Server (6) Konfiguration der Serveroptionen 17 9/6/2018
Setup Linked Server (6) USE [master] GO EXEC master.dbo.sp_addlinkedserver @server = N'MSSQL_2_P_GWDEMO', @srvproduct=n'', @provider=n'oraoledb.oracle, @datasrc=n'rkls-datenquirl/p_gwdemo' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'collation compatible', @optvalue=n'false' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'data access', @optvalue=n'true' GO 18 9/6/2018
Setup Linked Server (7) EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'dist', @optvalue=n'false' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'pub', @optvalue=n'false' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'rpc', @optvalue=n'true' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'rpc out', @optvalue=n'true' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'sub', @optvalue=n'false' GO 19 9/6/2018
Setup Linked Server (8) EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'connect timeout', @optvalue=n'0' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'collation name', @optvalue=null GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'lazy schema validation', @optvalue=n'false' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'query timeout', @optvalue=n'0' GO 20 9/6/2018
Setup Linked Server (9) EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'use remote collation', @optvalue=n'true' GO EXEC master.dbo.sp_serveroption @server=n'mssql_2_p_gwdemo', @optname=n'remote proc transaction promotion', @optvalue=n'true' GO USE [master] GO EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'MSSQL_2_P_GWDEMO', @locallogin = NULL, @useself = N'False', @rmtuser = N scott', @rmtpassword = N tiger' GO 21 9/6/2018
Setup Oracle Gateway (1) Installationsverzeichnis 22 9/6/2018
Setup Oracle Gateway (2) Produkte 23 9/6/2018
Setup Oracle Gateway (3) Informationen zur SQL Server DB 24 9/6/2018
Setup Oracle Gateway (4) Listener / Tnsnames-Konfiguration 25 9/6/2018
Setup Oracle Gateway (6) Listener Name / Protokoll 26 9/6/2018
Setup Oracle Gateway (7) Listener Port 27 9/6/2018
Setup Oracle Gateway (8) Für das Gateway muss eine Oracle SID eingerichtet werden (Default: dg4msql) Für jede Verbindung und für jede Kombination von Gateway-Parametern muss es eine separate SID ( GWSID ) geben. Die zu einer GWSID gehörenden Konfigurationsdateien befinden sich unter <GW_HOME>\<GWSID>, also beispielsweise C:\app\oragw\product\18.0.0\tghome_1\dg4msql <GW_HOME>\<GWSID>\admin\dg4msql_cvw.sql <GW_HOME>\<GWSID>\admin\dg4msql_tx.sql <GW_HOME>\<GWSID>\admin\ initdg4msql.ora Ausnahme: TNS-Dateien (Views) (TX-Log) (Parameter) <GW_HOME>\network\admin\listener.ora, tnsnames.ora, sqlnet.ora 28 9/6/2018
Setup Oracle Gateway (9) Die 12c Gateway-Installation änderte die TNS-Einstellungen, so dass der Listener aus dem neuen GW_HOME verwendet wurde (18c OK) Pflege der Dateien listener.ora, tnsnames.ora und sqlnet.ora damit bei 12c in GW_HOME In der master-db von SQL Server muss eine Tabelle zur Unterstützung des Two- Phase-Commit angelegt werden (<TG_HOME>\<GW_SID>\admin\dg4msql_tx.sql) Im Zielschema des DB-Links müssen Views zum Zugriff auf Spalten-Informationen angelegt werden (<TG_HOME>\<GW_SID>\admin\dg4msql_cvw.sql) "dbo"."all/user_cons_columns_vw "dbo"."all /USER _IND_COLUMNS_vw 29 9/6/2018
Setup Oracle Gateway (10) listener.ora ($GW_HOME\network\admin) LISTENER_GW = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = RKLs-Datenquirl)(PORT = 1522)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522)) ) ) 30 9/6/2018
Setup Oracle Gateway (11) listener.ora ($GW_HOME\network\admin) SID_LIST_LISTENER_GW = (SID_LIST = (SID_DESC = (SID_NAME = dg4msql) # ohne Endung.exe (PROGRAM = dg4msql) (ORACLE_HOME = C:\app\oragw\product\18.0.0\tghome_1) ) ) 31 9/6/2018
Konfiguration Zur Konfiguration der Dateien listener.ora, tnsnames.ora, init<gw_sid>.ora und des DB-Links bietet Oracle Support unter Doc ID 1351616.1 ein Tool an, das nach Eingabe der benötigten Parameter die entsprechenden Dateien / das Statement für den DB-Link generiert. 32 9/6/2018
Konfiguration 33 9/6/2018
Verhalten / Features / Bugs 34 9/6/2018
Verhalten / Features / Bugs Oracle / Gateway (1) (<TG_HOME>\<GW_SID>\admin\initdg4msql.ora HS_FDS_CONNECT_INFO=RKLS-DATENQUIRL/RKLS- DATENQUIRL/AdventureWorks2012 In 12c select user from dual@sqlsrv FEHLER in Zeile 1: ORA-28500: Verbindung von ORACLE zu Fremdsystem gab diese Nachricht zurück: HS_FDS_CONNECT_INFO='RKLS-DATENQUIRL'/'RKLS-DATENQUIRL'/AdventureWorks2012 [Oracle][ODBC SQL Server Wire Protocol driver]general error. select failed: 0 {HY000} ORA-02063: vorherige 2 lines von SQLSRV 35 9/6/2018
Verhalten / Features / Bugs Oracle / Gateway (2) (<TG_HOME>\<GW_SID>\admin\initdg4msql.ora HS_FDS_CONNECT_INFO=RKLS-DATENQUIRL//AdventureWorks2012 behebt das Problem In 12c Unix-Pfad bei HS_FDS_TRACE_FILE_NAME HS_FDS_TRACE_FILE_NAME=C:/app/oracle/product/12.1.0/tghome_1/hs/trace/ dblink_trace.txt HS_FDS_RECOVERY_ACCOUNT / HS_FDS_RECOVERY_PWD Default: Password unverschlüsselt In 12c HS_FDS_RECOVERY_PWD = * Verschlüsselungstool <TG_HOME>\BIN\dg4pwd.exe 36 9/6/2018
Verhalten / Features / Bugs Oracle / Gateway (3) Oracle puffert die Metadaten verwendeter Objekte Wird ein Objekt nach der Verwendung von Oracle auf SQL Server Seite strukturell geändert, ist die alte Struktur weiter präsent und es kommt zu Fehlermeldungen Abhilfe: Rollback!!! Transaktionen werden durch explizites commit abgeschlossen 37 9/6/2018
Verhalten / Features / Bugs Oracle / Gateway (4) Die Gateway-Installation ändert die TNS Umgebung, so dass der Listener aus dem neuen GW_HOME verwendet wird (12c, 18c OK) Dem entsprechend müssen Konfigurationen der TNS-Parameterdateien im GW- Home durchgeführt werden (12c, 18c OK) Default Authentifizierung: DB 38 9/6/2018
Verhalten / Features / Bugs MSSQL / Linked Server (1) Transaktionen werden implizit nach jedem DML-Statement abgeschlossen Transaktionsverhalten entsprechend Oracle möglich mit set xact_abort on begin distributed transaction go Für alle OLE DB Provider inkl. SQL Server erforderlich, außer, wenn der OLE DB Provider geschachtelte Transaktionen zulässt 39 9/6/2018
Verhalten / Features / Bugs MSSQL / Linked Server (2) Default Authentifizierung: OS Mengendifferenz except statt minus 40 9/6/2018
Demos 41 9/6/2018
Demo 1: SQL Statements SQL Server Oracle Demo: Benutzung der üblichen SQL-Server Syntax Vorteil: relativ einfach Nachteil: SQL Server holt sich die Daten vom Linked Server (hier Oracle) und führt die Abfrage aus relativ langsam, insbesondere bei Joins insert into [MSSQL_2_P_GWDEMO]..[RKL].[DEMO_1] values(1,'erste Zeile') 42 9/6/2018
Demo 2: SQL Statements SQL Server Oracle Demo: Benutzung der openquery Syntax Vorteil: pass-through query, Abfragen werden auf dem Linked Server ausgeführt, schneller, insbesondere bei größeren Joins oder relativ kleiner Ergebnismenge Nutzung existierender Indizes auf dem Linked Server Es werden nur die Ergebnisse der Abfrage zurückgeliefert insert into openquery ( MSSQL_2_P_GWDEMO, 'select * from DEMO_2 where 0=1') values (1,'Erste Zeile') 43 9/6/2018
Demo 3: SQL Statements SQL Server Oracle Demo: Direktes Übertragen von Statements an Oracle mittels exec() Vorteil: Der komplette in der exec-klammer stehende String wird 1:1 an Oracle zur Bearbeitung übergeben Performance Keine Einschränkung auf DML-Statements, auch DDL, DCL, TCL sind möglich PL/SQL ist ebenfalls möglich exec ('create table demo_3( id number, contents varchar2(20))') at MSSQL_2_P_GWDEMO; 44 9/6/2018
SQL Statements Oracle MSSQL Server Übliche, von der Verwendung von Datenbank-Links her bekannte Syntax Einige von Oracle her bekannte Tabellen/Views werden vom Gateway simuliert Beispiele: dual all/dba_users user/all/dba_cons_columns 45 9/6/2018
Demo 4: SQL Statements Oracle SQL Server Demo: Anlegen einer lokalen Kopie einer SQL Server Tabelle Mengendifferenzbildung SQLSRV Datensätze - kopierte Datensätze Timing Mengendifferenzbildung 46 9/6/2018
Rainer Klomps Senior Consultant Tel. +49 162 292 34 36 Rainer.klomps@trivadis.com 47 9/6/2018