Oracle DB separa l'emmagatzematge lògic, que és el que veuen els objectes de la base de dades,
de l'emmagatzematge físic, que són els fitxers del disc. Aquesta separació permet ampliar
o moure l'espai sense modificar les taules que hi ha guardades.
En aquests apunts es veu, en primer lloc, com es gestionen els tablespaces i, després,
com s'assignen a les bases de dades, als usuaris i als objectes.
Un tablespace és una unitat lògica d'emmagatzematge on es guarden els objectes de la base de dades.
Cada tablespace està format per un o més datafiles, que són els fitxers físics del disc
on s'escriuen realment les dades.
En crear un tablespace, s'indiquen els seus datafiles i els paràmetres d'emmagatzematge
per defecte, com la mida inicial i el creixement automàtic dels extents:
SQL Developer també proporciona informes sobre l'emmagatzematge de la base de dades,
disponibles al menú Informe > Administració de la base de dades > Emmagatzematge
(Figura 1).
Figura 1. Informes d'emmagatzematge en SQL Developer.
Un tablespace es pot eliminar amb DROP TABLESPACE. Les clàusules addicionals indiquen
que també s'eliminen els objectes que conté, els seus datafiles i les restriccions
que hi fan referència:
A partir de la versió 12c, Oracle DB utilitza una arquitectura multiinquilí. Una
base de dades contenidora (Container Database, CDB) pot allotjar diverses
bases de dades connectables (Pluggable Databases, PDB), cadascuna amb els seus propis usuaris,
esquemes i tablespaces. En l'edició XE, per exemple, la PDB per defecte és XEPDB1.
Cada PDB té un tablespace per defecte, que s'assigna als usuaris que es creen
sense indicar-ne cap. Com que en Oracle DB els objectes es guarden en el tablespace per defecte
del seu propietari, aquest és el tablespace on acaben els objectes creats sense la clàusula
TABLESPACE.
Aquesta ordre no mou cap objecte: només canvia on es creen els objectes nous. A més,
els usuaris que tenien assignat l'antic tablespace per defecte passen a tindre el nou.
El tablespace per defecte de la base de dades es pot consultar a la vista DATABASE_PROPERTIES:
També es pot assignar un tablespace per defecte a un usuari concret, en crear-lo
o posteriorment. En aquest cas, cal concedir-li també una quota en el tablespace,
ja que sense quota l'usuari no hi pot crear objectes:
Encara que cada usuari tinga un tablespace per defecte, cada taula o índex es pot guardar
en un tablespace diferent. Això permet, per exemple, posar els índexs en un disc més ràpid
que les dades.
Per crear una taula o un índex en un tablespace concret, s'utilitza la clàusula TABLESPACE.
L'usuari propietari ha de tindre quota en aquest tablespace:
Canvi de tablespace (ALTER TABLE ... MOVE i ALTER INDEX ... REBUILD)¶
Per moure una taula a un altre tablespace, s'utilitza ALTER TABLE ... MOVE TABLESPACE.
Els índexs, en canvi, no es mouen: es reconstrueixen en el nou tablespace amb
ALTER INDEX ... REBUILD TABLESPACE:
En moure una taula, els seus índexs queden en estat UNUSABLE i s'han de reconstruir.
Mentre un índex està inutilitzable, les consultes que el necessiten fallen o són molt més lentes.
Per això, després de moure una taula, cal comprovar l'estat dels seus índexs:
Des de la versió 12.2, la clàusula UPDATE INDEXES (ALTER TABLE productes MOVE TABLESPACE users UPDATE INDEXES;)
manté els índexs utilitzables durant el moviment.