Tape les ordres courts sans regarder, puis Entrée (casse ignorée, ; final facultatif). Pour les autres questions, réponds avant d’ouvrir : c’est l’effort de rappel qui fait retenir.
Rappel actif
Restitue de mémoire, sans support.
Donne la hiérarchie logique d’Oracle, de la base au plus petit élément, puis ce qui lui correspond côté physique.
- Logique : base de données, tablespace, segment, extent (extension), bloc de données Oracle.
- Physique : fichier de données (pour le tablespace), bloc du système d’exploitation (pour le bloc Oracle).
Un tablespace se compose d’un ou plusieurs fichiers de données, et un bloc Oracle d’un ou plusieurs blocs OS.
Pour chaque information, donne la vue
DBA_: tablespaces, fichiers de données, fichiers temporaires, extents, segments, espace libre.DBA_TABLESPACES,DBA_DATA_FILES,DBA_TEMP_FILES,DBA_EXTENTS,DBA_SEGMENTS,DBA_FREE_SPACE.Équivalents dynamiques :
V$TABLESPACE,V$DATAFILE,V$TEMPFILE. Taille de bloc par défaut :DB_BLOCK_SIZE.
Tape la commande
Écris la commande exacte, puis Entrée pour vérifier.
Mets le tablespace
TBL01en lecture seule.ALTER TABLESPACE TBL01 READ ONLY;Les transactions en cours peuvent se terminer, aucune nouvelle instruction LMD ne démarre.
Rends le tablespace
TBL01indisponible aux utilisateurs.ALTER TABLESPACE TBL01 OFFLINE;Le fichier
C:\ORACLE\ORADATA\BDSCO2\TBL01fd03.dbfest trop petit : passe-le à 50 Mo.ALTER DATABASE DATAFILE 'C:\ORACLE\ORADATA\BDSCO2\TBL01fd03.dbf' RESIZE 50M;Piège : c’est
ALTER DATABASE, pasALTER TABLESPACE. On agit sur un fichier, pas sur le tablespace.Supprime le tablespace
TBL01avec tous les objets qu’il contient.DROP TABLESPACE TBL01 INCLUDING CONTENTS;Sans
INCLUDING CONTENTS, la suppression échoue si le tablespace n’est pas vide.
Écris-le
Rédige la requête, la configuration ou le code, puis compare avec la réponse.
Crée le tablespace
TBL01avec un fichierC:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\FDAUTO1.dbfde 10 Mo, qui grandit de 2 Mo en 2 Mo jusqu’à 20 Mo maximum.CREATE TABLESPACE TBL01 DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\FDAUTO1.dbf' SIZE 10M AUTOEXTEND ON NEXT 2M MAXSIZE 20M;Ajoute à
TBL01un second fichierC:\ORACLE\ORADATA\BDSCO2\TBL01fd03.dbfde 30 Mo, extensible de 5 Mo en 5 Mo jusqu’à 100 Mo.ALTER TABLESPACE TBL01 ADD DATAFILE 'C:\ORACLE\ORADATA\BDSCO2\TBL01fd03.dbf' SIZE 30M AUTOEXTEND ON NEXT 5M MAXSIZE 100M;Ici c’est bien
ALTER TABLESPACE: on ajoute un fichier au tablespace.Supprime
TBL01, ses objets, les contraintes d’intégrité d’autres tables qui pointent vers eux, et ses fichiers sur disque.DROP TABLESPACE TBL01 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;Le cours présente
AND DATAFILESseul (DROP TABLESPACE x AND DATAFILES) : dans la syntaxe Oracle,AND DATAFILESne s’utilise qu’aprèsINCLUDING CONTENTS.Écris la requête qui affiche l’espace libre total, en Mo, de chaque tablespace.
SELECT tablespace_name, SUM(bytes)/1024/1024 AS libre_mo FROM dba_free_space GROUP BY tablespace_name;
Distingue
Deux notions proches : dis ce qui les sépare vraiment.
ALTER TABLESPACE ... READ ONLYetALTER TABLESPACE ... OFFLINE: que peut encore faire un utilisateur dans chaque cas ?READ ONLY: il peut encore lire (SELECT), pas modifier. Les transactions en cours se terminent.OFFLINE: plus aucun accès aux données du tablespace, même en lecture.
Extent et segment : lequel est alloué d’un bloc, lequel grandit, et lequel est dédié à un objet ?
Un extent est une suite contiguë de blocs, de taille fixée par le DBA. Un segment est un ensemble d’extents, dédié à un type d’informations (une table, un index). Le segment reçoit un extent initial à sa création, puis de nouveaux extents dynamiquement quand il a besoin de place : c’est lui qui grandit, extent par extent.
Tablespace géré localement et géré par le dictionnaire : où est suivi l’espace libre, et lequel Oracle recommande-t-il ?
- Localement (recommandé) : un bitmap dans le tablespace lui-même enregistre les blocs libres ou utilisés.
- Dictionnaire : les extents libres sont suivis dans les tables du dictionnaire, mises à jour à chaque allocation ou libération.
Le local évite de faire passer chaque allocation par le dictionnaire, partagé par toute la base.
DROP TABLESPACE x,... INCLUDING CONTENTS,... INCLUDING CONTENTS AND DATAFILES,... CASCADE CONSTRAINTS: qu’ajoute chaque niveau ?Ordre Effet DROP TABLESPACE xSuppression logique, échoue si non vide INCLUDING CONTENTSSupprime aussi les objets du tablespace ... AND DATAFILESSupprime aussi les fichiers du disque (sinon ils restent, orphelins) CASCADE CONSTRAINTSSupprime les contraintes d’autres tablespaces qui référencent ces objets
Explique pourquoi
Le mécanisme derrière la règle.
Pourquoi Oracle recommande-t-il de ne rien stocker d’autre que le dictionnaire dans le tablespace
SYSTEM?SYSTEMcontient le dictionnaire, donc toute la base en dépend, et il ne peut jamais être mis offline. Y mettre des données applicatives les empêche d’être gérées séparément (lecture seule, offline, quotas), et une table qui le remplit peut bloquer le dictionnaire, donc toute la base.Pourquoi un DBA crée-t-il plusieurs tablespaces au lieu d’un seul gros ? Donne trois raisons du cours.
- Quotas : limiter l’espace de chaque utilisateur par tablespace.
- Disponibilité : mettre une partie des données hors ligne ou en lecture seule sans toucher au reste.
- Performance : répartir les fichiers de données sur plusieurs disques.
Cas pratique
Choisis et justifie avec les critères du cours.
Une application de reporting n’écrit jamais dans les données historiques de 2023, mais un script a déjà modifié une ligne par erreur. Que fais-tu, et quelle condition faut-il remplir d’abord ?
Placer les tables historiques dans un tablespace dédié, puis
ALTER TABLESPACE HIST2023 READ ONLY;. Les lectures continuent, toute modification est refusée.Condition : les données 2023 doivent être seules dans ce tablespace, sinon le
READ ONLYbloque aussi les tables vivantes.Les insertions échouent avec « unable to extend » sur
TBL01. Donne deux corrections possibles, en SQL.-- 1. agrandir le fichier existant ALTER DATABASE DATAFILE '<chemin>.dbf' RESIZE 50M; -- 2. ajouter un fichier ALTER TABLESPACE TBL01 ADD DATAFILE '<chemin2>.dbf' SIZE 30M AUTOEXTEND ON NEXT 5M MAXSIZE 100M;Diagnostic avant :
DBA_FREE_SPACEetDBA_DATA_FILES(taille,AUTOEXTEND,MAXSIZEatteint ?).
Trouve l'erreur
Chaque affirmation contient au moins une faute.
« Pour agrandir le fichier de TBL01 :
ALTER TABLESPACE TBL01 DATAFILE 'fd03.dbf' RESIZE 50M;»Redimensionner un fichier existant passe par
ALTER DATABASE DATAFILE '...' RESIZE 50M;.ALTER TABLESPACEsert à ajouter un fichier (ADD DATAFILE), à changer le mode ou la disponibilité.« Pour la maintenance, je passe tous les tablespaces OFFLINE, y compris SYSTEM. »
SYSTEM ne peut jamais être désactivé : il contient le dictionnaire, la base ne peut pas fonctionner sans.
« Un fichier de données peut être partagé par deux tablespaces pour économiser de l’espace. »
Un fichier de données n’appartient qu’à un seul tablespace (et une seule base). C’est l’inverse : un tablespace peut avoir plusieurs fichiers.
Et si...
Prévois la conséquence.
Et si un fichier a
AUTOEXTEND ON NEXT 2M MAXSIZE 20Met que la table a besoin de 25 Mo ?Le fichier grandit de 2 Mo en 2 Mo jusqu’à 20 Mo, puis s’arrête : les insertions suivantes échouent faute d’espace.
MAXSIZEest un plafond. Il faut agrandir la limite, redimensionner, ou ajouter un fichier.Et si on supprime un tablespace avec
INCLUDING CONTENTSmais sansAND DATAFILES?Le tablespace et ses objets disparaissent du dictionnaire, mais les fichiers
.dbfrestent sur le disque. Ils occupent de l’espace sans plus servir à rien, et il faut les supprimer à la main au niveau du système.