martes, 26 de agosto de 2008

Manipular tablespaces en Oracle 10g Expression Edition

En el siguiente post, mostaré la manipulación básica de los tablespace en Oracle. Cabe mencionar que no sólo se basa para la versión 10g Expression Edition sino también para las demás versiones de Oracle.

En Oracle una base de datos está formada por varias unidades lógicas, las cuales son llamadas Tablespaces y éstos a su vez, están formados por uno o más datafiles, los cuales son los archivos donde se almacenará la información físicamente.

Para poder manipular un tablespace, primeramente nos conectaremos a la base de datos usando sqlplus con la cuenta del usuario SYSTEM.

javoaxian@darthmaul:~$ sqlplus SYSTEM

SQL*Plus: Release 10.2.0.1.0 - Production on Mar Ago 26 17:25:32 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Introduzca la contraseña:

Conectado a:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL>

Conectados a la base de datos, ejecutaremos el siguiente comando para crear nuestro tablespace.

SQL> CREATE TABLESPACE javoaxian DATAFILE 'javoaxian.dbf' size 100M;

Tablespace creado.

SQL>

Como se puede observar, se usará el comando CREATE TABLESPACE seguido del nombre del tablespace como le queramos modificar, posteriormente sigue la palabra DATAFILE donde se especifíca la ruta y el nombre del archivo que almacenará los datos físicamente con extensión ".dbf", y por último se especifíca el tamaño del tablespace con la palabra size y el número en megas o gigas que se desee.

Ahora, si lo que deseamos es incrementar el tamaño del tablespace que tenemos, bastará con hacer lo siguiente:

SQL> ALTER DATABASE DATAFILE 'javoaxian.dbf' RESIZE 50M;

Para borrar un tablespace haremos lo siguiente:

DROP TABLESPACE javoaxian;

Cabe mencionar que se borra el tablespace más no el datafile, por lo cual en el caso de Oracle XE, guarda por default los datafile en el directorio:
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/dbs.

Si deseamos dar de baja temporalmente el tablespace que queremos, la manera de hacerlo es la siguiente:

SQL> ALTER TABLESPACE javoaxian OFFLINE;

Y en el caso de dar de alta, deberemos hacer esto:

SQL> ALTER TABLESPACE javoaxian ONLINE;

También podemos hacer que nuestro tablespace sea creado de lectura únicamente:

SQL> ALTER TABLESPACE javoaxian READ ONLY;

Y si lo quisieramos poner de lectura/escritura, realizaríamos lo siguiente:

SQL> ALTER TABLESPACE javoaxian READ WRITE;

Espero que estas breves instrucciones puedan servirles.

12 comentarios:

Anónimo dijo...

Cual es el límite de Tablespace en Oracle XE.

Puedo crear un tablespace para almacenar solo los indices de las tablas creadas en el Tablespace USERS.

javoaxian dijo...

Hasta donde sé no hay límite en cuanto al número de Tablespace que se puedan crear, lo que si, es que sólo puedes almacenar hasta 4GB de información.

Con respecto a tu segunda pregunta, nunca lo he hecho y no sé si lo puedas hacer.

Anónimo dijo...

Como puedo modificar el tamano de cada datafile de todos los tablspaces?

Gracias!!!

javoaxian dijo...

hola, la verdad es que no he hecho lo que preguntas, ya que es muy raro querer cambiar el tamaño de todos los datafile de todos los tablespace que se tienen, yo regularmente lo hago sobre un datafile en específico.

Ces dijo...

Sabes como crear el datafile en una ruta definida? me refiero a esto:

ces@debian:~$ sqlplus SYSTEM

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Oct 19 14:23:42 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Enter password:

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> CREATE TABLESPACE prueba DATAFILE 'datos.dbf' SIZE 50m;

Tablespace created.

SQL> CREATE TABLESPACE prueba2 DATAFILE '/home/ces/dat.dbf' SIZE 50M;
CREATE TABLESPACE prueba2 DATAFILE '/home/ces/dat.dbf' SIZE 50M
*
ERROR at line 1:
ORA-01119: error in creating database file '/home/ces/dat.dbf'
ORA-27040: file create error, unable to create file
Linux Error: 13: Permission denied


SQL>


al crear el datafile como "datos.dbf" lo crea normalmente, pero al indicarle una ruta "/home/ces/dat.dbf" tira error que no tiene suficientes permisos.

Gracias

javoaxian dijo...

Hola ces disculpa por la demora en responder. El problema que tienes, efectivamente es de permisos, éste radica en que cuando creas un datafile se crea como usuario oracle por tal motivo, cuando no especificas una ruta, el datafile se crea sin problemas porque está dentro de un directorio donde el usuario oracle es el dueño.

Cuando tu le especificas la ruta /home/ces/dat.dbf, estas indicando que quieres que lo ponga en esa ruta pero el dueño de ese directorio es ces, y el usuario oracle no tiene permisos para escribir en ese directorio. Yo te recomendaría si quieres hacer ésto, es crear un directorio en tu HOME por ejemplo: /home/ces/datafiles y después darle permisos al directorio para que otros usuarios puedan escribir en él.

Por ejemplo:

$ mkdir /home/ces/datafiles
$ chmod 777 /home/ces/datafiles


Ahora si creas el datafile deberás poder escribir en ese directorio. El problema es que cualquier usuario puede ingresar al directorio /home/ces/datafiles y manipular los archivos. Otra solución es que agregaras a tu usuario ces al grupo de trabajo de oracle, así podrías dar los siguientes permisos al directorio:

Agregar al grupo oracle u oinstall o dba, según sea el caso:
$ adduser ces oracle
$ adduser ces oinstall
$ adduser ces dba

Permisos:
$ chmod 770 /home/ces/datafiles

Espero que esto te pueda ayudar.

Saludos!!!

Victor Hugo dijo...

No puedeo acceder a mi bbdd porque una falla eléctrica del servidor la ha bloqueado. Decidi crear una nueva bbdd intentando recuperar los datos del datafile pero no puedo leerlos. He intentado montar este archivo en un tablespace nuevo pero no he podido, ¿puedes ayudarme javo?

gracias

Mrjoui dijo...

Tengo un datafile de otra BD, es posible tomar ese datafile y reutilizarlo para obtener los datos almacenados en el?

javoaxian dijo...

Hola Victor Hugo, la verdad no se me ha presentado esa situación, deja averiguo si hay una manera de recuperar esa información.

Saludos!!!

javoaxian dijo...

Hola Mrjoui, nunca he hecho lo que comentas, no sabría decirte, pero estaré haciendo pruebas a ver si me resulta y te comento.

Saludos!!!

Averias dijo...

Hola JavoAxian,

Dispongo solo de un datafile de oracle fichero.dbf, podria recuperar los datos a partir de ese unico fichero en una Oracle 10g Express Edition?

Muchas gracias.

Un saludo.

Anónimo dijo...

Como se puede eliminar o borrar un datafile?

Gracias!!!!