Follow Us on Twitter

In de wolken met Oracle 12c

Juli 2013 - Tijdens Oracle OpenWorld in oktober 2012 werd door Larry Ellison de nieuwste versie van de Oracle Database aangekondigd: Oracle 12c. Het was daarna nog erg lang wachten voordat we er daadwerkelijk mee aan de slag konden gaan. Op dinsdag 25 juni was het dan eindelijk zover: de software werd beschikbaar gesteld op de download sectie van de Oracle website. In eerste instantie zijn de versies voor de 64-bit varianten van Linux, Windows en Solaris gereleased. Later volgen de andere operating systems.

In dit Whitebook laten we een aantal belangrijke nieuwe features zien die versie 12c van de database software biedt. De beschreven vernieuwing in dit Whitebook zijn gekozen omdat ze veel meerwaarde gaan bieden voor business en ontwikkelaars, door Oracle groots zijn aangeprezen of gewoon 'cool' zijn om te noemen. De lijst is dus zeker niet compleet maar wel uitgebreid genoeg om een goed beeld te schetsen van de richting die Oracle heeft gekozen met 12c. Het volledige overzicht van alle wijzigingen staat in de lijst Oracle Database 12c Release 1 (12.1) New Features.

Cloud Architectuur

Met de 'c' van Cloud in de naam wil Oracle duidelijk aangeven dat het bedrijf zich toe heeft gelegd op deze architectuur. Hierbij is zeer goed gekeken hoe de beheerkosten bij (vooral grote) organisaties omlaag zouden kunnen, door ze gebruik te laten maken van (private) clouds. Daarnaast zouden de grote cloud leveranciers zoals Oracle zelf en SaaS (Software As A Service) leveranciers als SalesForce eenvoudiger en goedkoper beheer kunnen doen.

Belangrijk bij de introductie van 12c in deze context, is de term "Multitenant Architecture". Hiermee wordt bedoeld dat een database niet meer uit 1 stuk bestaat, maar dat het mogelijk is om meerdere databases in een container te stoppen.

De hoofdcontainer heet een Container Database (CDB) en de databases die hierin worden geplaatst zijn Pluggable Databases (PDB). De CDB is eigenaar van de SGA en alle lopende processen en de PDB’s worden hiermee aangestuurd. Dit vereist een compleet andere denkwijze voor database administrators, omdat het aanpassen van zaken in de CDB gevolgen heeft voor alle PDB’s daaronder.

Tot en met 11g had iedere database z’n eigen geheugeninstellingen, gebruikte z’n eigen processen en had iedere database ook z’n eigen database files zoals in onderstaand plaatje is geschetst voor een architectuur met een ERP systeem een CRM en een DataWarehouse.

Architectuur database 11g zonder Multitenant Architecture

In het volgende figuur is te zien hoe dit er uit ziet in een Multitenant Architecture.

Architectuur database 12c Multitenant Architecture

Zoals te zien is, worden geheugen, metadata en processen op één plek beheerd voor alle drie de systemen. De Pluggable Databases bevatten alleen nog de applicatiegegevens en data dictionaries specifiek voor het eigen systeem.

De voordelen die dit biedt zijn onder meer dat pluggable databases minder hardware-resources gebruiken en veel beter schaalbaar zijn. Daarnaast maakt het taken als upgraden, patchen en migreren veel eenvoudiger. Een patch uitgevoerd op de Container Database is ook meteen geïnstalleerd op alle Pluggable Database die zich in de container bevinden.

Het uitvoeren van een database migraties, bijvoorbeeld van een ontwikkelomgeving naar een testomgeving, wordt met PDB’s ook een stuk eenvoudiger. Het is mogelijk om een PDB uit een bepaalde container te klonen, de kloon uit te pluggen en onder een ander container weer in te pluggen. Zo zou een database applicatie de complete OTAP-straat (Ontwikkel, Test, Acceptatie en Productie) kunnen doorlopen, zonder dat het nodig is om individuele opleverscripts te maken.

Het uitpluggen en inpluggen in een nieuwe container werkt ongeveer als volgt:

-- Unplug de database
alter pluggable database pdb1 unplug into '/u01/app/oracle/oradata/pdb1.xml';
-- Verwijder de originele database, maar behoudt de datafiles
drop pluggable database pdb1 keep datafiles;
-- Maak een nieuwe directory aan voor de te klonen PDB
mkdir /u01/app/oracle/oradata/cdb2/pdb2
-- Maak de nieuwe PDB aan in de tweede CDB
create pluggable database pdb2 
AS CLONE using '/u01/app/oracle/oradata/pdb1.xml' 
MOVE 
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdb1','/u01/app/oracle/oradata/cdb2/pdb2');
-- Plug de nieuwe PDB weer in
alter pluggable database pdb_plug_move open;

Oracle heeft besloten de Multitenant Database als betaalde optie aan te bieden op de Enterprise Edition database. Dit maakt het vooral interessant voor organisaties met heel veel databases die het beheer willen vereenvoudigen en voor aanbieders van SaaS oplossingen met een Oracle database eronder.

Tabellen

Aan het definiëren van tabellen en kolommen is ook het één en ander gesleuteld door de mensen uit San Francisco. Ook hier is vaak de doelstelling geweest om het leven makkelijker te maken.Een overzicht van een aantal van deze wijzigingen volgt hieronder.

De lengte van VARCHAR2, NVARCHAR2 en RAW datatypes is vergroot van 4000 naar 32767 bytes. Hierdoor hoeft minder vaak naar een LOB type gegrepen te worden in een tabel. Dat lijkt een arbitraire wijziging, maar kan vrij veel impact hebben op beheer en het geheugen- en schijfgebruik van een database bij veel gebruikers.

Invisible Columns zijn toegevoegd. Deze kolommen worden niet weergegeven in een normaal Select statement, maar moeten specifiek worden benoemd.

create table gebruikers
  (
  id number,
  naam varchar2(100),
  email varchar2(255),
  password varchar2(100) INVISIBLE
  );

Een describe van deze tabel levert dan het volgende op:

SQL> desc gebruikers
 Name                                          Null?    Type
 --------------------------------------------- -------- -----
 ID                                                     NUMBER
 NAAM                                                   VARCHAR2(100)
 EMAIL                                                  VARCHAR2(255)

Een insert en select op deze tabel moet verplicht naar de invisible kolom verwijzen, voordat data kan worden weggeschreven of uitgelezen. Dit kan de veiligheid van een database vergroten.

Daarnaast kan het ook handig zijn bij aanpassingen aan tabellen. Als een bepaalde tabel wordt gevuld vanuit stored procedures, zonder named notations. Bijvoorbeeld als in de code staat: insert into tabel values (1,2) in een tabel met twee kolommen. Als er een derde kolom wordt toegevoegd aan de tabel, zou normaal gesproken de code moeten worden aangepast. Door de nieuwe kolom als invisible te definiëren, hoeft deze niet benoemd te worden en kan de code gelijk blijven. Natuurlijk zou ik als ontwikkelaar in eerste instantie de insert anders hebben gemaakt, om niet in deze situatie terecht te hoeven komen ;-)

Een andere interessante wijziging is dat kolommen een default waarde kunnen krijgen die verwijst naar een sequence. Voorheen was het altijd nodig om een trigger te maken om deze kolom te vullen. In 12c kan dat dus declaratief:

create table mijn_tabel
(
    id number default mijn_sequence.nextval primary key
);

In plaats van een default sequence, kan een kolom ook aangemaakt worden met het keyword 'identity'. Deze ANSI standaard zorgt ervoor dat bij een insert het nummer in de kolom automatisch wordt opgehoogd (auto-increment).

create table mijn_tabel
(
    id number generated as identity
);

Het voordeel hiervan laat zich vooral gelden in omgevingen waar vaak data migraties plaats vinden. Als data van omgeving x naar omgeving y worden overgezet, bestaat het risico dat de primary key sequences niet synchroon lopen en elkaar dus dwars gaan zitten. Met een identity kolom wordt dat probleem voorkomen, omdat de primary key automatisch één hoger is dan de hoogst aanwezige in de tabel waarin wordt gemigreerd.

De mogelijkheden van monitoring op de database zijn ook uitgebreid met DDL_LOGGING. Hiermee kunnen bijvoorbeeld DROP of CREATE commando’s worden gevolgd om te zien wanneer en door wie een bepaald object is verwijderd of aangemaakt. Vooral tijdens ontwikkelen met een groot team of met meerdere teams is het soms erg prettig om te zien wie een bepaalde wijziging heeft uitgevoerd.

Een TRUNCATE (en EXCHANGE) commando kan vanaf 12c worden uitgevoerd met de CASCADE optie. Dat wil zeggen dat met het commando TRUNCATE TABLE mijn_tabel CASCADE de volledige tabel mijn_tabel wordt geleegd, maar ook alle eventueel aanwezige child-records.

PL/SQL

Ook voor PL/SQL ontwikkelaars zijn er nieuwe mogelijkheden verschenen.

Het is mogelijk om een functie te gebruiken in een WITH clausule bij een query. Vaak wordt een WITH clause gebruikt om een lijst inputparameters niet meerdere keren hoeft op te geven. Denk hierbij aan een zoekterm die gebruikt wordt om te kijken of deze bestaat in een naam kolom, een username kolom, een emailadres of een beschrijving. Door slim gebruik te maken van een WITH clause, hoef je dan maar 1 inputparameter in de query te gebruiken in plaats van 4. Maar veel andere toepassingen zijn ook mogelijk, en dat aantal is met het toevoegen van functies weer uitgebreid.

In het onderstaande voorbeeld is een functie toegevoegd die meteen een commissie van 10% bij het salaris optelt.

WITH
  FUNCTION commission(waarde number)
  RETURN number IS
  BEGIN
    return waarde * 1.1;
  END;
SELECT ename, sal, commission(sal)
FROM emp

Om een selectie te maken van de eerste x resultaten uit een query, zijn een aantal mogelijkheden beschikbaar. Ten eerste is het mogelijk om WHERE ROWNUM <= x toe te voegen aan de query. Daarnaast kan een analytical function worden gebruikt als RANK() of DENSE_RANK(). Oracle 12c voegt daar een derde optie aan toe. Een zogenaamde Top-N query kan nu worden uitgevoerd middels syntax die voldoet aan de ANSI (American National Standards Institute) standaard.

De onderstaande query laat bijvoorbeeld de 5 meest verdienende medewerkers uit de EMP tabel zien.

SELECT ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 5 ROWS ONLY

White-listing is ook nieuw in Oracle 12c. Hiermee wordt bedoeld, dat toegang tot een bepaalde stored procedure (of package of function) kan worden beperkt tot een lijst van andere code. Door het toevoegen van het keyword ACCESSIBLE aan de definitie van het object kan dit geregeld worden. Bijvoorbeeld met het commando CREATE OR REPLACE PROCEDURE mijn_proc ACCESSIBLE BY (mijn_andere_proc) wordt de procedure “mijn_proc” aangemaakt. Deze is nu alleen aan te roepen door de procedure met de naam “mijn_andere_proc”.Een aanroep van “mijn_proc” vanuit een ander stuk code zal resulteren in een error van het type PLS-00904.

Dit heeft een aantal duidelijke voordelen wat betreft de veiligheid. Zo kan de ontwikkelaar zelf bepalen wie en wat zijn procedure kan aanroepen.

Wat minder in het oog zal springen, is het voorkomen van SQL Injectie. Dit is een vorm van misbruik van databaseapplicaties, waarbij kwaadwillenden code kunnen uitvoeren op een database. SQL Injectie wordt meestal mogelijk gemaakt door een fout in de database programmatuur zelf of door een bug in PL/SQL code. Met white-listing wordt dat voorkomen, omdat de programmatuur niet aangeroepen kan worden door andere code dan die vooraf is aangegeven.


xkcd 327: Exploits of a Mom.

Zelf proberen?

Als u inmiddels zelf nieuwsgierig geworden bent naar de mogelijkheden van Oracle 12c, is het vrij eenvoudig om zelf een proef-installatie uit te voeren.

Zorg allereerst voor een compatibel operating system, zoals in dit voorbeeld Oracle Linux 6 64-bit. Deze is verkrijgbaar via edelivery.oracle.com/linux. Indien gewenst, kan die ook in een virtuele omgeving als Virtualbox of Oracle VM worden geïnstalleerd. Voer daarna als de root-gebruiker het commando “yum update” uit in een terminal sessie.

Het commande “yum install oracle-rdbms-server-12cR1-preinstall” zorgt er daarna voor dat alle benodigde bestanden, gebruikers en instellingen worden aangemaakt. Tenslotte kan simpelweg de 12c RC1 software worden gedownload van de Oracle website en de installatie worden gestart.

Installeer Oracle 12c op Oracle Enterprise Linux

Conclusie

Dit Whitebook biedt een inzicht in de veranderingen die Oracle heeft doorgevoerd in versie 12c van z’n database software. Het is bij lange na geen volledig overzicht, omdat er simpelweg ontzettend veel is gewijzigd. Maar met dit overzicht is te zien dat Oracle weer een grote stap heeft gezet. De database is weer veiliger geworden, verbruikt minder hardware resources, is makkelijker in gebruik en biedt meer mogelijkheden voor gebruikers en ontwikkelaars.

Als ontwikkelaar ben ik zelf erg enthousiast over de extra mogelijkheden op het gebied van beveiliging, maar ook de verbeteringen rond auto-increment en het default maken van een sequence zal ik in de praktijk erg vaak gebruiken.

In dezelfde periode dat Oracle 12c is uitgekomen, zijn ook diverse andere nieuwe versies van software uitgekomen. Bijvoorbeeld Weblogic 12c, JDeveloper 12c en ADF 12c hebben het daglicht gezien.

Met deze snelle uitrol van veel producten toont Oracle aan dat het serieus werk maakt van z’n hele spectrum aan producten. De verwachting is dan ook dat er binnenkort meer gaat volgen.

Bronnen

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.