Para ver todos los datafiles de una base de datos:
SQL> desc dba_data_files
Name Null? Type
———————————– ——– ————————
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
ONLINE_STATUS VARCHAR2(7)
Seteamos la pantalla de SQLPLUS
SQL> col file_name format a60
SQL> set linesize 120
SQL> select file_name, file_id, relative_fno from dba_data_files;
FILE_NAME FILE_ID RELATIVE_FNO
—————————————— ———- ————
C:ORACLEPRODUCT10.2.0ORADATADB00PROSYSTEM01.DBF 1 1
C:ORACLEPRODUCT10.2.0ORADATADB00PROUNDOTBS01.DBF 2 2
C:ORACLEPRODUCT10.2.0ORADATADB00PROSYSAUX01.DBF 3 3
C:ORACLEPRODUCT10.2.0ORADATADB00PROUSERS01.DBF 4 4
C:ORACLEPRODUCT10.2.0ORADATADB00PROTSEJEMPLOS1 5 5
C:ORACLEPRODUCT10.2.0ORADATADB00PROPRUEBA1.DBF 6 6
C:ORACLEPRODUCT10.2.0ORADATADB00PROBIG.DBF 7 1024
C:ORACLEPRODUCT10.2.0ORADATADB00PRODF16K.DBF 8 8
8 rows selected.
Todos los datafile de tipo Big tendran como nro relativo 1024
——————————————————————
Saber el nro maximo de datafile que puede tener su base de datos
Parametro: DB_FILES
SQL> show parameter db_files
NAME TYPE VALUE
—————————— ———– ———————-
db_files integer 200
Para modificar este parametro debemos parar la instancia, modificarlo y volver a arrancar la instancia.
En el Control File tambien hay un parametro que es el MAX DataFILE que tambien influye en la cantidad de datafiles que puede tener la bd
Ubicar los datafiles
Tipos de Datafile
Datafile de Alta disponibilidad
Datafiles de Baja disponibilidad
Datafiles de Solo Lectura
Datafile del Sistema
Redo Log Files
Crear y Modificar Datafiles
Cuando creamos un tablespaces normal o temporal debemos especificar aunque sea un datafile, se puede crear mas de 1 datafile:
Create tablespace….
Create temporary tablespace….
Cuando deseamos añadir un datafile a un tablespaces regular y temporal usamos ésta sentencia:
Se usa cuando queremos ampliar el espacio de un tablespace y no podemos hacer crecer mas los datafiles existentes
Alter tablespace … add datafile…
Alter tablespace …. add tempfile…
Cuando creamos la base de datos, se crean los datafiles iniciales, sin el datafile del sistema no hay base de datos:
Create Database….
Con esta sentencia se suelen crear datafiles que ya existian pero se perdieron y no hay copias, se recrea el datafile pero está vacio:
Alter Database …. create datafile….
Para crear un datafile hay que ver varias cosas:
Parametro: DB_CREATE_FILE_DEST
Si este parametro está vacio, siempre que creemos un datafiles tendremos que colocar la ruta completa de destino.
Lo mejor es siempre especificar su ruta y nombre al datafile
Tema tamaño del datafile, es decir su capacidad de crecimiento
Cuando lo creamos usamos el parametro size que dirá cual es el tamaño incial de ese datafile y se reservará en el disco ese tamaño. Cuando se llene el datafile, debemos especificar si queremos que crezca él solo o que no admita mas cambios.
Esto se consigue con la clausula AUTEXTEND ON NEXT, cuando un datafile esté lleno y quiera agregar una extension mas, se extenderá tanto como le pusimos
en AUTEXTEND ON NEXT para que pueda ser agregada la extension al datafile.
Tambien tenemos el MAXSIZE que sirve para dar limite al tamaño del datafile, por mas que le demos que crezca solo siempre puede tener un limite,
podemos poner un valor y sino inlimited que indica que puede crecer hasta que le de espacio el disco, osea su limite será la capacidad de disco
AÑADIR UN DATAFILES A UN TABLESPACES EXISTENTE:
PRIMERO:
Para ver qué datafiles tenemos y en qué tablespaces están:
SQL> col tablespace_name format a20
SQL> select file_name, tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
——————————————————— ———
C:ORACLEPRODUCT10.2.0ORADATADB00PROSYSTEM01.DBF SYSTEM
C:ORACLEPRODUCT10.2.0ORADATADB00PROUNDOTBS01.DBF UNDOTBS1
C:ORACLEPRODUCT10.2.0ORADATADB00PROSYSAUX01.DBF SYSAUX
C:ORACLEPRODUCT10.2.0ORADATADB00PROUSERS01.DBF USERS
C:ORACLEPRODUCT10.2.0ORADATADB00PROTSEJEMPLOS1 TSEJEMPLOS
C:ORACLEPRODUCT10.2.0ORADATADB00PROPRUEBA1.DBF TBPRUEBA
C:ORACLEPRODUCT10.2.0ORADATADB00PROBIG.DBF TBBIG
C:ORACLEPRODUCT10.2.0ORADATADB00PRODF16K.DBF TB16KB
8 rows selected.
* Crear un datafile en el tablespace tbprueba
SQL> alter tablespace tbprueba
2 add datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’
3 size 5m
4 autoextend on next 1m
5 maxsize 100m;
—————————————————————–
* Una pregunta se plantea, como hacemos crecer manualmente un datafile?
SQL> alter database datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’ resize 10m;
Database altered.
——————————————————————
* Modificar la disponibilidad de los datafiles.
Todo va a depender si nuestra base de datos esta trabajando en Archive log o no.
Si esta en modo ArchiveLog, no habra drama se puede poner offline:
SQL> alter database datafile …………. offline / online
Si esta en modo NoArchivelog no se puede poner offline a menos que sea para eliminarlo, porque una vez puesto offline no se podra poner online:
SQL> alter database datafile …………. offline for drop
Ejemplo:
Como nuestra base esta en modo archivelog:
SQL> alter database datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’
2 offline;
Database altered.
SQL> alter database datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’
2 online;
alter database datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’
*
ERROR at line 1:
ORA-01113: file 9 needs media recovery
ORA-01110: data file 9: ‘C:ORACLEPRODUCT10.2.0ORADATADB00PROPRUEBA2.DBF’
Como no esta sincronizado el datafile con el resto de los datafile da error y pide que se haga recovery
Para sincronizar un datafile que se quedo offline se hace el recover.
SQL> recover datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’;
Media recovery complete.
Volvemos a poner el datafile online:
SQL> alter database datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’
2 online;
Database altered.
Para tareas admin es recomendable poner TODO el tablespace offline y no solo por datafiles
——————————————————————-
RENOMBRAR Y REUBICAR DATAFILES
PASOS:
1) PONER EL TABLESPACE OFFLINE
Si quiero mover un datafile, tengo que saber a que tablespace pertenece
Por ejemplo el datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’ pertenece al Tablespace tbprueba
SQL> alter tablespace tbprueba offline;
Tablespace altered.
2) RENOMBRAR O REUBICAR EL ARCHIVO EN EL S.O.
Por ej: muevo desde el explorador el archivo y lo coloco dentro de la carpeta OtroDisco
3) alter tablespace …. rename datafile …. to …..
SQl> alter tablespace tbprueba rename datafile ‘C:Oracleproduct10.2.0oradatadb00proprueba2.dbf’ to ‘C:Oracleproduct10.2.0oradatadb00proOtroDiscoprueba2.dbf’;
Tablespace altered.
Con esto informo al controlfile que este datafile esta en la sig ubicacion
4) Poner el tablespace online y hacer un backup de la base de datos
SQL> alter tablespace tbprueba online;
Tablespace altered.
NO OLVIDAR DE HACER UNA COPIA DEL CONTROLFILE!!!!!!!!!!!!!
————————————————————–
ELIMINAR DATAFILE
alter tablespace …. drop datafile —–> borra los archivos del SO
Alter tablespace ……… datafile …. drop including datafiles —–> sino coloco including no borra lo del SO
Requisitos para borrar:
El datafile tiene que estar abierto, tiene que estar online
Si no está vacío, no se puede borrar, si tiene extensiones no se puede borrar
No puede ser el unico datafile de un tablespace
No puede pertenecer a un tablespace en Read Only
no puede pertenecer al tablespace System ni Sysaux
Hasta aqui una breve reseña del manejo de Datafiles en Oracle, espero les sirva.
Manejando Datafiles en Oracle por Clarisa Maman Orfali se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.
Hola Clarisa.
Muchas gracias por tu aporte muy bueno..
Y Felicitaciones por la manera tan clara de explicarnos.
Gracias Juan por tu comentario, ya que cuando me escriben me motivan a seguir aportando mi granito de arena. Saludos.
Muy buen aporte!! me sirvio mucho y aclaro algunas dudas que tenia..gracias!!!
muy bien explicado! saludos desde cordoba
Cómo saber en que tablespace me encuentro actualmente? y que datafile estoy ocupando
gracias
miguel
Hola que tal?
Puedes verlo en la consulta siguiente:
SQL> Select default_tablespace, temporary_tablespace
From user_users;
Con respecto a que datafile estas ocupando, esto no puedes verlo ya que los datos se distribuyen uniformemente en todos los datafiles que componen un tablespace. Si tu pregunta apunta a saber los datafiles que componen tu tablespace actual, lo puedes ver en esta consulta:
SQL> Select file_name
From user_users, dba_data_files
Where default_tablespace = tablespace_name;
Espero haber respondido tus dudas!
Saludos.
Lo primero, gracias por una información muy útil.
Ahora me surge una pregunta relativa a los ficheros ".dbf" que existen por ejemplo en c.oracleoracledataorcl pero que no aparecen como resultado de la SQL:
"select * from dba_data_files"
De hecho corresponden a esquemas que se han borrado de base de datos.
¿Puedo borrarlos desde sistema operativo sin consecuencias para mi base de datos?
Gracias por adelantado.
Muchas gracias! Me ha sido muy útil
Excelente información, saludos
me podrias decir que sentencia puedo utilizar para mostrar todo el contenido de una tablaspace
muy bueno todo,muy bien explicado gracias
Excelente información, mejor explicado que en la Página de Oracle. Saludos desde Venezuela.
Excelente blog amigo, muy buen trabajo puntual y super entendible. Sigue adelante. Exitos.