Inicio > Database > Crear BBDD Oracle de desarrollo de manera ágil y con mínimo consumo de recursos

Crear BBDD Oracle de desarrollo de manera ágil y con mínimo consumo de recursos

El titulo de este post parece una panacea: imaginaros poder disponer de entornos de desarrollo “bajo demanda”, creándolos muy rápidamente y sin preocuparnos del espacio que ocupan (independientemente del tamaño de la BBDD origen)…

Existe la posibilidad de poder hacer algo parecido a esto si disponemos de un sistema de storage que nos permita replicar producción y realizar “snapshots” de esa replica o bien podemos aprovechar la funcionalidad de snapshot clone que nos proporciona Oracle Database desde la versión 11.2.

Las BBDD de tipo snapshot clone de Oracle prácticamente no ocupan espacio, ya que la BBDD clonada usa un backup de la BBDD origen para acceder a los datos (realmente no dispone de copia de los datos) y es cuando modificamos algún bloque que se realiza una copia con los nuevos datos modificados en los ficheros de la BBDD clonada (por lo que a medida que modifiquemos la BBDD clonada el espacio que ocupa irá creciendo).

BBDD clonadas usando Backup como origen de datos

El hecho de que los datos “base” de nuestro clon sean los de un backup nos permite desacoplar totalmente el entorno clonado del productivo (no interfiere uno con otro, pueden estar en servidores, cabinas e incluso CPD’s separados), y podemos crear tantos clones como queramos basados en el mismo backup (que habremos trasladado de producción al entorno de desarrollo o test). La copia debe ser de tipo “datafilecopy” y la podemos realizar en caliente mediante RMAN, en caliente manualmente con “begin/end backup” o en frío, y puede proceder de la BBDD origen o de una physical standby de ésta.

Notar que estos clones no están pensados para pruebas de rendimiento ya que el hecho de ir a buscar los bloques originales en el backup y los modificados en sus ficheros penaliza ese aspecto y por lo general los sistemas de storage de los entornos de desarrollo o test tampoco acostumbran a prestarse a este tipo de pruebas.

NOVEDAD: Indicar que a partir de la versión 12.1.0.2 se han relajado mucho los requisitos necesarios para poder usar esta funcionalidad, en esta versión podemos realizar clones sobre sistemas de ficheros locales. En versiones anteriores era necesario disponer de un sistema de ficheros NFS montado mediante el driver especifico de Oracle “dNFS” en el que crear la BBDD clon (notar que el backup no sufre esta restricción).

A continuación realizaremos una pequeña demostración de esta funcionalidad. En primer lugar lanzamos un backup de nuestra BBDD “origen”, realizamos un backup online con RMAN:

[oracle@dbserver CLONEDB]$ export ORACLE_SID=orcl
[oracle@dbserver CLONEDB]$ rman target /

Recovery Manager: Release 12.1.0.2.0 - Production on Fri Aug 28 14:45:48 2015

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1416684500)

RMAN>   CONFIGURE CONTROLFILE AUTOBACKUP OFF;

using target database control file instead of recovery catalog
old RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
new RMAN configuration parameters are successfully stored

RMAN>   CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT  '/app/backup/%U';

old RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/app/backup/%U';
new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/app/backup/%U';
new RMAN configuration parameters are successfully stored

RMAN>   BACKUP AS COPY DATABASE ;

Starting backup at 28-AUG-15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=23 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/oradata/orcl/system01.dbf
output file name=/app/backup/data_D-ORCL_I-1416684500_TS-SYSTEM_FNO-1_09qfo5tu tag=TAG20150828T144621 RECID=6 STAMP=888936389
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/oradata/orcl/sysaux01.dbf
output file name=/app/backup/data_D-ORCL_I-1416684500_TS-SYSAUX_FNO-2_0aqfo5ud tag=TAG20150828T144621 RECID=7 STAMP=888936406
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/oradata/orcl/undotbs101.dbf
output file name=/app/backup/data_D-ORCL_I-1416684500_TS-UNDOTBS1_FNO-3_0bqfo5us tag=TAG20150828T144621 RECID=8 STAMP=888936420
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
copying current control file
output file name=/app/backup/cf_D-ORCL_id-1416684500_0cqfo5vc tag=TAG20150828T144621 RECID=9 STAMP=888936428
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/oradata/orcl/users01.dbf
output file name=/app/backup/data_D-ORCL_I-1416684500_TS-USERS_FNO-4_0dqfo5vd tag=TAG20150828T144621 RECID=10 STAMP=888936429
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 28-AUG-15
channel ORA_DISK_1: finished piece 1 at 28-AUG-15
piece handle=/app/backup/0eqfo5ve_1_1 tag=TAG20150828T144621 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 28-AUG-15

RMAN>   exit


Recovery Manager complete.


Otro componente necesario es una copia del SPFILE de la BBDD origen en formato PFILE (formato texto), lo generamos con este comando:


SQL>   create pfile='/tmp/initorlc.ora' from spfile;

File created.

Ya tenemos la copia de la BBDD y el PFILE, en este punto ya los podriamos trasladar al entorno de desarrollo

Para nuestra demostración y por simplicidad crearemos el clon en el mismo servidor, de manera que creamos un directorio para la BBDD clonada (en un sistema de ficheros local de tipo ext4):


[oracle@dbserver ~]$ mkdir -p /app/oradata/CLONEDB2

Llegados a este punto tenemos que definir unas variables de entorno (con los datos de la BBDD a clonar) y llamar a un script PERL que nos generará el fichero de inicialización y los scripts necesarios para crear la BBDD clon:


[oracle@dbserver ~]$export MASTER_COPY_DIR=/app/backup
[oracle@dbserver ~]$export CLONE_FILE_CREATE_DEST=/app/oradata/CLONEDB2
[oracle@dbserver ~]$export CLONEDB_NAME=CLONEDB2

[oracle@dbserver ~]$ perl /app/oracle/product/12.1.0/dbhome_1/rdbms/install/clonedb.pl /tmp/initorlc.ora /tmp/clone1b.sql /tmp/clone2b.sql

En primer lugar indicamos el directorio en que hemos dejado la copia de producción (MASTER_COPY_DIR), la carpeta en la que vamos a dejar los ficheros de nuestra BBDD clonada (CLONE_FILE_CREATE_DEST) y en tercer lugar el nombre de la BBDD clonada (CLONEDB_NAME).

Al script PERL, que ya viene con los binarios de la 12.1.0.2, le pasamos la ubicación del fichero pfile de producción y opcionalmente el nombre que queremos dar a los dos scripts de generación de la BBDD clon. Como resultado, nos dejará en la carpeta destino de la BBDD clon el fichero de inicialización modificado así como los dos citados scripts de creación en las ubicaciones que le hayamos indicado.

Deberemos “repasar” tanto el fichero de inicialización como los dos scripts, para asegurar que fucionan correctamente. A continuación os muestro la versión original y la modificada de todos ellos:

Fichero de inicialización:


[oracle@dbserver CLONEDB2]$ cat /oradata/CLONEDB2/initCLONEDB2.ora
orcl.__data_transfer_cache_size=0
orcl.__db_cache_size=578813952
orcl.__java_pool_size=4194304
orcl.__large_pool_size=8388608
orcl.__oracle_base='/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=276824064
orcl.__sga_target=822083584
orcl.__shared_io_pool_size=33554432
orcl.__shared_pool_size=188743680
orcl.__streams_pool_size=0
*.audit_file_dest='/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='12.1.0.2.0'
control_files=/oradata/CLONEDB2/CLONEDB2_ctl.dbf
*.db_block_size=8192
*.db_domain=''
db_name=CLONEDB2
*.db_recovery_file_dest='/app/fast_recovery_area'
*.db_recovery_file_dest_size=2048m

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.local_listener='LISTENER_ORCL'
*.open_cursors=300
*.pga_aggregate_target=261m
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=783m
*.undo_tablespace='UNDOTBS1'
db_create_file_dest=/app/oradata/CLONEDB2/
log_archive_dest=/app/oradata/CLONEDB2/
clonedb=TRUE


[oracle@dbserver CLONEDB2]$ cat /app/oradata/CLONEDB2/initCLONEDB2.ora
*.audit_file_dest='/app/oracle/admin/CLONEDB2/adump'
*.audit_trail='db'
*.compatible='12.1.0.2.0'
control_files=/app/oradata/CLONEDB2/CLONEDB2_ctl.dbf
*.db_block_size=8192
*.db_domain=''
db_name=CLONEDB2
*.db_recovery_file_dest='/app/fast_recovery_area'
*.db_recovery_file_dest_size=2048m
*.open_cursors=300
*.pga_aggregate_target=261m
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=783m
*.undo_tablespace='UNDOTBS1'
db_create_file_dest=/app/oradata/CLONEDB2/
log_archive_dest=/app/oradata/CLONEDB2/
clonedb=TRUE


Hemos realizado “limpieza” de parametros no necesarios, sustituido el SID de la BBDD origen (que seguia presente en algunos puntos) y eliminado los parametros que empiezan por “_”.

En el script de creación de la BBDD deberemos eliminar toda referencia a ficheros de no sean realmente de datos, ya que el script perl intenta añadir a la BBDD todos los ficheros que encuentra en la carpeta donde tenemos el backup (por lo que en esa carpeta deberiamos tener solo el backup, nada mas):


[oracle@dbserver CLONEDB2]$ cat /tmp/clone1b.sql

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100

STARTUP NOMOUNT PFILE=/app/oradata/CLONEDB2/initCLONEDB2.ora
CREATE CONTROLFILE REUSE SET DATABASE CLONEDB2 RESETLOGS
 MAXLOGFILES 32
 MAXLOGMEMBERS 2
 MAXINSTANCES 1
 MAXLOGHISTORY 908
LOGFILE
 GROUP 1 '/app/oradata/CLONEDB2/CLONEDB2_log1.log' SIZE 100M BLOCKSIZE 512,
 GROUP 2 '/app/oradata/CLONEDB2/CLONEDB2_log2.log' SIZE 100M BLOCKSIZE 512
DATAFILE
'/app/backup/0eqfo5ve_1_1',
'/app/backup/cf_D-ORCL_id-1416684500_0cqfo5vc',
'/app/backup/data_D-ORCL_I-1416684500_TS-SYSAUX_FNO-2_0aqfo5ud',
'/app/backup/data_D-ORCL_I-1416684500_TS-SYSTEM_FNO-1_09qfo5tu',
'/app/backup/data_D-ORCL_I-1416684500_TS-UNDOTBS1_FNO-3_0bqfo5us',
'/app/backup/data_D-ORCL_I-1416684500_TS-USERS_FNO-4_0dqfo5vd'
CHARACTER SET WE8DEC;


[oracle@dbserver CLONEDB2]$ cat /tmp/clone1b.sql

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100

STARTUP NOMOUNT PFILE=/app/oradata/CLONEDB2/initCLONEDB2.ora
CREATE CONTROLFILE REUSE SET DATABASE CLONEDB2 RESETLOGS
 MAXLOGFILES 32
 MAXLOGMEMBERS 2
 MAXINSTANCES 1
 MAXLOGHISTORY 908
LOGFILE
 GROUP 1 '/app/oradata/CLONEDB2/CLONEDB2_log1.log' SIZE 100M BLOCKSIZE 512,
 GROUP 2 '/app/oradata/CLONEDB2/CLONEDB2_log2.log' SIZE 100M BLOCKSIZE 512
DATAFILE
'/app/backup/data_D-ORCL_I-1416684500_TS-SYSAUX_FNO-2_0aqfo5ud',
'/app/backup/data_D-ORCL_I-1416684500_TS-SYSTEM_FNO-1_09qfo5tu',
'/app/backup/data_D-ORCL_I-1416684500_TS-UNDOTBS1_FNO-3_0bqfo5us',
'/app/backup/data_D-ORCL_I-1416684500_TS-USERS_FNO-4_0dqfo5vd'
CHARACTER SET WE8DEC;


Finalmente para el segundo script tendremos que eliminar igualmente las referencias a ficheros que no sean de datos así como la parte final (de apertura de la BBDD y recreación de temporales):


[oracle@dbserver CLONEDB]$ cat /tmp/clone2b.sql
declare
begin
dbms_dnfs.clonedb_renamefile('/app/backup/0eqfo5ve_1_1' , '/app/oradata/CLONEDB//ora_data_CLONEDB0.dbf');
dbms_dnfs.clonedb_renamefile('/app/backup/cf_D-ORCL_id-1416684500_0cqfo5vc' , '/app/oradata/CLONEDB//ora_data_CLONEDB1.dbf');
dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-SYSAUX_FNO-2_0aqfo5ud' , '/app/oradata/CLONEDB//ora_data_CLONEDB2.dbf');
dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-SYSTEM_FNO-1_09qfo5tu' , '/app/oradata/CLONEDB//ora_data_CLONEDB3.dbf');
dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-UNDOTBS1_FNO-3_0bqfo5us' , '/app/oradata/CLONEDB//ora_data_CLONEDB4.dbf');
dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-USERS_FNO-4_0dqfo5vd' , '/app/oradata/CLONEDB//ora_data_CLONEDB5.dbf');
end;
/
show errors;
alter database open resetlogs;
drop tablespace TEMP;
create temporary tablespace TEMP;
[oracle@dbserver CLONEDB]$ cat /tmp/clone2b.sql
declare
begin
dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-SYSAUX_FNO-2_0aqfo5ud' , '/app/oradata/CLONEDB//ora_data_CLONEDB2.dbf');
dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-SYSTEM_FNO-1_09qfo5tu' , '/app/oradata/CLONEDB//ora_data_CLONEDB3.dbf');
dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-UNDOTBS1_FNO-3_0bqfo5us' , '/app/oradata/CLONEDB//ora_data_CLONEDB4.dbf');
dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-USERS_FNO-4_0dqfo5vd' , '/app/oradata/CLONEDB//ora_data_CLONEDB5.dbf');
end;
/
show errors;

El motivo de eliminar la parte de “open resetlogs” es a causa de que la copia que tenemos no es consistente (no todos los ficheros son del mismo punto en el tiempo) ya que es una copia en caliente (con la BBDD origen trabajando).

Para solucionar esto podemos o bien “aplicar” redo a la copia mediante un pequeño backup incremental posterior (con lo que quedaría consistente y ya la podríamos usar) o podemos aplicar el redo de producción directamente a la BBDD clonada.

En nuestro caso usaremos esta ultima aproximación, aplicaremos el fichero de redo archivado productivo generado durante el momento que hemos realizado la copia. Si pensáramos crear múltiples clones la mejor sería la primera, evitando tener que hacer recover en cada una de ellas.

Otra opción seria poner la BBDD origen en modo “begin backup” antes de la copia con RMAN o hacer la copia offline, pero eso no siempre es posible y menos con BBDD muy grandes.

Así pues lanzamos los scripts:


[oracle@dbserver CLONEDB]$ export ORACLE_SID=CLONEDB
[oracle@dbserver CLONEDB]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Fri Aug 28 14:53:13 2015

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

Connected to an idle instance.

SQL>  @/tmp/clone1.sql
SQL>  SET FEEDBACK 1
SQL>  SET NUMWIDTH 10
SQL>  SET LINESIZE 80
SQL>  SET TRIMSPOOL ON
SQL>  SET TAB OFF
SQL>  SET PAGESIZE 100
SQL> 
SQL>  STARTUP NOMOUNT PFILE=/oradata/CLONEDB/initCLONEDB.ora
ORACLE instance started.

Total System Global Area  822083584 bytes
Fixed Size                  2929744 bytes
Variable Size             318770096 bytes
Database Buffers          494927872 bytes
Redo Buffers                5455872 bytes
SQL>  CREATE CONTROLFILE REUSE SET DATABASE CLONEDB RESETLOGS
  2      MAXLOGFILES 32
  3      MAXLOGMEMBERS 2
  4      MAXINSTANCES 1
  5      MAXLOGHISTORY 908
  6  LOGFILE
  7    GROUP 1 '/oradata/CLONEDB/CLONEDB_log1.log' SIZE 100M BLOCKSIZE 512,
  8    GROUP 2 '/oradata/CLONEDB/CLONEDB_log2.log' SIZE 100M BLOCKSIZE 512
  9  DATAFILE
 10  '/app/backup/data_D-ORCL_I-1416684500_TS-SYSAUX_FNO-2_0aqfo5ud',
 11  '/app/backup/data_D-ORCL_I-1416684500_TS-SYSTEM_FNO-1_09qfo5tu',
 12  '/app/backup/data_D-ORCL_I-1416684500_TS-UNDOTBS1_FNO-3_0bqfo5us',
 13  '/app/backup/data_D-ORCL_I-1416684500_TS-USERS_FNO-4_0dqfo5vd'
 14  CHARACTER SET WE8DEC;

Control file created.

SQL>  @/tmp/clone2.sql
SQL>  declare
  2  begin
  3  dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-SYSAUX_FNO-2_0aqfo5ud' , '/oradata/CLONEDB//ora_data_CLONEDB2.dbf');
  4  dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-SYSTEM_FNO-1_09qfo5tu' , '/oradata/CLONEDB//ora_data_CLONEDB3.dbf');
  5  dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-UNDOTBS1_FNO-3_0bqfo5us' , '/oradata/CLONEDB//ora_data_CLONEDB4.dbf');
  6  dbms_dnfs.clonedb_renamefile('/app/backup/data_D-ORCL_I-1416684500_TS-USERS_FNO-4_0dqfo5vd' , '/oradata/CLONEDB//ora_data_CLONEDB5.dbf');
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL>  show errors;
No errors.

La ejecución de estos scripts ha sido prácticamente “instantánea”. Ahora aplicamos el redo a los ficheros de la BBDD clonada (y por tanto la dejamos en estado consistente) y abrimos con resetlogs:


SQL>  recover database until cancel
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done


SQL>  recover database until cancel using backup controlfile;
ORA-00279: change 448940 generated at 08/28/2015 14:46:22 needed for thread 1
ORA-00289: suggestion :
/app/fast_recovery_area/CLONEDB/archivelog/2015_08_28/o1_mf_1_35_%u_.arc
ORA-00280: change 448940 for thread 1 is in sequence #35


Specify log: {<RET> =suggested | filename | AUTO | CANCEL}
/app/fast_recovery_area/ORCL/archivelog/2015_08_28/o1_mf_1_35_by1p90gz_.arc
ORA-00279: change 449868 generated at 08/28/2015 14:56:48 needed for thread 1
ORA-00289: suggestion :
/app/fast_recovery_area/CLONEDB/archivelog/2015_08_28/o1_mf_1_36_%u_.arc
ORA-00280: change 449868 for thread 1 is in sequence #36
ORA-00278: log file
'/app/fast_recovery_area/ORCL/archivelog/2015_08_28/o1_mf_1_35_by1p90gz_.arc'
no longer needed for this recovery


Specify log: {<RET> =suggested | filename | AUTO | CANCEL}
CANCEL
Media recovery cancelled.
SQL>  alter database open resetlogs;

Database altered.

Ya tenemos nuestra base de datos casi a punto, faltaría recrear el tablespace temporal y si queremos crear un spfile.

Vamos a realizar lo primero:


SYS @ CLONEDB2 > create temporary tablespace temporal tempfile '/app/oradata/CLONEDB2/temporal01.dbf' size 100M;

Tablespace created.

SYS @ CLONEDB2 > alter database default temporary tablespace temporal;

Database altered.

SYS @ CLONEDB2 > drop tablespace TEMP;

Tablespace dropped.

Bien, ¿realmente esta BBDD “no ocupa espacio”?

Aqui tenemos el espacio ocupado por los ficheros de la BBDD original:


[oracle@dbserver orcl]$ ls -lhs
total 1.9G
9.6M -rw-r-----+ 1 oracle oracle 9.6M Aug 28 17:04 control01.ctl
9.6M -rw-r-----+ 1 oracle oracle 9.6M Aug 28 17:04 control02.ctl
 51M -rw-r-----+ 1 oracle oracle  51M Aug 28 14:56 redo01.log
 51M -rw-r-----+ 1 oracle oracle  51M Aug 28 14:56 redo02.log
 51M -rw-r-----+ 1 oracle oracle  51M Aug 28 17:04 redo03.log
551M -rw-r-----+ 1 oracle oracle 551M Aug 28 17:01 sysaux01.dbf
701M -rw-r-----+ 1 oracle oracle 701M Aug 28 17:03 system01.dbf
1.7M -rw-r-----+ 1 oracle oracle  21M Aug 28 06:03 temp01.dbf
436M -rw-r-----+ 1 oracle oracle 436M Aug 28 17:03 undotbs101.dbf
5.1M -rw-r-----+ 1 oracle oracle 5.1M Aug 28 15:01 users01.dbf


Y éste es el espacio ocupado por los ficheros de la clonada (recordemos que ya hay algunos bloques modificados y que ocupan espacio, en concreto los que hemos alterado al hacer el recover para poder abrir la BBDD):


[oracle@dbserver CLONEDB2]$ ls -lhs
total 306M
4.0K drwxrwx--- 3 oracle oracle 4.0K Aug 28 15:44 CLONEDB2
8.9M -rw-rw---- 1 oracle oracle 8.9M Aug 28 17:22 CLONEDB2_ctl.dbf
101M -rw-rw---- 1 oracle oracle 101M Aug 28 17:21 CLONEDB2_log1.log
101M -rw-rw---- 1 oracle oracle 101M Aug 28 15:44 CLONEDB2_log2.log
4.0K -rw-rw-r-- 1 oracle oracle 584 Aug 28 15:38 initCLONEDB2.ora
5.0M -rw-rw---- 1 oracle oracle 551M Aug 28 17:14 ora_data_CLONEDB22.dbf
556K -rw-rw---- 1 oracle oracle 701M Aug 28 17:18 ora_data_CLONEDB23.dbf
6.0M -rw-rw---- 1 oracle oracle 436M Aug 28 17:17 ora_data_CLONEDB24.dbf
 16K -rw-rw---- 1 oracle oracle 5.1M Aug 28 15:51 ora_data_CLONEDB25.dbf
1.0M -rw-rw---- 1 oracle oracle 101M Aug 28 17:00 temporal01.dbf

En la primera columna tenemos el espacio ocupado “realmente” (el que aparece si hacemos un “du” del fichero), en la sexta el “tamaño teórico” (mucho mayor).

Veamos que pasa si “modificamos” más datos en la BBDD clonada:


[oracle@dbserver CLONEDB2]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Fri Aug 28 15:46:00 2015

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SYS @ CLONEDB2 >  create table test tablespace users as select * from dba_objects;

Table created.

SYS @ CLONEDB2 >  insert into test select * from test;

76358 rows created.

SYS @ CLONEDB2 >  insert into test select * from test;

152716 rows created.

SYS @ CLONEDB2 >  insert into test select * from test;

305432 rows created.

SYS @ CLONEDB2 >  commit
  2  ;

Commit complete.

SYS @ CLONEDB2 >  exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
[oracle@dbserver CLONEDB2]$ du -hs *
8.0K    CLONEDB2
8.9M    CLONEDB2_ctl.dbf
101M    CLONEDB2_log1.log
101M    CLONEDB2_log2.log
4.0K    initCLONEDB2.ora
548K    ora_data_CLONEDB22.dbf
244K    ora_data_CLONEDB23.dbf
492K    ora_data_CLONEDB24.dbf
85M     ora_data_CLONEDB25.dbf
1.0M    temporal01.dbf

Como podemos ver, el fichero correspondiente al tablespace de users de la BBDD clonada ha pasado de ocupar 16K a 85Mb al contener la información que hemos actualizado y que difiere de la existente en el backup.

  1. Xavier Solanellas
    septiembre 15, 2015 en 06:58

    Post muy interesante. Lo tendré que probar!!. Felicidades por la explicación.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: