Hvad jeg glæder mig mest til i Oracle “12c”

Den næste version af Oracle databasen forventes at komme i år, muligvis endda før sommerferien. Men ellers er et godt bud, at den kommer i forbindelse med Oracle Open World 2013 i september. Jeg har skrevet “12c” i anførselstegn i overskriften, da ingen reelt ved om det er det den kommer til at hedde.

En ny “major release” af Oracle databasen er altid spændende, da det altid medfører en række nye muligheder og også typisk en række fundamentale udvidelser i hvordan databasen er skruet sammen. Mange af disse ændringer kan man allerede læse om forskellige steder på nettet, men eftersom databasen stadig er under udvikling (dog ude i beta i en lukket kreds), er der ingen garanti for at de kommer med i den endelige version.

Den største nyhed i den næste version, er uden tvivl pluggable databases, som muliggør at have flere selvstændige databaser i én og samme instans, og dermed giver en adskillelsesmulighed der ligger imellem de nuværende adskilte skemaer og flere instanser på samme server. Man får dermed en mulighed som længe har været standardopsættet på Microsoft SQL Server, men i Oracle vil det blot være én mulig arkitektur blandt mange. Du kan læse mere om denne store designændring her: https://www.orafaq.com/node/2756

Selvom ingen kender til Database Editions forskelle og licensregler på den næste Oracle version endnu, forventer jeg dog, at pluggable databases bliver en tilkøbsmulighed, da det typisk er på denne måde Oracle introducerer sådanne arkitekturspring (tænk f.eks. på Oracle RAC). Derudover bliver det formentlig kun noget der er muligt i den dyrere Enterprise Edition database.

Flere andre ændringer og udvidelser indenfor f.eks. partitionering og RAC vil formentlig også kun komme til Oracle Enterprise Edition, men der er stadig spændende nyheder som jeg forventer kommer med i Oracle Standard Edition, og som formentlig ikke kommer til at koste ekstra. Nedenfor er en kort beskrivelse af dem jeg glæder mig mest til:

Inline funktioner i selects:
Det bliver muligt at indsætte en Pl\SQL funktion direkte i en select sætning med brug af WITH-clausen. Den kan så bruges i select-delen som en hvilken som helst anden funktion i databasen, men uden at man behøver at have funktionen oprettet som en del af sin database struktur (og have rettigheder til at gøre dette). Det giver samtidigt fordelen af en kortere switch-over tid, end den der normalt vil være nødvendig mellem databasens SQL-engine og Pl\SQL-engine.

Automatiske fortløbende numre i inserts
Det bliver muligt at tilknytte en sequence til sin tabel, så denne automatisk benyttes ved insert. Dette plejer man enten at skulle gøre manuelt, eller at sætte en trigger op for at gøre. Ud over dette bliver det muligt, at tilknytte en ”identity” funktionalitet til sin tabel kolonne, så man opnår samme autonummereringsfunktionalitet som man kender det fra MS SQL Server.

VARCHAR2 udvides til 32K
Det har længe været en gene i Oracle databasen, at VARCHAR2 maksimalt kan indeholde 4000 tegn, og endnu mindre hvis databasen kører UTF8 tegnsæt. I den nye version af Oracle kommer længden op på max. 32K tegn, så den dermed matcher Pl\SQL’s max længde. Samtidigt gemmes disse lange VARCHAR2 ”out-of-line” i databaseblokkene, på samme måde som CLOBs, for at undgå at de skader block read performance i de tilfælde hvor de ikke er med i forespørgslen.

Fetch first x rows only og offset
Dette giver mulighed for kun at hente bestemte rækker fra resultatet af en select ud fra deres placering. Det giver dermed samme muligheder som rownum større-end og mindre-end, som man f.eks. tit bruger til sidestyring, men uden de inline selects der pt. er nødvendige med rownum for at sikre korrekte data på tværs af sorteringer.

Øjeblikkelig Drop og Truncate
Drop og Truncate vi altid eksekvere øjeblikkeligt, da de i den nye Oracle version blot er en markering, med en senere automatisk oprydning. Da Drop og Truncate ligger uden for Oracles transaktionsbegreb, vil alle sessioner i databasen naturligvis stadig opleve tabellen som værende fjernet eller tømt, selvom dette ikke er sket endnu.

Multiple Statistikker for GTT
Global Temporary Tables (GTT) får mulighed for multiple statistikker. Tabelstatikker til hjælp for optimizeren i Oracle er normalt delte på tværs af alle sessioner, da alle normalt skal bruge de samme. Men netop for GTT, hvor alle sessioner ser deres egne unikke data i tabellen, er det meget relevant at de opsamlede statistikker er forskellige for forskellige sessioner, da både datamængder og datasammensætning jo kan være helt forskellige for de forskellige sessioner. Dette vil medføre at manuelt låste ”kompromisstatikker” for GTT, som man i dag sommetider er nødt til at opsætte og vedligeholde, ikke længere er relevante.

Adaptive execution plans
Dette betyder at Oracle databasen i fremtiden vil kunne vælge én execution plan når udførslen af en SQL startes, men undervejs måle på hvor godt udførslen går i forhold til det forventede, og så skifte til en anden execution plan under eksekveringen. Umiddelbart virker dette som en super idé, da man jo så må gå ud fra, at langsomme SQL’s der i praksis kunne gå hurtigere, på magisk vis pludselig gør præcist dette, uden at man manuelt skal ind og kigge på det og tune statementet. Men jeg forudser at det i fremtiden bliver noget sværere at diagnosticere SQL’s, der ikke bare ændrer execution plan i forhold til det planlagte (dette sker også i den nuværende database version), men bruger flere forskellige i løbet af eksekveringen, i forskellige tidsrammer og hele tiden forsøger at gøre sig selv klogere.

På nær pluggable databases, er ovenstående som sagt ændringer som jeg forventer vi får ganske gratis med i Standard Edition af den næste Oracle database version, og dermed noget alle vil kunne drage nytte af. Og det er alle features som jeg forventer at kunne få glæde af fra dag ét. Men igen: Husk at ovenstående blot er ud fra hvad man pt. kan finde om den næste version af Oracle databasen – der er reelt ingen garanti for at funktionerne er med, når den næste version releases.

I have been working as a system developer, data modeler and DBA on the Oracle platform using SQL, Pl/SQL, Forms, Reports, JSP, HTML and Javascript since 1996, and have been involved in both client/server and web-based projects for 25+ different customers. I'm normally known as a problem solver