DOAG Konferenz 2009, Oracle und Microsoft.NET Nürnberg, 19.11.2009 Markus Kißling Leitender Systemberater markus.kissling@oracle.com BU Server Technologies PCM ORACLE Deutschland GmbH
AGENDA Oracle und Microsoft.NET Was ist neu bei ODT und ODP.NET Übersicht Alte Welt mit ODBC und OLEDB (ADO) Microsoft Office (Business) Applications (OBAs) Oracle Integration mit Microsoft.NET Was ist neu bei den Oracle Developer Tools (ODT) for Visual Studio Development Lifecycle mit Source Code Versionsverwaltung Was ist neu beim Oracle Data Provider for.net (ODP.NET) ADO.NET Object Model und Oracle Database Change Notification Demos u.a. Messaging mit.net und Oracle Streams Advanced Queuing (AQ) Deprecation von System.Data.OracleClient Microsoft stellt die Entwicklung ihres Data Providers für Oracle ein Was ist bei der Umstellung auf den Oracle Data Provider (ODP.NET) zu beachten
Übersicht <Insert Picture Here>
Universelle Datenhaltung und universeller Datenzugriff (in der alten Welt) Szenario 1: ODBC Zugriff auf Oracle Stored Procedure aus MS Access über ODBC Geschäftslogik im Oracle Server aus MS Office nutzen Szenario 2: ADO/OLE DB Migration von MS SQL Server nach Oracle mit der Oracle Migration Workbench Visual Basic-Anwendung leicht an Oracle anpassen (Standard SQL-Zugriffe) und Einsatz des Oracle OLE DB Providers Performance-Features wie Fetch-Size schon unter OLE DB verfügbar
Microsoft Office (Business) Applications (OBA) - Teil der neuen Welt
Oracle s Commitment to.net ODP.NET Visual Studio Plug-ins.NET Stored Procs ODAC 2006 64-bit ODP.NET ODAC 11g 2 nd ODAC 11g 2002-03 Q2 2005 Q3 2005 Q3 2006 Q1 2007 2007-08 2009.NET 1.x VS 2003.NET 2.0 & VS 2005.NET 3.0 Windows Vista & 2008
.NET Development Environment Support Oracle Developer Tools for Visual Studio Visual Studio Environment Application Development.NET Application Oracle Data Provider for.net Deploy Database Development Deploy Web or Client/Server Application Oracle Database Extensions for.net Oracle Providers for ASP.NET
Entwicklung auf Windows Datenbank-Plattform wahlfrei Oracle Developer Tools for VS.NET Visual Studio Umgebung Windows Oracle Data Provider for.net Windows und/oder... Linux und/oder... Unix und/oder... weitere Oracle 11g, 10g oder 9i
<Insert Picture Here> Was ist neu bei den Oracle Developer Tools for Visual Studio
Visual Studio und Oracle Development Lifecycle Create Schema Objects Create Users/Roles Test, Tune, Deploy Grant Privileges Source Control.NET Coding PL/SQL and SQL Editing/Debug
Neue Features mit ODT 11g (11.1.0.7.20) Oracle Developer Tools for Visual Studio ODT 11.1.7.20 ODT 11.1.6.20
Neue Features mit ODT 11g (11.1.0.7.20) Oracle Developer Tools for Visual Studio
Neue Features mit ODT 11g (11.1.0.7.20) Oracle Developer Tools for Visual Studio
Oracle Developer Tools for Visual Studio Visual Studio Integration (1) Voll integriert mit Visual Studio 2008 und 2005 Server Explorer Data Sources Window Dataset Designer TableAdapter Configuration Wizard Query Builder/Query Designer usw. Automatic Code Generation WinForm und ASP.NET Für die Erstellung von einfachen Anwendungen
Oracle Developer Tools for Visual Studio Visual Studio Integration (2) Oracle Wizards und Designers Table/View Designer Stored Procedure/Function/Package Wizards Grant/Revoke Privileges Wizard UDT Designers UDT Custom Class Code Generation Wizard Table/View Migration Wizard Oracle Data Window Oracle Database Project Editieren und Ausführen von SQL Skripten SQL*Plus Built In Source Control Integration Integrierter PL/SQL Editor und Debugger
Oracle Developer Tools for Visual Studio Visual Studio Integration (3) Oracle Query Window (Abfragefenster) Ad Hoc SQL Explain Plan (Ausführungspläne).NET Stored Procedure Deployment Integriertes Hilfesystem SQL, PL/SQL Schlüsselwörter
ODT 11.1.0.7.20 Was ist neu? (1) Performance Analyse und Tuning Oracle Performance Analyzer Laufende Anwendungen gegen die Datenbank optimieren SQL Tuning Advisor Ad-hoc Abfragen im Abfragefenster optimieren Ineffiziente Anwendungs-SQL-Statements tunen (geliefert aus dem Oracle Performance Analyzer) Messaging Advanced Queuing (AQ) Designer Anlegen, ändern und administrieren der Queues und Queue Tabellen
ODT 11.1.0.7.20 Was ist neu? (2) Application Development Lifecycle Auswählen und Ausführen von Operation auf mehreren Knoten im Server Explorer (SE) SQL Skripte aus beliebigen Oracle Schemaobjekten oder Gruppen von Objekten erzeugen Beliebig viele Stored Procedures auf einmal kompilieren Server Explorer Collection Node Filtering Anzuzeigende Schemaobjekte einschränken Server Explorer Node Paging Verbesserte Performance bei vielen Datenbank-Objekten Benutzer- und Rollen-Designer und Benutzer- und Rollen-Knoten im Server Explorer Grant/Revoke Privileges Wizard für Unterstützung bei System Privilegien und Rollen
Oracle Developer Tools Wizards and Designers Connection Dialog Oracle Server Login Connection Filter Login Preview SQL Dialog Table Designer Import Table Wizard Trigger Designer View Designer Import Table Wizard View Designer Function Designer Procedure Designer Stored Procedure Run Dialog Package Designer Sequence Designer Synonym Designer XML Schema Designer Object Type Designer Varray Designer Nested Table Designer OracleDataAdapter Wizard Oracle Deployment Wizard for.net Oracle Custom Class Wizard Generating Classes with the Oracle Custom Class Wizard Integration with Query Designer User Designer Role Designer Grant/Revoke Dialog Run SQL*Plus Dialog Oracle Database Project Run On Dialog Oracle Database Project Add Database Reference Dialog Query Table Designer Queue Table Designer Queue Designer Oracle Performance Analyzer Neu in ODT 11.1.0.7.20
DEMO Development Lifecycle 1) User Designer 2) Role Designer 3) Import Table Wizard 4) Automatic Code Generation (VB-Code) 5) Microsoft Query Builder 6) SQL Skript generieren 7) Applikationscode in Source Safe/Subversion einchecken
Source-Code Versionsverwaltung Visual Studio mit Subversion/VisualSVN/TortoiseSVN Subversion als Basis TortoiseSVN (Windows Shell Extension) http://tortoisesvn.tigris.org/ VisualSVN (enthält Subversion) http://www.visualsvn.com/
Source-Code Versionsverwaltung Visual Studio mit Subversion/VisualSVN/TortoiseSVN
Source-Code Versionsverwaltung Visual Studio mit Subversion/VisualSVN/TortoiseSVN NEU
Source-Code Versionsverwaltung Visual Studio mit Subversion/VisualSVN/TortoiseSVN
Source-Code Versionsverwaltung Visual Studio mit Subversion/VisualSVN/TortoiseSVN
Source-Code Versionsverwaltung MS SourceSafe 2005
Source-Code Versionsverwaltung MS SourceSafe 2005
Source-Code Versionsverwaltung MS SourceSafe 2005
Source-Code Versionsverwaltung MS SourceSafe 2005
DEMO Oracle Developer Tools for Visual Studio 1) SQL Tuning Advisor 2) Oracle Performance Analyzer
Was ist neu beim Oracle Data Provider for.net <Insert Picture Here>
ODP.NET - Basics ADO.NET Standard implementiert Einfach und intuitiv einsetzbar Nativer Zugriff auf die Oracle Datenbank Advanced Oracle Datenbank Features werden unterstützt z.b. RAC, Performance, Security, Datentypen, XML, usw. DB-Server auf beliebigen Betriebssystem DB-Client auf 32-Bit oder 64-Bit Windows-Betriebssystem Unterstützung ab.net Framework 1.0 und höher DB-Client und Server-Versionen müssen nicht übereinstimmen Frei und kostenlos zum Download auf Oracle Technet (OTN) http://otn.oracle.com/dotnet
ODP.NET Object Model Disconnected Layer Connected Layer (ODP.NET) Data Layer DataSet Oracle DataAdapter Oracle CommandBuilder OFFLINE!!! Unterstützung durch DB Change Notification Oracle DataReader Oracle Transaction Oracle Command Oracle Connection Oracle
Key ODP.NET Features (1) Connection Pooling RAC- und Data Guard Pooling-Optionen Performance Counter Komplette PL/SQL-Unterstützung Packaged, Non-Packaged, Anonymous, Autonomous Batch SQL-Verarbeitung mit anonymen PL/SQL Native Oracle-Datentypen REF Cursors, LOBs, XMLType, TimeStamp usw. Safe Type Mapping mit.net Datentypen Oracle-Datentypen im DataSet OracleDataAdapter.ReturnProviderSpecificTypes = true
Key ODP.NET Features (2) Transactionen Enterprise Services Oracle Services for MTS (OraMTS) bei verteilten (distributed) Transaktionen einsetzen Local (Implicit und Explicit) Savepoints Parameters PL/SQL Associative Array-Datentyp LOBs und SecureFiles Pre-Fetch oder Defer LOB-Abfragen möglich
Key ODP.NET Features (3) XML XMLType Datentyp XML aus DB abfragen und speichern Relational und Object-relational Interoperabilität mit MS XML APIs (z.b. XmlReader) Unterstützt XSLT, XPATH und XML Schema RAC Automatic Load Balancing Automatische Bereinigung von Dead Connections Data Guard Automatische Bereinigung von Dead Connections
Key ODP.NET Features (4) Database Change Notification Performance Tuning Statement Caching FetchSize und RowSize Security und Auditing Proxy Authentication End-to-end Tracing mit ClientId, Action und Module Deployment Oracle Universal Installer für Einzelplatz-Installation Xcopy Instant Client für große Umgebungen
ODP.NET 11.1.0.7.20 Was ist neu? (1) Performance und Durchsatz Self-Tuning Statement Cache Size wird zur Laufzeit angepaßt Schnellere Datenabfragen beim DataSet und OracleDataReader Geringerer Speicherbedarf Keine Codeänderungen notwendig mit neuer ODP.NET Version Promotable Transactions Lokale Transaktionen werden zur Laufzeit zur verteilten promotet benötigt Oracle Database 11g und OraMTS 11.1.0.7.20
ODP.NET 11.1.0.7.20 Was ist neu? (2) Messaging Oracle Streams Advanced Queuing API.NET Messaging Anwendungen mit der integrierten Oracle Database Queuing-Technologie aufbauen High Availability Event Notification und Callback Event Handler einsetzen, die auf geänderten DB-Status reagieren Code Access Security Imperative und Declarative Oracle Security anwenden Database Startup und Shutdown programmieren
Callbacks für HA Event Notifications
Neu bei ODP.NET 11.1.7.0.20 (4) Listener.ora für Remote Startup DB bekanntmachen SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\oracle\product\11.1.0\db_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\oracle\product\11.1.0\db_1\bin\oraclr11.dll") ) (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = C:\oracle\product\11.1.0\db_1) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = MARKUS-PC)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
DEMO Einfache C#/VB-Anwendung mit ODP.NET
DEMO Oracle Database Change Notification
Typisches End-User Szenario 1. User A: Connect zu DB zur Abfrage Tabelle X 2. User A: Cached Daten in der Mid-Tier/Client (z.b. DataSet) Gibt Connection an Connection-Pool zurück, um Ressourcen zu sparen 3. User B: Connect zur DB und modifiziert Daten in Table X User A nutzt jetzt inkorrekte Daten
DB Change Notification Ablauf 1. (grant change notification to username;) 2. Wenn Kommando ausgeführt wird, wird Notification Registrierung (NR) in DB erzeugt 3. ODP.NET startet den Application Listener mit der Notification Registrierung (NR) 4. Wenn Änderung eintritt, sendet DB-Server Benachrichtigung an Client 5. Client führt Event Handler aus
Change Notification Beispiel Data Change OracleCommand Notification Request Execute() EMP Data Dictionary Add Dependency OnChange OracleDependency Application Notification Queue Listener Client Database
Unterstützte Abfragetypen Unterstützt alle Abfragetypen, wie Views Joins Stored Procedure Queries REF Cursor ausgenommen Abfragen mit Fixed Tables der Fixed Views (z.b. X$, V$) DBlinks innerhalb Materialized Views
Zurückgelieferte Information aus Change Notification Namen des modifizierten Objekts und Schema-Name Das DB-Event das Notification verursachte INSERT, UPDATE, DELETE, ALTER TABLE, oder DROP TABLE Globale Events, wie STARTUP und SHUTDOWN Mit RAC wird die Notification geliefert, wenn die erste Instance startet, oder beim Shutdown der letzten RowID der modifizierten Objekt-Row
Konfiguration der Notification Registrierung (NR) NR explizit entfernen OracleDependency.RemoveRegistration NR kann nach einiger Zeit ablaufen OracleCommand.Notification.Timeout NR persistent nach erster DB-Änderung NR persistent nach erster DB-Änderung OracleCommand.Notification.IsNotifiedOnce = false
DEMO Oracle Streams Advanced Queuing (AQ) und.net mit User Defined Types (UDTs)
Client Result Cache (neu in Oracle 11g) $ sqlplus / as sysdba SQL> alter system set client_result_cache_size=64m scope=spfile; SQL> startup force cmd.commandtext = "select /*+ result_cache */ first_name, last_name from employees";
DEMO Oracle Client Cache mit.net
DEMO Oracle Data Provider for.net Performance Features OracleCollectionType.PLSQLAssociativeArray
DEMO Oracle Objekte (User Defined Types UDT) mit ASP.NET Anwendung
DEMO Oracle XML Database und.net
DEMO Datenbank Security und.net Oracle Virtual Private Database (VPD) Mandantenfähige Datenbanken
<Insert Picture Here> Deprecation von System.Data.OracleClient Was ist bei der Umstellung auf ODP.NET zu beachten?
ODP.NET - Oracle managed Provider Zwei Namensräume: Oracle.DataAccess.Client Oracle.DataAccess.Types Assembly (Referenz): Oracle.DataAccess.dll
.NET Framework - Oracle managed Provider Ein Namensraum: System.Data.OracleClient Assembly (Referenz): System.Data.OracleClient.dll
OracleCommand - ODP.NET vs..net-framework
ODP.NET vs. Microsoft OracleClient Performance
ODP.NET vs. Microsoft OracleClient Security High Availability and Scalability
ODP.NET vs. Microsoft OracleClient Oracle Database Technology
ODP.NET vs. Microsoft OracleClient Ease of Use and Developer Productivity
ODP.NET vs. Microsoft OracleClient Schritte Im Projekt Referenz hinzufügen Oracle.DataAccess ODP.NET Namespace hinzufügen C# using Oracle.DataAccess.Client; VB Imports Oracle.DataAccess.Client und Microsoft OracleClient Namespace löschen (auskommentieren) C# //using System.Data.OracleClient; VB Imports System.Data.OracleClient Ggf. Namespace Oracle.DataAccess.Types hinzufügen (wenn ODP.NET spezifischen Datentypen verwendet werden) C# using Oracle.DataAccess.Types; VB Imports Oracle.DataAccess.Types Connection String anpassen Integrated Security (MS) nach User Id=/ (bei OS Authentifizierung) Unicode ggf. Herausnehmen, ODP.NET arbeitet immer mit Unicode Parameter Binding by Name Microsoft OracleClient und ODP.NET unterstützen colon to bind/bind by position und bind by name Parameter ODP.NET standardmäßig bind by position MS OracleClient standardmäßig bind by name C#/VB OracleCommand.BindByName=true; (um MS Verhalten zu erhalten)
Oracle Providers for ASP.NET <Insert Picture Here>
Oracle Providers for ASP.NET Pre-Built Services zum Speichern des Website Status in Oracle Services für häufig benutzte Website Information Z.B. user info, user roles, shopping cart Leicht zu erlernen Basieren auf Standard ASP.NET Provider APIs und Schema Erben von den.net Framework 2.0 Basis Klassen Kompatibel mit den ASP.NET Service Klassen Keine propriätären Erweiterungen in den Oracle ASP.NET Providern
Oracle Providers for ASP.NET Nahtlose Integration mit den ASP.NET Services und Controls Referenz auf spezifischen Provider unnötig Hoher Abstraktionslevel: Services und Control basierte Programmierung Leichtes Umschalten von SQL Server auf Oracle Konfigurationsdatei bestimmt die Data Source Leicht zu installieren und zu verwalten Über IIS oder Website Admin Tool
Oracle Providers for ASP.NET IIS ASP.NET Controls ASP.NET Services Oracle Providers for ASP.NET ODP.NET
Verfügbare Provider Oracle Providers for ASP.NET Komponenten Membership Provider Role Provider Profile Provider Session State Provider Site Map Provider Web Parts Personalization Provider Web Event Provider Cache Dependency Provider Administratoren den/die Provider aus Die meisten Provider sind voneinander unabhängig
Web.config anpassen 1 2
Beispiel: Warenkorb/SessionState 2 3 1 Zweimal GolfBag anklicken
SessionState im SQL Developer
http://otn.oracle.com/dotnet
ODAC 11g = ODT + ODP.NET + Providers for ASP + DB Extensions + OLE DB + OO4O + Services for MTS + ODBC
Artikelserie im dot.net-magazin
Oracle11g für Windows und.net Informationen www.lehmanns.de www.amazon.de Oracle Community Website http://www.oracle.com/global/de/community/platform/index.html www.oracle.de Anwendergruppen Windows und.net Oracle Technology Network http://www.oracle.com/technology/dotnet
The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle s products remains at the sole discretion of Oracle.