Oracle Database 12c Ein Überblick 5 Gründe für Oracle12c Einfacher, effizienter und ressourcenschonender Betrieb großer Oracle DB Umgebungen Daten auf den "richtigen Platz" – Zugriffe optimieren und Kosten sparen Aufgaben mit weniger Code erledigen – noch mehr Entwicklerproduktivität Sicherheit auf allen Ebenen: Einheitliche Zugriffsregeln – einheitliches Auditing Ständige Verfügbarkeit des Datenbankservice – völlig transparent für die Anwendungen Oracle12c: Ein Überblick Oracle Multitenant Hochverfügbarkeit Coole Features für Entwickler Sicherheit auf allen Ebenen Information Lifecyle Management Werkzeuge für Oracle12c Oracle Database 12c in Zahlen 5 Jahre Entwicklung 500 neue Features 2.500 Personen-Jahre 3.000 Systeme für die Tests 1 Million Feature-Tests täglich 1,2 Millionen Stunden Stresstests Lifetime Support Policy Sustaining Support Extended Support Premier Support heute JUL-2018 AUG-2012 JUL-2010 R2 JAN-2018 JAN-2015 R2 JUL-2021 AUG-2015 JUL-2013 2019 2018 2017 2016 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf Die neue Multitenant Architektur Hauptspeicher und Prozesse nur noch auf Ebene des “Multitenant-Containers” Die neue Multitenant Architektur Hauptspeicher und Prozesse nur noch auf Ebene des “Multitenant-Containers” Multitenant Architektur Unterstützt derzeit bis zu 252 PDBs Eine PDB verhält sich wie eine "non-CDB" Database Link PDBs "teilen sich" SGA und Hintergrundprozesse Kein Unterschied für die Anwendung DB Sessions "sehen" nur die PDB, an der sie angemeldet sind Anwendungsfälle Test und Entwicklung: Schnelle, flexible Kopien/Snapshots mit Pluggable Databases Konsolidierung: "Teilen" des Overheads für Hauptspeicher und Systemprozesse Einfaches Upgrade und Patching: Patch / Upgrade der CDB – wirkt für alle PDBs Mandantenfähige Systeme: Isolation mit PDBs – Ideal für SaaS Einige interessante RMAN Features … Einfacher Befehl um einzelne Tabellen aus dem Backup wiederherzustellen 1 0 1 0 1 0 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 0 0 1 0 1 00 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 Source Database (AIX) RMAN Backups – Eliminiert komplexes und zeitaufwendiges TSPITR mit Export RMAN> RECOVER TABLE … Destination Database (Solaris) Cross-Platform Backup & Restore – Einfach und schnell, kein Skripting 1 1 1 01 1 0 1 1 0 1 1 1 1 0 1 0 0 1 0 1 00 0 0 1 1 00 1 10 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 00 1 0 1 0 0 1 00 1 Backup to Disk/Tape – Ideal für Migrationen Restore Backup Active Data Guard Far Sync Redolog-"Repeater" für Data Guard Optimierter Transport der Redo-Daten über große Entfernungen – Minimale Oracle-Instance Standby Control File, Standby Redo Logs, Archived Redo Logs, keine Datendateien – Redo wird synchron von der Primärdatenbank empfangen … – … und asynchron an die Standby Datenbank weitergeleitet Verbessertes Failover: – Standby erhält "letzte Änderungen" automatisch von Far Sync Instanz – Zweite "Far Sync Instance" zur Unterstützung der Gegenrichtung Standby Datenbanken müssen Active Data Guard Standbys sein Active Data Guard Far Sync Systematische Darstellung Standby Primary SYNC ASYNC Far Sync Instance Datenbank-Failover für die Middleware Situation bis Oracle11g Fokus liegt auf der Datenbank-Session TAF fokussiert auf Client-Server End User Application Servers FCF/Fan fokussiert auf Connection Pool Aber kein Handling des Session State Nicht committetes DML PL/SQL Package state Session Contexts Und mehr ... Database Servers Der Entwickler muss etwas tun ... Datenbank-Failover für die Middleware Transaction Guard und Application Continuity Transaction Guard – Protokoll und Programmier-API für Entwickler – Entwickler kann feststellen, welche Statements durchliefen und welche nicht – Entwickler kann gezielt nur die "nicht gelaufenen" Kommandos wiederholen Application Continuity – Selbstständiges Wiederholen nicht gelaufener Kommandos – Ziel: Möglichst transparentes Failover für den Entwickler Daten unkenntlich machen Oracle Advanced Security (ASO) Neu in ASO: Data Redaction Jede Ausgabe wird in Echtzeit maskiert Gängige Policies im Kreditkarten 4451-2172-9841-4368 5106-8395-2095-5938 7830-0032-0294-1827 Redaction Policy Lieferumfang enthalten Transparent für Anwendungen xxxx-xxxx-xxxx-4368 4451-2172-9841-4368 Call Center Mitarbeiter Rechnungsabteilung Privilege Analysis 1. Verwendete Privilegien und Database Vault mit Rollen erfassen DBMS_PRIVILEGE_CAPTURE Create… Drop… Modify… DBA role APPADMIN role 2. Berichte über die verwendeten oder nicht verwendeten Privilegien und Rollen erzeugen 3. Im laufenden Betrieb Least Privilege, durch Entzug nicht benötigter Privilegien und Rollen, umsetzen Privilege Analysis Das neue Auditing: Unified Auditing Bisher: Dateien auf Betriebssystem, in verschiedenen Formaten und in der DB (AUD$, SYS.FGA_LOG$, DVSYS.AUDIT_TRAIL$) Jetzt: Unified Audit Trail – Policies steuern das Auditing, nicht Initialisierungsparameter – AUDSYS ist Eigentümer des Audit Trail – Nur eine Tabelle im Tablespace SYSAUX – Unterstützt RMAN, Data Pump und Direct Path Loader Information Lifecycle Management in Oracle12c Direkte Integration in den Datenbankkern – Heat Map: automatisches Monitoring und Klassifikation (Hot/Cold Data) – Automatic Data Optimization/Placement – Policies werden automatisiert in der Datenbank ausgeführt Zusätzlich Erweiterungen in Bereichen wie ... – Kompression – Partitionierung Heat Map Tracking Active Frequent Access Occasional Access Dormant HOT Einfaches Setup : ein Parameter Actively updated Monitoring: Views, Packages, Enterprise Manager Infrequently updated, Frequently Queried Infrequent access for query and updates Long term analytics & compliance COLD 2 Ebenen: Segment und Block – Welche Tabellen und Partitionen werden verwendet? – Welche Blöcke wurden zuletzt verändert? Umfassend – Trackt Reads und Writes, Lookups, Scans – Aktuell und in Historie Performant Heat Map für Tabellen und Partitionen OR RS DE Welche Tabellen und Partitionen werden wie verwendet? Ein Ausschnitt ... OWNER ---------SH SCOTT SCOTT SCOTT SCOTT SCOTT SCOTT OBJECT_NAME ----------------------CUSTOMERS_PK DEPT EMP EMP EMP PK_EMP PK_EMP TRACK_TIME ---------------25.06.2013 22:48 25.06.2013 12:48 26.06.2013 12:30 25.06.2013 12:48 24.06.2013 11:47 26.06.2013 22:30 25.06.2013 22:48 WRI --NO NO YES NO NO NO NO FUL --NO YES YES YES YES NO NO LOO -YES NO NO NO NO YES YES Automatische Daten Optimierung OLTP Reporting Compliance & Reporting 10x komprimiert 15x komprimiert Im Quartal Advanced Row Compression für OLTP Im Jahr Columnar Query Compression für schnelle Analysen Jahre zuvor Columnar Archive Compression für max. Kompression Automatisch und Online Komprimierung/ Verlagerung Storage Tiering Automatische Daten Optimierung D OR S ER ALTER TABLE EMPLOYEE ILM ADD POLICY TIER TO <LOW_COST_TABLESPACE> 1. Tabellen wachsen Daten werden komprimiert 2. Tablespace mit Partitionen erreicht Grenze 3. Partitionen werden in einen anderen Tablespace verlagert Heat Map im Oracle Enterprise Manager Cloud Control 12c und die Datenbank 12c Cloud Control 12c unterstützt Oracle Database 12c Voraussetzung – Cloud Control 12c Release 2 (12.1.0.2) mit aktuellem Plugin – Verfügbar seit Februar 2013 In Kürze komplette Feature-Unterstützung EM Database Express Neues Werkzeug mit Oracle Database 12c Automatische Installation Monitoring und Management einer einzelnen Oracle Datenbank 12c Nicht für die komplette Administration (aktueller Stand) – Einfache Konfigurationen – Kein Backup/Recovery, Resource Management etc. – Sehr gut geeignet für Performance Monitoring (Performance Hub) Oracle12c Database Express Oracle12c für Entwickler Die Datenbank einfach, schnell und effizient nutzen ... SQL Pattern Matching PL/SQL in "WITH" Klausel Identity Columns 32k Varchar Rollen für PL/SQL Invisible Columns Oracle TEXT, XML und Spatial Nicht zu vergessen: SQL Developer Unterstützt Oracle Database 12c Seit Release 3.0 DBA Unterstützung – Oracle Multitenant – Data Redaction – Resource Manager – Data Pump – SQL Tuning Advisor : Identity Columns Tabellen erstellen - viel weniger Code Bisher create table tab_kunden ( id number(10) primary key name varchar2(200) : ); create sequence seq_kunden start with 1 increment by 1; create or replace trigger tr_pk_kunden before insert on tab_kunden for each row begin :new.id := seq_kunden.nextval; end; Oracle12c create table kunden_tab( id number(10) primary key generated always as identity start with 1 increment by 1, name varchar2(200) : ); SQL "Row Limit" Klausel Zwei Beispiele ... Sortiere nach "SAL" aufsteigend und gib die ersten 5 Zeilen zurück SELECT empno, ename, sal FROM ( emp ORDER SELECT BY empno, sal ASCename, sal FROM emp ORDER BY sal DESC FETCH FIRST 5 ROWS ONLY; ) WHERE rownum <= 5; Sortiere nach "SAL" absteigend, überspringe 3 Zeilen und gib dann die nächsten drei Zeilen zurück SELECT empno, ename, sal FROM ( emp ORDER SELECT BY rownum sal DESC zeile, empno, ename, sal FROM ( OFFSET SELECT 3 ROWS empno, FETCHename, FIRST 3 sal ROWS FROM ONLY; emp ORDER BY sal DESC ) ) WHERE zeile BETWEEN 4 AND 6; VARCHAR-Spalten nun bis 32K Grenze damit analog zu PL/SQL Verwendung aller SQL-Funktionen möglich Einmaliger Setup der Datenbank erforderlich (mit dem DBA) create table TAB_KUNDEN ( id number generated as identity, first_name varchar2(30), last_name varchar2(30), first_order date, kommentare varchar2(32767) ); PL/SQL WITH Klausel PL/SQL Funktionen – lokal für eine SQL-Abfrage Die Funktion existiert nur für diese SQL-Abfrage Keine Persistenz im Data Dictionary WITH FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2 IS pos BINARY_INTEGER; len BINARY_INTEGER; BEGIN pos := INSTR(url, 'www.'); len := INSTR(SUBSTR(url, pos + 4), '.') - 1; RETURN SUBSTR(url, pos + 4, len); END; SELECT DISTINCT get_domain(catalog_url) FROM orders; Zugriff auf PL/SQL Objekte in Oracle12c Einem PL/SQL-Objekt können nun Rollen zugewiesen werden – Erlaubt wesentlich bessere Rechte / Rollenkonzepte grant {role} to function meine_funktion; ACCESSIBLE BY-Klausel verhindert direkten Aufruf eines Objektes – Verhindern des direkten Aufrufs von "Helper Packages" create or replace package pkg_helper accessible by {other plsql object} is : end pkg_helper; Unsichtbare Spalten ... ... sind unsichtbar, oder ...? SQL> alter table EMP modify (COMM invisible, HIREDATE invisible); SQL> desc EMP Name Null? Typ SQL> select ename, hiredate, sal, comm from emp; ----------------------------- -------- -------------------EMPNO NOT NULL NUMBER(4) ENAME HIREDATE SAL COMM ENAME VARCHAR2(10) -------------------- ------------------- ---------- ---------JOB VARCHAR2(9) SMITH 17.12.1980 00:00:00 800 MGR NUMBER(4) ALLEN 20.02.1981 00:00:00 1600 300 SAL NUMBER(7,2) WARD 22.02.1981 00:00:00 1250 500 DEPTNO NUMBER(2) JONES 02.04.1981 00:00:00 2975 SQL> select * from emp; EMPNO ---------7369 7499 7521 7566 ENAME -------------------SMITH ALLEN WARD JONES JOB MGR SAL DEPTNO --------- ---------- ---------- ---------CLERK 7902 800 20 SALESMAN 7698 1600 30 SALESMAN 7698 1250 30 MANAGER 7839 2975 20 Valid Time Temporal Management der "Gültigkeit" einer Tabellenzeile – in der Datenbank Zusätzliche Spalten für "Gültig Von" und "Gültig Bis" Abfrage "zu einem Zeitpunkt" gültiger Rows – mit SQL Bei Änderungen werden Spalten "Gültig Von" und "Gültig Bis" geschrieben Abfragen erfassen nur "gültige" Zeilen SQL Pattern Matching Muster finden: über Tabellenzeilen hinweg! Finde "Double Bottoms" im Kursverlauf einer Aktie Wann beginnt das Muster? Wann endet das Muster? Aktienkurs Welcher Aktienkurs? Muster innerhalb einer Woche? 1 9 13 19 Tage FIRST_X SQL Pattern Matching Muster finden: über Tabellenzeilen hinweg! LAST_Z 1 9 13 19 Finde "Double Bottoms" im Kursverlauf einer Aktie X Wann beginnt das Muster? Y W Z Aktienkurs Wann endet das Muster? Welcher Aktienkurs? SELECT first_x, last_z Muster innerhalb einer FROM ticker MATCH_RECOGNIZE ( Woche? PARTITION BY name ORDER BY time MEASURES FIRST(x.time) AS first_x LAST(z.time) AS last_z ONE ROW PER MATCH PATTERN (X+ Y+ W+ Z+) DEFINE X AS (price < PREV(price)) Y AS (price > PREV(price)) W AS (price < PREV(price)) Z AS (price > PREV(price)) Tage if (lineNext == null) { next = ""; } else { next = lineNext.getQuantity(); } SQL Pattern Matching if (!q.isEmpty() && (prev.isEmpty() || (eq(q, prev) && gt(q, next)))) { state = "S"; return state; } Muster finden: über Tabellenzeilen hinweg! if (gt(q, prev) && gt(q, next)) { state = "T"; return state; } if (lt(q, prev) && lt(q, next)) { state = "B"; return state; } if (!q.isEmpty() && (next.isEmpty() || (gt(q, prev) && eq(q, next)))) { state = "E"; return state; } if (q.isEmpty() || eq(q, prev)) { state = "F"; return state; } return state; } private boolean eq(String a, String b) { if (a.isEmpty() || b.isEmpty()) { return false; } return a.equals(b); } private boolean gt(String a, String b) { if (a.isEmpty() || b.isEmpty()) { return false; } return Double.parseDouble(a) > Double.parseDouble(b); } private boolean lt(String a, String b) { if (a.isEmpty() || b.isEmpty()) { return false; } return Double.parseDouble(a) < Double.parseDouble(b); } SELECT first_x, last_z FROM ticker MATCH_RECOGNIZE ( PARTITION BY name ORDER BY time MEASURES FIRST(x.time) AS first_x, LAST(z.time) AS last_z ONE ROW PER MATCH PATTERN (X+ Y+ W+ Z+) DEFINE X AS (price < PREV(price)), Y AS (price > PREV(price)), W AS (price < PREV(price)), Z AS (price > PREV(price) AND z.time - FIRST(x.time) <= 7 )) public String getState() { return this.state; } } BagFactory bagFactory = BagFactory.getInstance(); 250+ Codezeilen Java @Override public Tuple exec(Tuple input) throws IOException { long c = 0; String line = ""; String pbkey = ""; V0Line nextLine; V0Line thisLine; V0Line processLine; V0Line evalLine = null; V0Line prevLine; boolean noMoreValues = false; String matchList = ""; ArrayList<V0Line> lineFifo = new ArrayList<V0Line>(); boolean finished = false; 12 Zeilen SQL Der Datenbank sagen, was zu tun ist – nicht, wie es zu tun ist. DataBag output = bagFactory.newDefaultBag(); if (input == null) { return null; } if (input.size() == 0) { return null; Auf den Ort kommt es an: Oracle Spatial Spatial Performance-Boost alter system set SPATIAL_VECTOR_ACCELERATION = true Neue Funktionen und Möglichkeiten Unterstützung für neue Geometrietypen: NURBS, Raster Algebra, Neue Routing Engine Neuerungen in Oracle Maps: HTML5 Maps Dokumente und XML: Unstrukturierte Daten XML DB ist nun integraler Bestandteil der Datenbank Unterstützung der jüngsten Standards XQuery-Update, XQuery-Fulltext Performance-Optimierungen XDB Performance, Oracle TEXT Near Real Time Indexing Oracle TEXT im Detail Automatische Spracherkennung, Reguläre Ausdrücke für Stopwörter, Pattern Stopclass, NEAR und "Mild Not" Operator und mehr ... Oracle12c und Java Java in der Datenbank … – Java6 oder Java7 (JVM wird "pluggable") – Java Logging und JNDI Support JDBC und Oracle12c – JDBC & UCP Support für JavaSE 7 und JDBC 4.1 – Nutzung von Oracle Multitenant via Service Names – PL/SQL Typen ("boolean") können nun von Java aus angesprochen werden Informationen in deutscher Sprache Communities – APEX Community – DBA Community – Linux und Virtualisierung – Exadata Community Veranstaltungen – http://tinyurl.com/odd12c Graphic Section Divider