En los ambientes de DW es muy común que las BD sean de gran tamaño, superior a los 10Tb, y en determinadas ocasiones hay que ordenar la estructura de FS, y como DBA tenemos la tarea de liberar todo un FS para ocupar uno nuevo.
Sabemos que un FS puede tener datafiles de varios tablespaces, de hecho, esto es deseable. Y también sabemos que la disponibilidad de la base implica que toda re-estructuración sea hecha en caliente.
A través de esta consulta, obtenemos una salida con el paso a paso necesario para liberar en este caso el FS data1 de la base BASE_A; y traspasarlo por completo al data2 de la misma base.

1. SQL: Sacamos de línea al tablespace involucrado.
2. Por cada datafile del mismo tablespace hacemos:

    a. SIST OPERATIVO: Verificamos si el datafile está siendo utilizado en el sistema operativo, si lo está, esperar que sea liberado o si podemos, matamos la sesión que lo está utilizando.

    b. SIST OPERATIVO: Verificamos si existe el mismo nombre de datafile en el nuevo destino. Este punto parace sin importancia, pero créanme! En bases con miles de datafiles, a menudo nos encontramos con nombres de dbf repetidos en distintos FS. Una vez que comprobamos que NO existe, continuamos con el siguiente paso. (Si existe, tendremos que renombrar el datafile a traspasar)
    c. SIST OPERATIVO: Movemos el archivo del data1 al data2.
    d. SQL: Renombramos el datafile para que la BD se entere de la nueva ubicación.

3. SQL: Ponemos en línea el tablespace.
Select ‘alter tablespace ‘ || Tablespace_Name || ‘ offline;’ A1_Sql_Tbs_Offline,
       ‘/etc/fuser ‘ || File_Name A2_Sop_Fuser,
       ‘ll ‘ || Replace(File_Name, ‘data1’, ‘data2’) A3_Sop_Existe,
       ‘mv ‘ || File_Name || ‘ ‘ || Replace(File_Name, ‘data1’, ‘data2’) A4_Sop_Mv_Dbf,
       ‘alter database rename file »’ || File_Name || »’ to »’ ||
       Replace(File_Name, ‘data1’, ‘data2′) || »’;’ A5_Sql_Rename_Dbf,
       ‘alter tablespace ‘ || Tablespace_Name || ‘ online;’ A6_Sql_Tbs_Online,
       File_Id,
       File_Name,
       Tablespace_Name,
       Bytes / 1024 / 1024 / 1024 Tamanio_Gb
  From Dba_Data_Files
 Where File_Name Like ‘%/BASE_A/data1%’
 Order By Tablespace_Name, File_Name

Licencia Creative Commons


Mover datafiles de un FS a otro por Gisela Velazco se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.