Oracle/Databasestructuren
Een Oracle-database bestaat uit een aantal fysieke bestanden. Intern werkt Oracle met blokken of groepen van blokken. Het merendeel van de fysieke bestanden bestaan uit een aaneenschakeling van logische blokken. Deze blokken zijn te groeperen in andere logische eenheden zoals extents en segmenten. Op verschillende niveaus kan bepaald worden hoe deze logische blokken ingedeeld moeten worden en kan bijvoorbeeld het groei-gedrag aangegeven worden.
De verschillende soorten fysieke bestanden dienen voor het opslaan van bepaalde types data. Datafiles zijn voor de opslag van data (rijen en indexen) en tempfiles voor het opslaan van tijdelijke, vluchtige, data. Op sommige bestanden heeft men veel invloed en beheermogelijkheden, datafiles, op andere praktisch niet, zoals de controlfiles. En weer andere bestanden, zoals de archivelog bestanden, zijn weer een kopie van andere, de redolog bestanden.
Logische eenheden
[bewerken]De logische structuren voor het opslaan van data is als volgt. Data wordt opgeslagen in (data)blok, een blok behoort bij een extent en een extent behoort bij een segment. Oftewel een segment heeft één of meerdere extents en een extent heeft minimaal een aantal blokken. Dus een tabel of index is een segment dat bestaat uit minimaal 1 extent en dat extent heeft een aantal blokken.
Het minimaal aantal blokken binnen een extent hangt af van meerdere factoren. Bijvoorbeeld is dit het eerste extent van een segment en in welk type tablespace wordt dit segment opgeslagen, een dictionary of locally managed tablespace. De omvang van het datablok is ook van belang in de bepaling wat het minimaal aantal blokken in een extent is.
Deze logische groepering van blokken geldt voor datafiles en tempfiles. Controlfiles en redolog-files hebben wel blokken, van een andere omvang en indeling, dan een datablok, maar hebben geen extents of segmenten. Dit geldt ook voor archivelogfiles aangezien dit kopieën zijn van redologfiles.
blok
[bewerken]extent
[bewerken]tabel/index segment
[bewerken]undo segment
[bewerken]Fysieke structuren
[bewerken]Zoals gezegd bestaat een Oracle-database uit een verzameling fysieke bestanden. Deze bestanden staan op de databaseserver op filesystemen. Dit ook op verschillende soorten filesystemen, standaard filesystemen van het besturingssysteem zoals ext3 of NTFS. Maar ook speciale filesystemen zoals het Oracle Clustered Filesystem (OCFS) voor RAC-installatie. Ook is het bij Unix/Linux-systemen mogelijk om de fysieke databasebestanden op een zogenaamd raw device te plaatsen.
Een raw device is een hele of een gedeelte van een disk zonder formattering, filesysteem. Doordat er geen filesysteem aanwezig is, scheelt dit in de I/O-overhead en dus een performancevoordeel. Echter raw devices hebben enkele grote beheerproblemen, het besturingssysteem ziet geen bestanden op een raw device, daarom zijn de standaard utilities voor bestandsbeheer niet te gebruiken, wat het beheer extra lastig maakt.
Vanaf Oracle10g is het mogelijk om de fysieke bestanden op te slaan op schijven, die door Oracle volledig beheerd worden. Deze technologie heet Automatic Storage Management (ASM). Met ASM is Oracle zelfs in staat om RAID-technologie toe te passen op deze disks. Hiermee heeft men de performancevoordelen van raw devices en niet de nadelen. Oracle regelt namelijk het bestandsbeheer van deze disks.
De benaming van de fysieke databasebestanden kan tegenwoordig ook door Oracle beheerd worden. Sinds Oracle9i bestaat de mogelijkheid om de fysieke bestandsnaam achterwege te laten en dan zal Oracle een gegenereerde naam aan het bestand geven, Oracle Managed Files (OMF). Een van de voordelen van OMF is dat ook logische directorystructuren worden aangemaakt voor de verschillende types bestanden.
controlfiles
[bewerken]De controlfile is een binair bestand dat informatie van alle fysieke datafiles heeft en de huidige transactiestaat waarin ze verkeren.
In de controlfile wordt een SCN (System Change Number) bijgehouden, en als de datafile een andere SCN heeft dan de controlfile, dan is recovery vereist. De Controlfile is noodzakelijk voor het opstarten en recoveren van de database.
Het is zeker raadzaam om de Controlfile te multiplexen het liefst op verschillende harde schijven.
Voor het maken van een backup van de controlfile in binair mode:
alter database backup controlfile to '/home/user';
Voor het maken van een backup van de controlfile in leesbaar ASCII:
alter database backup controlfile to trace;
De trace-controlfile staat in de udump-directory van de database. Als de OFA-structuur wordt aangehouden zal het deze locatie zijn:
- /mount_point/app/oracle/admin/ORACLE_SID/udump
en hier moet je dan kijken in de laatste tracefile die gegenereerd is.
datafiles
[bewerken]De datafiles, dit zijn de fysieke bestanden op een harde schijf (of SAN/NAS) waar de data in staat. Het is gebruikelijk een datafile de extensie .ora of .dbf mee te geven.
Het is vaak handig een conventie te verzinnen zodat je alleen al bij het zien van de datafilenaam, je de tablespacenaam weet en misschien zelfs of het om de indexdata gaat. (Bij grote databases is het vaak wenselijk om de data en indexen te splitsen, en de datafiles op verschillende harde schijven te zetten. Dit geeft een betere performance)
tempfiles
[bewerken]De tempfiles zitten in een zogenaamde Temporary Tablespace. Het doel van deze tablespace is een stukje harddiskruimte te reserveren voor sorteringen wanneer deze niet meer in het geheugen passen. Bijvoorbeeld een GROUP BY-sortering, maar ook voor joins ANALYZE- en DISTINCT-operaties, wordt de Temporary tablespace gebruikt. Er staat geen informatie van de tempfile in de controlfile.
redologfiles
[bewerken]De Redolog slaat alle veranderingen op die zijn gemaakt in de datafiles. Als er iets mis gaat met een datafile is het op die manier mogelijk om met behulp van een (online) backup en de redologs de datafile te herstellen tot een moment waar deze nog goed was.
archivelogfiles
[bewerken]Archive-logfiles zijn niets anders dan gearchiveerde redolog-files. De locatie waar dit plaats vindt is te zetten in de initSID.ora-file.