Réalisé par : DAAIF Jabran CHERKAOUI Khaoula ABBAR Amina BOUSTANI Sara Structure de stockage Réalisé par : DAAIF Jabran CHERKAOUI Khaoula ABBAR Amina BOUSTANI Sara Encadré par : M.HANOUNE Année universitaire : 2013-2014
Définition Un tablespace est un espace logique qui contient les objets stockés dans la base de données comme les tables ou les indexes. Un tablespace est composé d'au moins un fichier de données qui est physiquement présent sur le serveur à l'endroit stipulé lors de sa création. Chaque fichier est constitué de segments d'au moins un extent (ou page) lui-même constitué d'au moins 3 blocs : l'élément le plus petit d'une base de données.
Une base de données possède toujours au minimum deux tablespaces nommés SYSTEM qui contient le dictionnaire de données et le rollback segment et SYSAUX qui contient les données de certains composants Oracle. Description des tablespaces de la base courante dans les vues Dba_tablespaces et Dba_data_files du dictionnaire.
Les différents types de tablespaces Le tablespace temporaire Il s’agit d’un tablespace spécifique aux opérations de tri .Ce tablespace n'est pas destiné à accueillir des objets et son usage est réservé au système. Depuis la version 9i, Oracle permet de définir un tablespace par défaut au niveau base de données (à la création de la base) ou utilisateur, chaque utilisateur pouvant avoir son propre tablespace temporaire . On peut (et doit) créer un tablespace temporarire par défaut autre que SYSTEM, où seront stockées toutes les données utilisées lors des tris, création d'index, jointures, etc. Ils sont définis lors de la création de la base.
Voir les vues dynamiques V$TEMP_EXTENT_MAP et V$TEMP_SPACE_HEADER pour des infos précises sur l'utilisation en temps réel de ces tablespaces. Le tablespace UNDO Le tablespace UNDO est réservé exclusivement à l'annulation des commandes LMD (UPDATE, INSERT, etc...). Lorsqu'on exécute l'ordre DELETE par exemple, Oracle commence par copier les lignes à supprimer dans le tablespace UNDO et ensuite indique que les blocs contenant les données dans le tablespace d'origine sont libres. Un ROLLBACK permet de revenir en arrière alors que le COMMIT supprimera les lignes du tablespace UNDO .
Tablespaces en lecture seule (READ ONLY tablespaces) Ces tablespaces sont utilisés en lecture seule. Ils permettent de stocker des données statiques ou variant très peu souvent, et ne rentrent pas en ligne de compte dans les sauvegardes / restaurations. Pour modifier les données d'un Tablespace READ ONLY il est évidemment obligatoire de modifier préalablement son statut.
Gestion de l'allocation d'espace Lors de la création d'un segment , Oracle crée un extent (dont la taille est définie dans les clauses de stockage) dans le tablespace cible. Lorsqu'on rempli ce segment Oracle rempli les blocs de données qui constituent l'extent jusqu'à remplir l'extent entièrement et crée un nouvel extent si le précédent est plein. Ainsi l'insertion de gros volumes peut générer un grand nombre de créations d'extents ce qui peut s'avérer coûteux à la longue. Il existe 2 modes de gestion d'espace pour les tablespaces : la gestion par dictionnaire ou local (qui est apparue avec la version 8i).
Un tablespace géré par dictionnaire ordonne à Oracle de stocker les informations relatives à l'allocation d'espace dans le dictionnaire de données ce qui induit une charge supplémentaire pour toutes les opérations sur les objets d'un tablespace et oblige le DBA à tuner finement la taille des extents pour éviter une fragmentation des fichiers et des accès intempestifs au dictionnaire de données. Heureusement depuis la version 8i, Oracle s'affranchit de la notion d'extent grâce au tablespace géré localement (dit locally managed) qui stocke toutes les informations de stockage en entête du tablespace.
Stockage des tablespaces gérés localement Les informations relatives à la gestion de l’espace (extensions libres/allouées) sont enregistrées dans un bitmap, dans l’entête de chaque fichier de données du tablespace.
Les avantages moins de SQL récursif moins d’allocation d’espace extensions adjacentes libres automatiquement identifiées La taille des extensions gérées localement peut être déterminée automatiquement par le système.
Les extensions d'un tablespace géré localement peuvent être allouées de deux façons : Une gestion dite "automatique" Une gestion dite "uniforme" La taille par défaut est de 1 mégaoctet
Par défaut, un tablespace permanent géré localement est en gestion automatique des extensions ,la gestion uniforme doit être spécifiée. Un tablespace temporaire géré localement est obligatoirement en gestion uniforme des extensions
Gestion de l’espace des segments dans un tablespace géré localement Automatic: un bitmap est une carte qui décrit le statut de chaque bloc de données d'un segment, par rapport à la quantité d'espace du bloc disponible pour l'insertion de lignes. cette forme de gestion de l'espace est donc appelée gestion automatique de l'espace dans les segments.
Manual : ce mode indique à Oracle que vous souhaitez utiliser des listes de blocs libres (free lists) pour la gestion de l'espace libre dans les segments. Les listes de blocs libres sont des listes de blocs de données contenant de l'espace disponible pour l'insertion de lignes. Cette forme de gestion nécessite de définir et de régler les paramètres de stockage PCTUSED, FREELISTS et FREELIST GROUPS
Tablespace dans la base de données préconfigurés UNDOTBS1 USERS EXAMPLE SYSTEM SYSAUX TEMP
Le tablespace SYSTEM :contient le dictionnaire de données. Le tablespace SYSAUX :contient les données de certains composants Oracle. Une base de données contient souvent deux tablespaces particuliers, utilisés en interne par Oracle: le tablespace d’annulation et le tablespace temporaire.
Tablespace temporaire/TEMP :Héberge toutes les opérations de tri de données Tablespaces d’annulation/ UNDOTBS1 :toutes les données d’annulation sont stockées dans un tablespace spécial appelé« UNDO ». Lorsque vous créez un tablespace « UNDO », Oracle gère le stockage,et l’emploi de l’espace pour les données de rollback .
USERS : ce tablespace est utilisé pour le stockage des données et objets utilisateur permanents. Pour les utilisateurs SYS et SYSTEM (les utilisateurs système), le tablespace permanent par défaut reste SYSTEM.
EXAMPLE : ce tablespace contient les exemples de schéma pouvant être installés lors de la création de la base de données. La documentation et les cours Oracle contiennent des exemples basés sur ces schémas
Créer un tablespace Il existe 3 types de tablespaces: permanent, temporaire et undo, chacun des types a une syntaxe de création particulière. Pour créer un tablespace –quelque soit sont type- on utilise la commande CREATE TABLESPACE, par défaut, un tablespace est du genre read/write, on peut changer cela plus tard. Prérequis: On doit avoir le privilège système CREATE TABLESPACE, pour créer un tablespace SYSAUX, on doit avoir le privilège système SYSDBA. Avant de créer un tablespace, on est censé avoir une base de données pour le contenir, et la base de données doit être ouverte.
La syntaxe générale pour créer un tablespace est comme suit:
Schéma de la syntaxe de création d’un tablespace permanent. Créer un tablespace Schéma de la syntaxe de création d’un tablespace permanent.
Créer un tablespace Tablespace permanent: }) EXTENT MANAGEMENT { LOCAL CREATE [ BIGFILE | SMALLFILE ] TABLESPACE Name [ AUTOALLOCATE DATAFILE file_specification SIZE integer [ K | M | G | T | P | E ] [REUSE] | UNIFORM [ SIZE integer [ K | M | G | T | P | E ] ] ] AUTOEXTEND | DICTIONARY } { OFF SEGMENT SPACE MANAGEMENT { AUTO | MANUAL } | ON | [ MINIMUM EXTENT integer [ K | M | G | T | P | E ] [ NEXT integer [ K | M | G | T | P | E ]] | BLOCKSIZE integer [ K ] [ MAXSIZE { UNLIMITED | integer [ K | M | G | T | P | E ] } ] | { LOGGING | NOLOGGING } |DEFAULT [ { COMPRESS | NOCOMPRESS }] | FORCE LOGGING STORAGE | FLASHBACK { ON | OFF } ({ INITIAL integer [ K | M | G | T | P | E ] | { ONLINE | OFFLINE }; | NEXT integer [ K | M | G | T | P | E ] | MINEXTENTS integer | MAXEXTENTS { integer | UNLIMITED } | PCTINCREASE integer | FREELISTS integer | FREELIST GROUPS integer | OPTIMAL [ integer [ K | M | G | T | P | E ] | NULL ] | BUFFER_POOL { KEEP | RECYCLE | DEFAULT }
Créer un tablespace Signification de quelques champs • BIGFILE | SMALLFILE. Si cette clause est omise, Oracle prendra le type par défaut défini au niveau de la base de données. • Name. C'est le nom que vous donnerez à votre Tablespace. • DATAFILE file_specification. Permet de préciser l'emplacement du fichier de données pour le Tablespace. • AUTOEXTEND. Indique si le fichier pourra grossir une fois l'espace alloué est utilisé. • NEXT. Espace alloué lors de l'extension. • MAXSIZE. Taille maximale du fichier. • EXTENT MANAGEMENT. Mode de gestion des extensions du Tablespace. • SEGMENT SPACE MANAGEMENT. Mode de gestion de l'espace libre des segments dans le Tablespace.(clause valable si TBS géré localement uniquement). • MINIMUM EXTENT. Taille minimum des Extensions dans le Tablespace. (clause valable si TBS géré dans le Dictionnaire uniquement). • BLOCKSIZE. Taille du bloc utilisée par le Tablespace. (2k, 4K, 8K, 16K, 32K) • LOGGING | NOLOGGING. Définit le mode de journalisation des segments qui seront stockés dans le Tablespace. Clause ignorée si FORCE LOGGING est actif niveau Tablespace ou Base de données. • FORCE LOGGING. Permet de garantir que les modifications sont enregistrées dans les fichiers de journalisation. • FLASHBACK { ON | OFF. Indique si le Tablespace participe aux opérations de FLASHBACK Database. • ONLINE | OFFLINE. Indique si le Tablespace est crée Online ou Offline.
Créer un tablespace
Créer un tablespace Pour pouvoir créer un tablespace temporaire, il faut tout d’abord paramétrer notre base de données, de sorte à ce que la création soit possible.
Schéma pour illustrer la création d’un tablespace temporaire Créer un tablespace Schéma pour illustrer la création d’un tablespace temporaire
Créer un tablespace Même chose pour la création d’un tablespace temporaire, un tablespace undo doit être déclaré durant la création de la base de données supposant le contenir
Schéma pour illustrer la création d’un tablespace UNDO Créer un tablespace Schéma pour illustrer la création d’un tablespace UNDO
Créer un tablespace undo: Clause rétention Cette clause est uniquement utilisée pour les tablespaces undo, elle a deux valeurs: RETENTION GUARANTEE: spécifie que la base de données Oracle doit préserver les undo non expirés dans tous les segments undo de la tablespace même si cela doit forcer les opérations qui nécessitent un espèce d’annulation dans ces segments. Ce réglage est utile si vous avez besoin de faire une requête Oracle FlashBack, ou une requête de transaction Oracle Flashback pour diagnostiquer et corriger un problème de données. RETENTION NOGUARANTEE: cela retourne l’ordre d’annulation à son état normal, l’espace occupé par les données d’annulations non expirées dans les segments undo peuvent être utilisés si nécessaire par les transactions en cours, et c’est le réglage par défaut.
Modifier un tablespace Pour modifier un tablespace, on utilise la commande ALTER TABLESPACE. Prérequis: Pour modifier les tablespaces SYSAUX, on doit avoir le privilège système SYSDBA. Si on possède le privilège ALTER TABLESPACE, alors on peut modifier les tablespaces comme on le souhaite, mais si on uniquement le privilège MANAGE TABLESPACE, alors on ne peut exécuter que les opérations suivantes: Modifier le tablespace en offline ou online. Commencer ou arrêter la sauvegarde. Rendre le tablespace en mode read only ou read/write. Avant de rendre le tablespace en mode read only, les conditions suivants doivent être vérifiées: Le tablespace doit être en mode online. Le tablespace ne doit pas avoir un segment rollback actif. Le tablespace ne doit pas être accessible, Oracle vous recommande que vous supprimiez le segment rollback avant de rendre le tablespace en mode read only. Le tablespace ne doit être associé à un backup ouvert, parce que la fin d’une sauvegarde met à jour le fichier de l’entête de tous les fichiers de données dans le tablespace.
Modifier un tablespace Comme pour toute commande SQL, la commande ALTER TABLESPACE a une syntaxe précise : ALTER TABLESPACE tablespace { DEFAULT [ table_compression ] storage_clause | MINIMUM EXTENT size_clause | RESIZE size_clause | COALESCE | RENAME TO new_tablespace_name | { BEGIN | END } BACKUP | datafile_tempfile_clauses | tablespace_logging_clauses | tablespace_group_clause | tablespace_state_clauses | autoextend_clause | flashback_mode_clause | tablespace_retention_clause } ;
Modifier un tablespace COALESCE : permet de fusionner les extents libres contigüs.
Modifier un tablespace Exemples de modification d’un tablespace:
Actions sur les tablespaces (1)
Actions sur les tablespaces (2) Add Datafile : ajoute un fichier de données au tablespace. Create Like : crée un tablespace en utilisant un modèle. Generate DDL : génère l'instruction LDD qui crée le tablespace. Make Locally Managed : convertit le tablespaces en tablespace géré localement. Make Readonly : (lecture seule) aucune instruction LMD ou autre activité d'écriture n'est autorisée à démarrer sur le tablespace.
Actions sur les tablespaces (3) Make Writable : permet le lancement d'instructions LMD et d'autres activités d'écriture sur les objets du tablespace. Place Online. Reorganize : démarre l'assistant Reorganization Wizard. Show Dependencies : affiche les objets on dépendance avec le tablespace. Run Segment Advisor : la fonction de conseil Segment Advisor vous aide à déterminer si un objet dispose d'espace disponible pouvant être récupéré. Take Offline.
Supprimer des tablespaces (1)
Supprimer des tablespaces (2) Syntaxe: DROP TABLESPACE; Remarques: les pointeurs du fichier de contrôle de la base de données associée sont supprimés. Il est possible de supprimer les fichiers du système d'exploitation (fichiers de données) qui constituaient le tablespace supprimé. Il n’est pas possible de supprimer un tablespace contenant des segments actifs. Il est préférable de placer le tablespace hors ligne avant de le supprimer.
Afficher des informations relatives aux tablespaces
Afficher des informations relatives aux tablespaces (2) Syntaxe: DBA_TABLESPACES V$TABLESPACE Informations relatives aux fichiers de données : DBA_DATA_FILES V$DATAFILE Informations relatives aux fichiers temporaires : DBA_TEMP_FILES V$TEMPFILE
Synthèse Ce chapitre vous a permis d’apprendre à: Utiliser des tablespaces pour séparer des données Crée différentes types de tablespaces Gérée les tablespaces Obtenir des informations sur les tablespaces
FIN