oracle
Auf dem Gebiet der Datenbanken liegt unsere Kernkompetenz im Bereich der Oracle-Produkte. Unsere Erfahrungen erstrecken sich über die Oracle-Versionen 7, 8i, 9i, 10g und 11g, mit ihren jeweiligen Merkmalen - Neue Features, Obsolete Features, Verbesserungen, Bugs, Unterschiede in den Optimizern etc.

Die jahrelange Erfahrung in Oracle-Projekten aller Art und aus unterschiedlichen Branchen hat es uns ermöglich, ein umfassendes Know-how aufzubauen, Best Practices zu definieren und diese wiederum in neuen Projekten anzuwenden und zu verfeinern. Neben den klassischen allgemeinen Prinzipien der Datenmodellierung und Datenbankimplementierung, setzen wir auch Oracle-spezifische Schwerpunkte in unseren Projekten, wie zum Beispiel:

  • Einsatz von PL/SQL. PL/SQL stellt eine mächtige prozedurale Erweiterung der SQL-Datenbank mit zwei entscheidenden Vorteilen: die nahtlose Integration auf syntaktischer und Ausführungsebene und den schnellen Kontext-Switch von/zu SQL (insbesondere ab Oracle 9i). Aus diesen Gründen ist in vielen Fällen eine Implementierung der Programmlogik in PL/SQL einer Implementierung außerhalb der Datenbank vorzuziehen. Dabei gibt es aber auch Fälle - z.B. in Number-Crunching-Applikationen - in denen ein externes Programm, beispielsweise ein C-Programm, die effizientere Variante darstellt. Die Entscheidung über die am besten geeignete Implementierung sollte abhängig vom konkreten Fall getroffen werden.

  • Einsatz der von Oracle bereitgestellten Utilities, die in vielen Fällen die benötigten Funktionalitäten abdecken - wie Export/Import, Loader, Profiler, Recovery Manager, Enterprise Manager, Data Guard etc. - sowie Verwendung zusätzlicher Tools, wie TOAD, SQL Navigator und ERwin, die weitere Funktionalitäten und komfortable Benutzerschnittstellen anbieten.

  • Ausnutzung der speziellen Datenbankobjekttypen von Oracle: Packages, Types, Directories, sowie der objekt-relationalen Konstrukte etc. Der Einsatz dieser Konstrukte sollte allerdings dem Problem angemessen sein - die meisten Aufgaben lassen sich nach wie vor sehr gut klassisch relational und mit Einsatz von Standard-PL/SQL lösen.

  • Strukturierung der PL/SQL-Packages. Packages und abstrakte Datentypen ermöglichen eine Art von objekt-orientierter Programmierung mit Typhierarchien, Overloading, Information Hiding (Public und Private Konstanten, Typen, Cursors, Prozeduren) etc. Davon machen wir intensiv Gebrauch, denn dadurch werden die Applikationen besser strukturiert.

  • Autonome Prozeduren sind in vielen Situationen hilfreich (in Logging- und Error-Prozeduren, in Trigger, die lokal committen müssen etc.)

  • Bulk Operationen stellen einen nützlichen Kompromiß zwischen der Effizienz eines "Insert-from-Select"-Statements und den Fehlerbehandlungsmöglichkeiten eines Inserts in einer Cursor-Schleife dar. (Dieser Vorteil relativiert sich ab der Version 10g.)

  • Performance Optimierung ist bei der Entwicklung unter Oracle ein aktiver Prozeß, der beim Erstellen der SQL-Statements beginnt, über Analyse und Verbesserung von Execution Plans führt und bis hin zu Optimizer Hints und tief auf die Ebene von Histogrammen gehen kann. Dazu ist ein genaues Verständnis der Oracle-Optimizer (CBO/RBO) erforderlich sowie richtiges Sammeln von Statistiken, Behandlung von Sonderfällen (Skewed Data, Buckets) etc.

  • Einsatz spezieller Konstrukte für den Data Warehouse-Bereich, wie partitionierte Tabellen, Materialized Views, Bitmap Indizes etc.

  • Einsatz der Oracle Built-In-Funktionalitäten für OLAP (Rollup, Cube, analytische Funktionen etc.)

  • Ausnutzung der Delete Cascade/Set Null-Optionen bei Relationen (Foreign Keys)

  • Erweiterung der Constraint-Cascade-Funktionalität über Trigger und Packages (z.B. als Insert Cascade oder Update Cascade)

  • Intensive Nutzung des Data Dictionaries, z.B. bei der dynamischen Generierung von Objekten, in generischen Funktionen etc.

  • . . .