Crear BBDD Oracle de desarrollo de manera ágil y con mínimo consumo de recursos
15/09/2015 -
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).
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
[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:
1
2
3
|
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):
1
|
[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:
1
2
3
4
5
|
[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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
[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 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[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):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[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; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[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):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[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 ; |
1
2
3
4
5
6
7
8
9
10
|
[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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
[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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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:
1
2
3
4
5
6
7
8
9
10
11
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
|
[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):
1
2
3
4
5
6
7
8
9
10
11
12
|
[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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
[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.