Table Spaces Et Segments D ORACLE
Table Spaces Et Segments D ORACLE
Table Spaces Et Segments D ORACLE
les tablespaces
Tablespaces standards (ou PERMANENTs)
Une base peut tre dcompose en tablespaces : partitions logiques contenant un ou plusieurs fichiers. Un fichier appartient 1 et 1 seul tablespace. Un tablespace peut s'tendre soit par ajout (on-line) d'un fichier, soit par auto-extension DU fichier du tablespace. Par dfaut il existe toujours un tablespace baptis SYSTEM qui contient le dictionnaire de donnes et le rollback segment SYSTEM (dans le cas ou il n'existe pas d'UNDO tablespace). On peut galement stocker les datas et les index dans ce mme tablespace, et obtenir ainsi une base minimale peu structure, peu perforformante et peu scurise :
Au contraire on peut rpartir les donnes, les index, mais aussi les images avant (rollback segments) sur un nombre maximum de disques. On y gagnera en performance, en souplesse, et en scurit :
ordres SQL associs aux tablespaces : SQL> CREATE TABLESPACE ... SQL> DROP TABLESPACE... SQL> ALTER TABLESPACE...
par dfaut un tablespace la cration est ON LINE (et donc accessible), il peut tre mis OFFLINE (et les fichiers qu'il continet par consquent) pour en interdire l'accs ou pour certaines oprations de maintenance Description des tablespaces de la base courante dans les vues Dba_tablespaces et Dba_data_files du dictionnaire.
extension du tablespace
La taille d'un tablespace est la taille de son (ses) fichier(s) d'origine. Pour augmenter la taille d'un tablespace, il y a 2 solutions :
Ajouter un fichier au tablespace, qui sera chain au premier (ALTER TABLESPACE toto ADD DATAFILE...)
mettre le fichier du tablespace en AUTO extension (ALTER DATABASE DATAFILE toto.dbf AUTOEXTEND ON)
Une table (et tout segment en gnral) , peut "s'taler" sur plusieurs fichiers. Ainsi le fait qu'une table sature un tablespace n'est pas bloquant il suffit d'augmenter la taille du tablespace. ATTENTION : la clause AUTOEXTEND specifie la taille d'extension du fichier d'un tablespace. La clause STORAGE INITIAL, NEXT, MINEXTENTS ... spcifie la taille d'extension d'UN SEGMENT du tablespace par exemple une table. Ces 2 paramtres sont totalement indpendants. La preuve en est qu'une table (un segment de donnes) est forcment en allocation dynamique alors qu'un fichier peut avoir une taille fixe (AUTOEXTEND OFF)
Les diffrents types de tablespaces spciaux
SQL> CREATE USER toto IDENTIFIED BY tutu DEFAULT TABLESPACE data QUOTA 100M ON data TEMPORARY TABLESPACE temp_ts Voir les vues dynamiques V$TEMP_EXTENT_MAP et V$TEMP_SPACE_HEADER pour des infos prcises sur l'utilisation en temps rel de ces tablespaces.
Dans les versions prcdentes d'Oracle, ces structures n'existaient pas et on utilisait des ROLLBACK SEGMENTS implantables dans n'importe quel tablespace. Oracle peut dsormais fonctionner avec des UNDO tablespaces (gestion Automatique, prconise) ou avec des rollback segfments (gestion manuelle) Paramtres de l'INIT.ORA associs valeurs but AUTO | UNDO MANAGEMENT utiliser les UNDO tbs ou les rollback segments MANUAL nom UNDO TABLESPACE prcise le tablespace d'UNDO a utiliser par la base tablespace evite les erreurs lorsue l'on tente d'utiliser explicitement les Rollback Segments (ALTER TRUE | UNDO_SUPPRESS_ERRORS ROLLBACK..., SET TRANSACTION USE FALSE ROLLBACK...) alors que la base utilise des UNDO tbs SQL spcifice associ CREATE UNDO TABLESPACE undo_1 DATAFILE '/tmp/undo1.dbf' SIZE 10M AUTOEXTEND ON ou ds la creation de la base CREATE DATABASE test... UNDO TABLESPACE undo_1 DATAFILE '/tmp/undo1.dbf' SIZE 10M AUTOEXTEND ON paramtres
A la diffrence des tablespaces standards gr au niveau du dictionnaire de donnes, la gestion de l'espace physique (allocation / libration de blocs) se fait dans l'entte du fichier(s) du tablespace. Une table binaire d'allocation (bitmap) y est maintenue. Avantages :
pas de contention en mise a jour au niveau du dictionnaire et consquemment pas d'utilisation de Rollback segment pour ces transactions pas de soucis de gestion de l'espace (calcul d'un storage adquat) "coalesce" automatique (fusion des espaces libres contigus pour optimmiser l'espace libre)
Evidemment la clause "DEFAULT STORAGE" est invalide pour les tablespaces grs localement. les segments
un segment est compos d'extents. Un extent est compos de blocs contigus dont la taille dpend de l'OS. Le segment s'tend dynamiquement au sein du tablespace (ventuellemnt sur plusieurs fichiers donc...).
Il existe plusieurs types de segments : - segment de donnes = table - segment d'index = index - segment d'annulation = rollback segment, qui stocke l'image avant modification des donnes - segment temporaire , utilis en interne par Oracle, si la zone mmoire de tri est insuffisante remarque : seuls les objets 'physiques' peuvent tre des segments. Ainsi une vue ou un synonyme n'est pas un segment... On peut forcer les segments de donnes et d'index s'implanter dans un tablespace particulier : - explicitement la cration du segment - implicitement en affectant un tablespace par dfaut l'uttilisateur qui va crer le segment.
SQL> create table credit (n number, ...) tablespace TBS_COMPTA; ou bien SQL> create user Appli_comptable default tablespace COMPTA; SQL> create table credit (n number, ...); Description dans la vue dba_segments du dictionnaire.
"SYSTEM" : le DBA prcise la taille de l'extent INITIAL puis Oracle dtermine au mieux la taille des extents suivants (minimum 64K) "UNIFORM" : tous les extents auront la mme taille, prcise par le DBA, ou la taille par dfaut : 1MO
la colonne BYTES donne la taille de chaque trou en octets. Pour avoir l'espace libre total d'un tablespace il faudra donc sommer tous les espaces libres de tous les fichier du tablespace. SELECT SUM(BYTES)/1024 "Taille en KO" FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME= 'TBS_TOTO
Pour rcuprer l'espace libre d'un segment, on peut utiliser TRUNCATE table_toto DROP STORAGE ou
ALTER TABLE table_toto DEALLOCATE UNUSED L'espace libre est dfragment de temps en temps par Oracle. En clair les espaces libres contigus sont fusionns (COALESCED). voir DBA_FREE_SPACE_COALESCED dans le dictionnaire.