Example create tablespace

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Exemple DDL Oracle
Contexte Création de tablespaces (permanents, temporaires, gérés localement ou par dictionnaire)
Voir aussi Example create table · Example create temporary tables

Panorama des différentes syntaxes de création de tablespace apparues au fil des versions Oracle, du plus ancien (géré par dictionnaire, toutes versions) au plus récent (fichiers gérés par Oracle, 9i et ultérieur). Un tablespace regroupe les fichiers physiques (datafiles) dans lesquels sont stockés les segments (tables, index…) d'un ou plusieurs schémas.

Gestion des extents : LOCAL vs dictionnaire

  • EXTENT MANAGEMENT LOCAL (Oracle8i+, recommandé depuis) : les extents sont
 suivis via une bitmap dans l'en-tête de chaque datafile, sans passer par les tables du
 dictionnaire de données — meilleures performances, moins de contention.
    • AUTOALLOCATE (par défaut) : Oracle choisit lui-même la taille des extents,
  adapté à un tablespace contenant des objets de tailles très variées.
    • UNIFORM SIZE n : tous les extents ont une taille fixe (1 Mo par défaut si non
  précisé) — utile quand la volumétrie des objets est prévisible et qu'on veut un contrôle
  fin de l'espace utilisé.
  • Dictionnaire (toutes versions, syntaxe historique) : les extents sont suivis dans les
 tables du dictionnaire (SYS.UET$/FET$), plus lent et sujet à la
 fragmentation — à éviter sur toute version récente.

SEGMENT SPACE MANAGEMENT AUTO

Depuis Oracle9i, l'espace libre à l'intérieur de chaque bloc peut être géré automatiquement via une bitmap (AUTO) plutôt que par les listes libres classiques (MANUAL, freelists) — simplifie l'administration et réduit la contention en environnement fortement concurrent.

Script

-- (Oracle9i+) Oracle Managed Files (OMF) : Oracle choisit lui-même l'emplacement/nom du
-- datafile (nécessite DB_CREATE_FILE_DEST défini au niveau instance)
CREATE TABLESPACE users
  LOGGING DATAFILE SIZE 500M REUSE
  AUTOEXTEND ON NEXT 1M MAXSIZE 500M
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO
/

-- (Oracle9i+) Même configuration, avec datafile explicite plutôt qu'OMF
CREATE TABLESPACE users
  LOGGING DATAFILE '/u10/app/oradata/ORCL/users01.dbf' SIZE 500M REUSE
  AUTOEXTEND ON NEXT 1M MAXSIZE 500M
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO
/

-- (Oracle9i+) Tablespace temporaire : syntaxe dédiée TEMPORARY TABLESPACE / TEMPFILE.
-- Alternative : le déclarer directement lors de la création de la base via la clause
-- "DEFAULT TEMPORARY TABLESPACE ... TEMPFILE ..." du CREATE DATABASE.
CREATE TEMPORARY TABLESPACE temp
  TEMPFILE '/u07/app/oradata/ORCL/temp01.dbf' SIZE 500M REUSE
  AUTOEXTEND ON NEXT 500M MAXSIZE UNLIMITED
  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
/

-- (Oracle8i+) Géré localement, AUTOALLOCATE : adapté à des objets de tailles variées
CREATE TABLESPACE users
  LOGGING DATAFILE '/u10/app/oradata/ORCL/users01.dbf' SIZE 100M REUSE
  AUTOEXTEND ON NEXT 100M MAXSIZE 500M
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
/

-- (Oracle8i+) Géré localement, UNIFORM SIZE : contrôle exact de la taille des extents
CREATE TABLESPACE users
  LOGGING DATAFILE '/u10/app/oradata/ORCL/users01.dbf' SIZE 10M REUSE
  AUTOEXTEND ON NEXT 1M MAXSIZE 500M
  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K
/

-- (Toutes versions) Géré par dictionnaire — syntaxe historique, à éviter sur les versions
-- récentes au profit de EXTENT MANAGEMENT LOCAL
CREATE TABLESPACE users
  DATAFILE '/u10/app/oradata/ORCL/users01.dbf' SIZE 10M
  DEFAULT STORAGE (INITIAL 64K NEXT 64K MAXEXTENTS 121 PCTINCREASE 0)
/

Les chemins de datafiles ci-dessus (/u10/app/oradata/ORCL/…) sont des exemples à adapter à la structure de stockage réelle du serveur cible.

Voir aussi