prog:windows_dot_net_integration_plsql
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
prog:windows_dot_net_integration_plsql [2018/04/24 00:26] – gpipperr | prog:windows_dot_net_integration_plsql [2021/02/05 13:15] – [Ein .Net Library Objekt testen] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== Oracle 12c PL/SQL - Verwendung von .Net Libraries in PL/SQL - eine ".NET stored procedures" | ||
+ | |||
+ | **Erstellt 09.2017 ** | ||
+ | |||
+ | **Aufgabe**: | ||
+ | |||
+ | In einer 12c Datenbank unter MS Windows 2010 soll aus der Datenbank direkt in die Microsoft Message Queue ohne große Umwege geschrieben und gelesen werden. Da ginge zwar auch über einen REST Service, dann müsste aber der für die Microsoft Message Queue ein kompletter IIS installiert und betrieben werden. | ||
+ | |||
+ | Daher sollen nun die nativen .NET Klassen von Microsoft direkt in der Datenbank über einen PL/SQL Wrapper verwendet werden. Das kann über ".NET Stored Procedures" | ||
+ | |||
+ | ====.NET Stored Procedures - Übersicht ==== | ||
+ | |||
+ | * Können in jeder .Net compatiblen Sprache erstellt werden, wie C# und VB | ||
+ | * Können aus PL/SQL und SQL im gesamten Datenbank Scope verwendet werden | ||
+ | * Werden über das Package DBMS_CLR aufgerufen | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | Voraussetzung: | ||
+ | |||
+ | * " | ||
+ | * Microsoft .NET Framework auf dem Datenbank Server installiert | ||
+ | * " | ||
+ | * Oracle CLR Host Service angelegt | ||
+ | * Oracle Listener für den Aufruf des CLR konfiguriert | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ====DB Umgebung für den Aufruf einer ".NET Stored Procedures" | ||
+ | |||
+ | |||
+ | ===Ist die Oracle Database Extensions for .NET" überhaupt installiert? | ||
+ | |||
+ | Bei der R1 der 12c wird ja alles gleich per Default mit installiert, | ||
+ | |||
+ | Prüfen ob das Werkzeug " | ||
+ | |||
+ | Damit sollte die Option auf dem System aktivierbar sein. | ||
+ | |||
+ | |||
+ | === Ist ein passendes Microsoft .NET Framework auf dem Datenbank Server installiert? | ||
+ | |||
+ | Registry Key **' | ||
+ | |||
+ | Powershell Abfrage: | ||
+ | <code powershell> | ||
+ | dir ' | ||
+ | </ | ||
+ | |||
+ | === Oracle Database Extensions for .NET in der Datenbank aktivieren === | ||
+ | |||
+ | Mit **chopt** die DB Option aktivieren ( vor 19c!): | ||
+ | |||
+ | <code powershell> | ||
+ | |||
+ | # Datenbank Home setzen! | ||
+ | |||
+ | chopt enable ode_net | ||
+ | |||
+ | Writing to C:/ | ||
+ | mkdir C: | ||
+ | |||
+ | </ | ||
+ | |||
+ | Pürfen ob in der Datenbank das DB Directory " | ||
+ | |||
+ | Falls nicht nachinstallieren mit "< | ||
+ | |||
+ | Fehlt z.B. falls die 12c DB zuvor von einer 11g upgegraded wurde! | ||
+ | === Den Oracle CLR Host Service anlegen === | ||
+ | |||
+ | |||
+ | Passwort des Users, unter dem die Datenbank läuft , zuvor heraussuchen! | ||
+ | |||
+ | |||
+ | Mit **oraclrctl -new** den Oracle Database Extensions for .NET windows | ||
+ | service anlegen | ||
+ | |||
+ | Administrative Powershell Session starten: | ||
+ | <code powershell> | ||
+ | # Datenbank Home setzen! | ||
+ | |||
+ | oraclrctl -new | ||
+ | Enter password for orarun: | ||
+ | |||
+ | OracleOraDB12Home1ClrAgent service is being created. | ||
+ | OracleOraDB12Home1ClrAgent service was created successfully. | ||
+ | OracleOraDB12Home1ClrAgent service is starting.. | ||
+ | OracleOraDB12Home1ClrAgent service was started successfully. | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Es wird der Service OracleOraDB12Home1ClrAgent | ||
+ | |||
+ | Über die Registry lassen sich dann auch die Parameter konfigurieren. | ||
+ | |||
+ | ===Oracle Listener für den Aufruf des CLR konfigurieren=== | ||
+ | |||
+ | In der " | ||
+ | |||
+ | listener.ora: | ||
+ | |||
+ | <code bash> | ||
+ | SID_LIST_LISTENER = | ||
+ | (SID_LIST = | ||
+ | (SID_DESC = | ||
+ | (SID_NAME = CLRExtProc) | ||
+ | (ORACLE_HOME = C: | ||
+ | (PROGRAM = extproc) | ||
+ | (ENVS = " | ||
+ | ) | ||
+ | (SID_DESC = | ||
+ | | ||
+ | | ||
+ | | ||
+ | ) | ||
+ | (SID_DESC = | ||
+ | (GLOBAL_DBNAME = GPI) | ||
+ | (ORACLE_HOME = C: | ||
+ | (SID_NAME = GPI) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | |||
+ | LISTENER= | ||
+ | (DESCRIPTION_LIST = | ||
+ | (DESCRIPTION = | ||
+ | (ADDRESS = (PROTOCOL = TCP) (HOST = 10.10.10.1)(PORT = 1521)) | ||
+ | (ADDRESS = (PROTOCOL = TCPS)(HOST = 10.10.10.1)(PORT = 2484)) | ||
+ | (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC1)) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | tnsnames.ora Einträge hinzufügen/ | ||
+ | |||
+ | tnsnames.ora: | ||
+ | <code bash> | ||
+ | ORACLR_CONNECTION_DATA = | ||
+ | (DESCRIPTION = | ||
+ | (ADDRESS_LIST = | ||
+ | (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) | ||
+ | ) | ||
+ | (CONNECT_DATA = | ||
+ | (SID = CLRExtProc) | ||
+ | (PRESENTATION = RO) | ||
+ | ) | ||
+ | ) | ||
+ | | ||
+ | EXTPROC_CONNECTION_DATA = | ||
+ | (DESCRIPTION = | ||
+ | (ADDRESS_LIST = | ||
+ | (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) | ||
+ | ) | ||
+ | (CONNECT_DATA = | ||
+ | (SID = PLSExtProc) | ||
+ | (PRESENTATION = RO) | ||
+ | ) | ||
+ | ) | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | == Test mit tnsping auf die ExtProc Einträge == | ||
+ | |||
+ | |||
+ | Allerdings führt ein erster Test mit " | ||
+ | |||
+ | |||
+ | <fc # | ||
+ | |||
+ | Darauf achten das der **KEY** in der Listener.ora und der tnsnames.ora auch den selben Wert haben! | ||
+ | |||
+ | Wie " | ||
+ | |||
+ | Siehe: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Alle Einstellungen prüfen, der tnsping muss erfolgreich sein! | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Ein .Net Library Objekt testen==== | ||
+ | |||
+ | |||
+ | <fc # | ||
+ | |||
+ | |||
+ | |||
+ | === Fehler ORA-28575 debuggen === | ||
+ | |||
+ | Normalerweise: | ||
+ | < | ||
+ | ORA-28575 - unable to open RPC connection to external procedure agent | ||
+ | Cause: tnsnames.ora and listener.ora files have not been correctly configured to use external procedures. | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Auf das richtige Oracle Home im SID Descriptor achten! | ||
+ | |||
+ | Im Listner.log suchen ob gleichzeitig dort ein Fehler wie TNS-12518 auftritt! | ||
+ | |||
+ | Test: | ||
+ | |||
+ | <code sql> | ||
+ | |||
+ | GPI@GPI-saturn> | ||
+ | select callExternalDDLProc from dual | ||
+ | * | ||
+ | ERROR at line 1: | ||
+ | ORA-28575: unable to open RPC connection to external procedure agent | ||
+ | |||
+ | </ | ||
+ | |||
+ | Debug: | ||
+ | |||
+ | * Tnsping auf ORACLR_CONNECTION_DATA und EXTPROC_CONNECTION_DATA durchführen, | ||
+ | * Testen ob das " | ||
+ | PS D: | ||
+ | |||
+ | Oracle Corporation --- TUESDAY | ||
+ | |||
+ | Heterogeneous Agent Release 12.1.0.2.0 - 64bit Production | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | hmm... | ||
+ | |||
+ | Könnte mit meinen Problem [[dba: | ||
+ | |||
+ | Fehler : ORA-28575: unable to open RPC connection to external procedure agent | ||
+ | |||
+ | Siehe auch : Configuring Listener To Spawn EXTPROC Agent Is Not Working in 12.2, EXTPROC_CONNECTION_DATA Is Not Getting Resolved. (Doc ID 2326592.1) | ||
+ | |||
+ | <fc # | ||
+ | |||
+ | Darauf achten, das die TNSNAME.ora auch vom Oracle System User gelesen wird! | ||
+ | |||
+ | Nicht das dieser eine andere TNSNAMES.ora verwenden! | ||
+ | |||
+ | |||
+ | Ist man sich das alles richtig ist hilft nur weiter suchen. | ||
+ | |||
+ | Dieser manuelle Ansatz um den Fehler ORA-28575 " | ||
+ | |||
+ | |||
+ | Ablauf: | ||
+ | * DLL mit den .Net Klassen nach **" | ||
+ | * Als SYS User ein Library Objekt anlegen< | ||
+ | CREATE OR REPLACE LIBRARY SKA_MQ_CONNECT_DDL AS ' | ||
+ | |||
+ | </ | ||
+ | * Rechte an den gewünchten User vergeben< | ||
+ | * PL/SQL Wrapper im User Schema für den Aufruf der DLL erstellen wie zum Beispiel:< | ||
+ | CREATE OR REPLACE FUNCTION callExternalDDLProc | ||
+ | | ||
+ | NAME " | ||
+ | | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Test auf einer anderen Maschine ergibt die folgende Fehlermeldung: | ||
+ | |||
+ | <code sql> | ||
+ | SCOTT@VDS-12cwin2012ora01> | ||
+ | SELECT callExternalDDLProc FROM dual | ||
+ | * | ||
+ | ERROR at line 1: | ||
+ | ORA-06521: PL/SQL: Error mapping function | ||
+ | ORA-06522: Unable to load symbol from DLL | ||
+ | |||
+ | </ | ||
+ | |||
+ | D.h. hieße ja das es hier wenigstens bis zum " | ||
+ | |||
+ | |||
+ | Support: | ||
+ | |||
+ | * ORA-06521 ORA-06522 When Using PL/SQL to Call Simple .Dll Files From C Programs (Doc ID 297906.1) | ||
+ | * Master Note For PL/SQL External Procedures (Doc ID 1136408.1) | ||
+ | * OERR: ORA-28575 " | ||
+ | * External Procedures - Troubleshooting ORA-28575 Errors (Doc ID 70638.1) | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Debug: | ||
+ | |||
+ | Trace auf dem CLR Host einstellen mit Anpassen des Registry " | ||
+ | ORACLE_HOME\ODE" | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Eine .Net Library erstellen==== | ||
+ | |||
+ | Wie erstelle ich nun aber eine passende Library? | ||
+ | |||
+ | Mir ist das zum Schluss nur über den Wizard der Oracle .Net Tools gelungen, ein manuelles Deployment scheitert an vielen Hürden.-( .. | ||
+ | |||
+ | |||
+ | Das Code für das erste Hello World Beispiel: | ||
+ | |||
+ | <code c#> | ||
+ | using System; | ||
+ | using System.Collections.Generic; | ||
+ | using System.Text; | ||
+ | using System.Data; | ||
+ | using Oracle.DataAccess.Client; | ||
+ | using Oracle.DataAccess.Types; | ||
+ | |||
+ | namespace SKAMQConnect | ||
+ | { | ||
+ | public class Class1 | ||
+ | { | ||
+ | public static string getData() | ||
+ | { | ||
+ | string a = " | ||
+ | return a; | ||
+ | } // getData | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Ablauf (eigene Windows 10 VM): | ||
+ | |||
+ | * Installation MS Visual Studio 2015 über https:// | ||
+ | * Installation der Oracle Developer Tools for Visual Studio 2015 über http:// | ||
+ | |||
+ | |||
+ | !Achtung! : Keine " | ||
+ | |||
+ | |||
+ | |||
+ | ==Installation MS Visual Studio== | ||
+ | |||
+ | Über die Microsoft Seite https:// | ||
+ | |||
+ | Um folgende Fehlermeldung zu vermeiden, "Use developer features - Developer mode aktiveren" | ||
+ | |||
+ | < | ||
+ | 2> | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==Installation der Oracle Developer Tools for Visual Studio== | ||
+ | |||
+ | Keine anderen Oracle .Net Objekte auf der Visual Studio Maschine installieren! | ||
+ | |||
+ | Nicht den MSI Installer " | ||
+ | Hier ist das " | ||
+ | |||
+ | Teste nun die Version ODAC 12c Release 4 and Oracle Developer Tools for Visual Studio (12.1.0.2.4) | ||
+ | | ||
+ | |||
+ | Normaler Oracle Installer, alles nach " | ||
+ | |||
+ | Nun taucht auch im Visual Studio das " | ||
+ | |||
+ | |||
+ | Ablauf: | ||
+ | |||
+ | * Neues Projekt über File/ | ||
+ | * Code erstellen | ||
+ | * Mit " | ||
+ | * Falls noch keine <fc # | ||
+ | * Dialog ausfüllen das assembly und stored proceduers angelegt werden sollen {{ : | ||
+ | * Projekt und Library Name ausfüllen {{ : | ||
+ | * Da die DB unter 64bit läuft => Referenced assemlies auswählen! {{ : | ||
+ | * Methode aus der Library auswählen {{ : | ||
+ | * Übersicht prüfen / Script bei Bedarf anzeigen lassen {{ : | ||
+ | * Mit " | ||
+ | |||
+ | |||
+ | Interessanterweise kann nun der Wizard tatsächlich die DDL's direkt über den SYS Connect zur Datenbank in das ORACLE_HOME/ | ||
+ | |||
+ | |||
+ | |||
+ | Für den Aufruf der Methode erzeugt der Wizard diesen Code: | ||
+ | |||
+ | <code sql> | ||
+ | FUNCTION GETDATA RETURN VARCHAR2 AUTHID CURRENT_USER IS | ||
+ | BEGIN | ||
+ | DECLARE | ||
+ | BEGIN | ||
+ | DBMS_CLR.CLEARPARAMETERS; | ||
+ | RETURN DBMS_CLR.EXECUTEVARCHARFUNCTION(' | ||
+ | END; | ||
+ | END; | ||
+ | </ | ||
+ | |||
+ | D.h. um hier die .Net CLR Host Methoden einzubinden wird massiv auf das Package DBMS_CLR zugegriffen und nicht direkt mit einer external PL/SQL Funktion gearbeitet. | ||
+ | |||
+ | Test nun in der Datenbank: | ||
+ | |||
+ | |||
+ | <code sql> | ||
+ | |||
+ | GPI@oragpi-saturn> | ||
+ | |||
+ | GETDATA | ||
+ | ---------------------------------------------------------------- | ||
+ | Return Value from DDL | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ====Fehler beim Deploy mit dem Oracle .Net Wizard==== | ||
+ | |||
+ | Leider können beim Depolyment relative viele Fehler auftreten. | ||
+ | === Fehler - Wizard meldet Directory " | ||
+ | |||
+ | Bei einer migrierten Oracle 11g nach 12 DB fehlt evtl. das **ORACLECLRDIR** | ||
+ | |||
+ | Fehlender DB Directory Eintrag, neu anlegen: | ||
+ | |||
+ | < | ||
+ | connect / as sysdban | ||
+ | create directory ORACLECLRDIR as ' | ||
+ | </ | ||
+ | |||
+ | Meist fehlt dann auch noch das DBMS_CLR Package | ||
+ | |||
+ | |||
+ | run "< | ||
+ | <code sql> | ||
+ | |||
+ | cd <Oracle Home> | ||
+ | |||
+ | sqlplus sys/ | ||
+ | |||
+ | @DBMSClr.plb | ||
+ | |||
+ | </ | ||
+ | |||
+ | === Fehler - Wizard Connection Dialog " | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | Hier MUSS zwingend der <fc # | ||
+ | |||
+ | Es kann aber ein normaler User, der gut funktioniert, | ||
+ | |||
+ | |||
+ | === Fehler - Could not load file or assembly | ||
+ | |||
+ | |||
+ | <code sql> | ||
+ | select gpi.getdata from dual | ||
+ | * | ||
+ | ERROR at line 1: | ||
+ | ORA-20100: System.BadImageFormatException | ||
+ | Could not load file or assembly ' | ||
+ | dependencies. An attempt was made to load a program with an incorrect format. | ||
+ | ORA-06512: at " | ||
+ | ORA-06512: at " | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Das sieht nach einen 32/64 Bit Konflikt aus .... | ||
+ | |||
+ | |||
+ | Darauf achten das das Projekt auch für 64bit übersetzt wird und die assembly DLL auch mit ausgeliefert worden sind! ( im Deploy Wizard mit anwählen, muss markiert sein! ) | ||
+ | |||
+ | |||
+ | === Fehler - Wizard " | ||
+ | |||
+ | |||
+ | Verliert Visual Studio die Connection zur DB (z.b. wenn die Datenbank neu gestartet werden muss), erfolgt beim Deployment die Fehlermeldung " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Visual Studio muss neu einfach gestartet werden! | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===Fehler beim Aufruf der PL/SQL Methode -ORA-20100: ODE-00008: Unspecified error in Delegate Invocation at line 1=== | ||
+ | |||
+ | |||
+ | Nächster Fehler .... | ||
+ | |||
+ | Prüfen welcher Patch eingespielt ist siehe Bug Bug 24911151 : ORA-20100: ODE-00008: UNSPECIFIED ERROR IN DELEGATE INVOCATION | ||
+ | |||
+ | Evlt. wurde beim Patch die Oracle ODAC componennten NICHT mit aktualiert! ( Stichwort | ||
+ | |||
+ | Aus dem Patch Dokument: | ||
+ | |||
+ | < | ||
+ | 3.4 Oracle .NET Assembly Setup Instructions | ||
+ | |||
+ | If you are patching Oracle .NET assemblies and existing versions reside in the Global Assembly Cache (GAC), then you must remove them from the GAC prior to using OPatch. Oracle does not add its patched .NET assemblies to the GAC by default. If you require GACing, GAC after OPatch completes. The Oracle .NET assemblies include: | ||
+ | |||
+ | Oracle.ManagedDataAccess.dll - For .NET 4 | ||
+ | Oracle.DataAccess.dll - For .NET 2 and .NET 4 | ||
+ | Oracle.Web.dll - For .NET 2 and .NET 4 | ||
+ | Oracle.Database.Extensions.dll - For .NET 2 and .NET 4 | ||
+ | |||
+ | You can add and remove these assemblies to/from the GAC by following these steps: | ||
+ | |||
+ | 1. Open a command prompt. (Open using "Run As Administrator" | ||
+ | 2. Navigate to the directory that contains the assembly you wish to GAC. For example, the ODP.NET, Unmanaged Driver for .NET 4 is located in the %ORACLE_HOME%\ODP.NET\bin\4 directory. | ||
+ | 3. Execute the following to unGAC the assembly: | ||
+ | |||
+ | oraprovcfg.exe / | ||
+ | |||
+ | This is an example of unGACing unmanaged ODP.NET: | ||
+ | |||
+ | oraprovcfg.exe / | ||
+ | |||
+ | 4. Execute the following to GAC the assembly | ||
+ | oraprovcfg.exe /action:gac / | ||
+ | |||
+ | This is an example of GACing unmanaged ODP.NET: | ||
+ | |||
+ | oraprovcfg.exe /action:gac / | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Security Probleme beim Aufruf komplexerer DDL' | ||
+ | |||
+ | In unseren Demo soll nun in der DLL ein Socket geöffnet werden. | ||
+ | |||
+ | |||
+ | Beim Deployment kann das Security Modell gewählt werden, SAVE, EXTERNAL, UNSAFE | ||
+ | |||
+ | siehe auch => https:// | ||
+ | |||
+ | Auszug aus der Doku: | ||
+ | < | ||
+ | The security levels are: | ||
+ | ■ Safe | ||
+ | In Safe level, the .NET stored procedure or function is allowed to access only database resources. Access to any external resources such as local files, networks, and so on, is not allowed. | ||
+ | |||
+ | ■ External | ||
+ | In External level, the .NET stored procedure or function is allowed to read or write | ||
+ | to local files, and to access network resources such as sockets and internet nodes, and so on. | ||
+ | |||
+ | ■ Unsafe | ||
+ | In Unsafe level, the .NET stored procedure or function is allowed unrestricted execution including execution of unmanage d code. It is a superset of all other security levels. | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | Beim Deployment entsprechend setzen: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Debug mit Visual Studio ==== | ||
+ | |||
+ | |||
+ | Mit dem Remote Debugger von der DB Maschine aus | ||
+ | |||
+ | |||
+ | * Remote Debuger auf DB Maschine vom Visual Studio kopieren | ||
+ | * Remote Debuger als Admin starten | ||
+ | * Auf "No Auth, allow all" Security setzen | ||
+ | * Einmal die Routine aufrufen | ||
+ | * Damit wird ein extproc.exe Prozess vom OracleCLR gestartet | ||
+ | * Auf diesem extproc Process kann nun mit dem Visual Studio " | ||
+ | * Hocheinmal die Routine aufrufen, Debugger springt auf den Break Point | ||
+ | |||
+ | |||
+ | |||
+ | Alternativ: | ||
+ | |||
+ | Siehe auch => http:// | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Quellen==== | ||
+ | |||
+ | Oracle Dokumentation: | ||
+ | |||
+ | Oracle® Database Extensions for .NET Developer' | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | Oracle® Database Extensions for .NET Developer' | ||
+ | * 11g => https:// | ||
+ | * 12c => https:// | ||
+ | |||
+ | |||
+ | Database Platform Guide Microsoft Windows | ||
+ | * https:// | ||
+ | |||
+ | Microsoft | ||
+ | |||
+ | Message Queuing (MSMQ) | ||
+ | * https:// | ||
+ | |||
+ | Installation MSMQ | ||
+ | * https:// | ||
+ | |||
+ | .Net | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | Software: | ||
+ | |||
+ | * https:// | ||
+ | |||
+ | Oracle Examples => siehe http:// | ||
+ | |||
+ | |||
+ | Weitere Ideen: | ||
+ | |||
+ | http:// | ||
+ | |||
+ | Wird in 12c nicht mehr unterstützt => https:// | ||
prog/windows_dot_net_integration_plsql.txt · Zuletzt geändert: 2021/02/05 13:30 von gpipperr