Upgrade Oracle Database a 12c mediante scripts y RMAN

2225367En esta entrada mostraremos un ejemplo de migración de 11g a 12c mediante scripts manuales y RMAN, al mismo tiempo que pasamos de una BBDD con almacenamiento ASM a otra sobre sistema de ficheros.

La idea general del proceso es realizar un backup con RMAN en la BBDD 11gR2 origen y restaurarlo en una maquina nueva con los binarios de 12cR1 para, acto seguido, aplicar los scripts de upgrade. La BBDD destino usará sistema de ficheros para almacenar los datos mientras que la de origen usaba ASM; notar que este ejemplo valdría también para el caso contrario.

Los pasos a realizar son:

  • Lanzar el backup RMAN en origen con los binarios de 11g
  • Traspaso del backup a destino (mediante SCP, ftp o similares)
  • Realizar la restauración con los binarios de 12c
  • Ejecutar los scripts de upgrade

En el fondo realizamos un upgrade mediante scripts, por lo que aplican las mismas restricciones y es necesario realizar los mismos pasos previos indicados en la documentación de migración mediante scritps.

Empecemos con el backup en origen con una sentencia similar a esta:

1
2
3
4
5
6
7
8
9
10
11
RUN {
ALLOCATE CHANNEL d1 TYPE DISK;
BACKUP TAG 'COPIA_MIGRACION' AS COMPRESSED BACKUPSET DATABASE format '/home/oracle/backup/temporal/%U' ;
backup TAG 'COPIA_MIGRACION' archivelog all format '/home/oracle/backup/temporal/%U';
RELEASE CHANNEL d1;
}

Una vez realizado el backup lo podemos copiar a la maquina destino con las herramientas de que dispongamos.

La máquina destino tiene que ser de la misma plataforma que la origen (si bien podría ser una versión de sistema operativo diferente) porque, como ya hemos comentado, este procedimiento equivale a un upgrade manual mediante scripts.

Una vez disponemos de los ficheros de backup en la maquina destino lanzamos el “restore” de la BBDD con los binarios del nuevo gestor.

Creamos un “pfile” (podemos restaurar el del propio backup, o usar una copia manual realizada en origen), modificaremos los parámetros de este para que coincidan con la configuración del nuevo servidor (a nivel de directorios cambiando ASM por sistema de ficheros, memoria, parámetros de la nueva versión etc). Con este “pfile” arrancaremos la instancia en modo “nomount” y generaremos el “spfile” correspondiente.

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
[oracle@issesdb25160vp[dbemrep] tmp]$sqlplus /nolog
SQL*Plus: Release 12.1.0.2.0 Production on Tue Apr 7 17:11:29 2015
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup nomount pfile='/tmp/inittestdb.ora'
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size                 2926472 bytes
Variable Size             805308536 bytes
Database Buffers         1325400064 bytes
Redo Buffers              13848576 bytes
SQL> create spfile from pfile='/tmp/inittestdb.ora';
File created.
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning option

Llegados a este punto tenemos un fichero de configuración y una instancia de BBDD 12c en el nuevo servidor, empecemos a recuperar los ficheros que conforman la BBDD desde el backup, los primeros ficheros a restauran son los controlfiles.

En el log del backup podemos revisar en que “backupset” (en que fichero de los que forman el backup) están ubicados los ficheros de control, tomamos nota de ese fichero para indicarlo como origen de la restauración.

Durante la creación del fichero de inicialización hemos indicado unos nombres y ubicaciones para los ficheros de control (parámetro control_files), RMAN dejará en estas ubicaciones los ficheros de control restaurados (tantas copias como hayamos indicado en los parámetros).

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
rman target /
Recovery Manager: Release 12.1.0.2.0 - Production on Tue Apr 21 09:42:42 2015
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
connected to target database: TESTDB (not mounted)
RMAN> restore controlfile from '/temporal/08q4u5nr_1_1';
Starting restore at 21-APR-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=243 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oracle/app/oradata/testdb/control01.ctl
output file name=/oracle/app/fra/testdb/control02.ctl
Finished restore at 21-APR-15

En este punto ya disponemos de los ficheros de control en sus nuevas ubicaciones, ya podemos montar la BBDD, lo podemos hacer desde dentro de la misma sesión de RMAN:

1
2
3
4
5
6
7
RMAN> alter database mount;
Statement processed
released channel: ORA_DISK_1
RMAN>

Si todo ha funcionado como es de esperar la BBDD ya ha leído los controlfiles y sabe que ficheros la forman, pasemos a recuperar estos ficheros.

En primer lugar tendremos que “actualizar” la ubicación de los backups, el fichero de control que hemos restaurado no tiene registrados los backups de archivado que hayamos realizado con posterioridad a copiar el fichero de control en origen, o las ubicaciones de los mismos backups si hemos cambiado estos de sitio (en origen los realizamos en un directorio y en destino los hemos dejado en otro diferente). Con los comandos “crosscheck” y “catalog” vamos a validar y revisar las ubicaciones de los backups.

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
RMAN> crosscheck backupset device type disk;
Starting implicit crosscheck backup at 07-APR-15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=243 device type=DISK
Crosschecked 1 objects
Finished implicit crosscheck backup at 07-APR-15
Starting implicit crosscheck copy at 07-APR-15
using channel ORA_DISK_1
Finished implicit crosscheck copy at 07-APR-15
searching for all files in the recovery area
cataloging files...
no files cataloged
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=243 device type=DISK
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/home/oracle/backup/temporal/01q3q119_1_1 RECID=1 STAMP=876413993
Crosschecked 1 objects
RMAN> delete expired backupset device type disk;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=243 device type=DISK
List of Backup Pieces
BP Key BS Key Pc# Cp# Status     Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
1       1       1   1   EXPIRED     DISK       /home/oracle/backup/temporal/01q3q119_1_1
Do you really want to delete the above objects (enter YES or NO)? yes
deleted backup piece
backup piece handle=/home/oracle/backup/temporal/01q3q119_1_1 RECID=1 STAMP=876413993
Deleted 1 EXPIRED objects
Ya hemos eliminado del catalogo interno del control file los backups “no disponibles” ahora catalogaremos los actuales en sus nuevas ubicaciones.
RMAN> catalog start with '/oracle/app/temporal';
searching for all files that match the pattern /oracle/app/temporal
List of Files Unknown to the Database
=====================================
File Name: /oracle/app/temporal/03q3q26m_1_1
File Name: /oracle/app/temporal/01q3q119_1_1
File Name: /oracle/app/temporal/02q3q26b_1_1
Do you really want to catalog the above files (enter YES or NO)?yes
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /oracle/app/temporal/03q3q26m_1_1
File Name: /oracle/app/temporal/01q3q119_1_1
File Name: /oracle/app/temporal/02q3q26b_1_1

Ya tenemos el fichero de control al dia de las nuevas ubicaciones de los backups y no intentará buscarlos en las anteriores (lo que ocasionaría un error).

Lanzamos el restore de los ficheros, en el comando indicaremos para cada fichero su nueva ubicación, que en este caso ya no será ASM sino sistema de ficheros. Aprovechamos para renombrar incluso el fichero del tablespace temporal.

El comando “RESTORE” lanza la restauración física de los ficheros y finalmente el “SWITCH DATAFILE ALL” cambia en el controlfile las antiguas ubicaciones de los ficheros (de formato ASM) por las nuevas (que acabamos de indicar).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
run
{
allocate channel d1 device type disk;
set newname for datafile 1 to '/oracle/app/oradata/testdb/system01.dbf';
set newname for datafile 2 to '/oracle/app/oradata/testdb/sysaux01.dbf';
set newname for datafile 3 to '/oracle/app/oradata/testdb/undotbs01.dbf';
set newname for datafile 4 to '/oracle/app/oradata/testdb/users01.dbf';
set newname for datafile 5 to '/oracle/app/oradata/testdb/undotbs02.dbf';
set newname for tempfile 1 to '/oracle/app/oradata/testdb/temp01.dbf';
RESTORE DATABASE;
SWITCH DATAFILE ALL;
}

Llegados a este punto tenemos una instancia en memoria, unos ficheros de control y unos datafiles (estos dos últimos aun en formato 11g). Nos falta un paso más, ya que posiblemente estos ficheros no son consistentes (no están todos ellos en el mismo punto del tiempo).

Deberemos aplicar “redo archivado” a los ficheros para conseguir que todos estén en el mismo punto del tiempo, esto lo haremos mediante el comando RMAN:

1
2
3
4
5
6
7
8
9
10
11
run
{
allocate channel d1 device type disk;
SET UNTIL SEQUENCE 5101 thread 2;
RECOVER DATABASE;
}

El número de secuencia y thread deberá ser el que tenga el NEXT SCN más alto de los que tengamos en nuestros backups.

Podemos ver los archivados de que disponemos con el comando “list backup” de 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
RMAN> list backup;
List of Backup Sets
===================
BS Key Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
4       Full   4.02G     DISK       00:19:49     08-APR-15
BP Key: 6   Status: AVAILABLE Compressed: YES Tag: COPIA_MIGRACION
Piece Name: /oracle/app/temporal/04q3s1jm_1_1
List of Datafiles in backup set 4
File LV Type Ckp SCN   Ckp Time Name
---- -- ---- ---------- --------- ----
1       Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/system01.dbf
2       Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/sysaux01.dbf
3       Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/undotbs01.dbf
4       Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/users01.dbf
5       Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/undotbs02.dbf
6       Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/mgmt_ecm_depot_ts_01.dbf
7       Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/mgmt_tablespace_01.dbf
8       Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/mgmt_ad4j_ts_01.dbf
10     Full 2163985199 08-APR-15 /oracle/app/oradata/testdb/rman_01.dbf
BS Key Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
5       Full   1.09M     DISK       00:00:00     08-APR-15
BP Key: 5   Status: AVAILABLE Compressed: YES Tag: COPIA_MIGRACION
Piece Name: /oracle/app/temporal/05q3s2p2_1_1
SPFILE Included: Modification time: 16-MAR-15
SPFILE db_unique_name: testdb
Control File Included: Ckp SCN: 2164034642   Ckp time: 08-APR-15
BS Key Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
6       3.90G     DISK       00:00:00     08-APR-15
BP Key: 7   Status: AVAILABLE Compressed: NO Tag: COPIA_MIGRACION
Piece Name: /oracle/app/temporal/06q3s2pj_1_1
List of Archived Logs in backup set 6
Thrd Seq     Low SCN   Low Time Next SCN   Next Time
---- ------- ---------- --------- ---------- ---------
1   6484   2160951825 07-APR-15 2161921844 08-APR-15
1   6485   2161921844 08-APR-15 2162074965 08-APR-15
1   6486   2162074965 08-APR-15 2162478719 08-APR-15
1   6487   2162478719 08-APR-15 2162869876 08-APR-15
1   6488   2162869876 08-APR-15 2163365977 08-APR-15
1   6489   2163365977 08-APR-15 2163984691 08-APR-15
1   6490   2163984691 08-APR-15 2164034713 08-APR-15
1   6491   2164034713 08-APR-15 2164038325 08-APR-15
2   5090   2161590273 07-APR-15 2161921828 08-APR-15
2   5091   2161921828 08-APR-15 2162203429 08-APR-15
2   5092   2162203429 08-APR-15 2162355744 08-APR-15
2   5093   2162355744 08-APR-15 2162478633 08-APR-15
2   5094   2162478633 08-APR-15 2162602016 08-APR-15
2   5095   2162602016 08-APR-15 2162745342 08-APR-15
2   5096   2162745342 08-APR-15 2163099138 08-APR-15
2   5097   2163099138 08-APR-15 2163391678 08-APR-15
2   5098   2163391678 08-APR-15 2163738196 08-APR-15
2   5099   2163738196 08-APR-15 2163984628 08-APR-15
2   5100   2163984628 08-APR-15 2164034709 08-APR-15
2   5101   2164034709 08-APR-15 2164038346 08-APR-15

Ya tenemos los ficheros en un mismo punto del tiempo, ya podemos abrir la BBDD.

Llegados a este punto unas últimas consideraciónes, al no poder pasar los “redo logs online” tendremos que abrir nuestra nueva BBDD mediante “RESETLOGS”, además queremos realizar el upgrade lo que implica abrir con el parámetro “UPGRADE”, finalmente pues el comando a ejecutar será:

1
2
3
SQL> alter database open resetlogs upgrade;
Database altered.

Ya tenemos la BBDD abierta y en modo restringido preparada para lanzar los scripts de upgrade, cosa que haremos acto seguido.

En esta versión los scripts de upgrade han cambiado bastante, se lanzan mediante un comando “perl”

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
[oracle@testserver[testdb] ~]$cd $ORACLE_HOME/rdbms/admin
[oracle@testserver[testdb] admin]$$ORACLE_HOME/perl/bin/perl catctl.pl catupgrd.sql
Argument list for [catctl.pl]
SQL Process Count     n = 0
SQL PDB Process Count N = 0
Input Directory       d = 0
Phase Logging Table   t = 0
Log Dir               l = 0
Script               s = 0
Serial Run            S = 0
Upgrade Mode active   M = 0
Start Phase           p = 0
End Phase             P = 0
Log Id               i = 0
Run in               c = 0
Do not run in         C = 0
Echo OFF             e = 1
No Post Upgrade       x = 0
Reverse Order        r = 0
Open Mode Normal     o = 0
Debug catcon.pm       z = 0
Debug catctl.pl       Z = 0
Display Phases       y = 0
Child Process         I = 0
catctl.pl version: 12.1.0.2.0
Oracle Base           = /oracle/app/database
Analyzing file catupgrd.sql
Log files in /oracle/app/database/product/12.1.0/dbhome_1/rdbms/admin
catcon: ALL catcon-related output will be written to catupgrd_catcon_6732.lst
catcon: See catupgrd*.log files for output generated by scripts
catcon: See catupgrd_*.lst files for spool files, if any
Number of Cpus       = 4
SQL Process Count     = 0
New SQL Process Count = 4
------------------------------------------------------
Phases [0-73]         Start Time:[2015_04_08 11:56:12]
------------------------------------------------------
Serial   Phase #: 0 Files: 1     Time: 159s
Serial   Phase #: 1 Files: 5     Time: 40s
Restart Phase #: 2 Files: 1     Time: 0s
Parallel Phase #: 3 Files: 18   Time: 9s
Restart Phase #: 4 Files: 1     Time: 0s
Serial   Phase #:70 Files: 1     Time: 73s
Serial   Phase #:71 Files: 1     Time: 0s
Serial   Phase #:72 Files: 1     Time: 0s
Serial   Phase #:73 Files: 1 Use of uninitialized value $gsRTInclusion in concatenation (.) or string at catctl.pl line 1500.
Time: 19s
------------------------------------------------------
Phases [0-73]         End Time:[2015_04_08 12:37:29]
------------------------------------------------------
Grand Total Time: 2491s
LOG FILES: (catupgrd*.log)
Upgrade Summary Report Located in:
/oracle/app/database/product/12.1.0/dbhome_1/cfgtoollogs/testdb/upgrade/upg_summary.log
Grand Total Upgrade Time:   [0d:0h:41m:31s]

Este script ha dejado la BBDD parada, la arrancamos de nuevo, en este momento ya es una 12c.

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
[oracle@testserver[testdb] admin]$sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Wed Apr 8 12:42:34 2015
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size                 2926472 bytes
Variable Size             872417400 bytes
Database Buffers         1258291200 bytes
Redo Buffers               13848576 bytes
Database mounted.
Database opened.
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning option

Revisamos que se haya ejecutado el script “capuppst.sql”:

1
2
3
4
5
6
7
[oracle@testserver[testdb] admin]$grep "Rem BEGIN catuppst.sql" *.log
catupgrd0.log:12:35:57 SQL> Rem BEGIN catuppst.sql
[oracle@testserver[testdb] admin]$pwd
/oracle/app/database/product/12.1.0/dbhome_1/rdbms/admin

Recompilamos objetos y código en la BBDD:

1
2
3
4
5
[oracle@testserver[testdb] admin]$$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlrp -d '''.''' utlrp.sql
catcon: ALL catcon-related output will be written to utlrp_catcon_10320.lst
catcon: See utlrp*.log files for output generated by scripts
catcon: See utlrp_*.lst files for spool files, if any
catcon.pl: completed successfully

Y finalmente ejecutamos el script de post upgrade:

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
[oracle@testserver[testdb] dbhome_1]$sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Wed Apr 8 12:57:45 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 option
SQL> @rdbms/admin/utlu121s.sql
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
CATCTL REPORT = /oracle/app/database/product/12.1.0/dbhome_1/cfgtoollogs/testdb/upgrade/upg_summary.log
PL/SQL procedure successfully completed.
Function created.
Oracle Database 12.1 Post-Upgrade Status Tool           04-08-2015 12:57:47
Component                               Current         Version Elapsed Time
Name                                   Status         Number   HH:MM:SS
Oracle Server                             VALID     12.1.0.2.0 00:08:23
JServer JAVA Virtual Machine             VALID     12.1.0.2.0 00:01:09
Oracle Real Application Clusters     OPTION OFF     12.1.0.2.0 00:00:01
Oracle Workspace Manager                 VALID     12.1.0.2.0 00:00:39
OLAP Analytic Workspace             OPTION OFF     11.2.0.2.0 00:00:00
OLAP Catalog                        OPTION OFF     11.2.0.2.0 00:00:00
Oracle OLAP API                     OPTION OFF     11.2.0.2.0 00:00:00
Oracle XDK                               VALID     12.1.0.2.0 00:00:25
Oracle Text                               VALID     12.1.0.2.0 00:00:43
Oracle XML Database                       VALID     12.1.0.2.0 00:03:52
Oracle Database Java Packages             VALID     12.1.0.2.0 00:00:07
Oracle Multimedia                         VALID     12.1.0.2.0 00:01:19
Spatial                                  VALID     12.1.0.2.0 00:06:55
Oracle Application Express               VALID     4.2.5.00.08 00:13:10
Final Actions                                                   00:01:25
Post Upgrade                                                    00:00:58
Post Compile                                                     00:07:13
Total Upgrade Time: 00:48:19
PL/SQL procedure successfully completed.
Function dropped.
SQL>
SQL> --
SQL> -- Update Summary Table with con_name and endtime.
SQL> --
SQL> UPDATE sys.registry$upg_summary SET reportname = :ReportName,
2                                 con_name = SYS_CONTEXT('USERENV','CON_NAME'),
3                                 endtime = SYSDATE
4         WHERE con_id = -1;
1 row updated.
SQL> commit;
Commit complete.

Ya disponemos de nuestra BBDD en el nuevo servidor, sobre sistema de ficheros y en versión 12c.
Para acabar un par de anotaciones:

  • Si el tiempo de parada de que disponemos es poco, podemos disminuir el tiempo necesario de la siguiente manera:

Dejamos a los usuarios trabajar durante el backup, traspaso y restauración de los datos en destino, una vez hecho esto realizaremos (uno o varios) backups incrementales y los iremos traspasando y aplicando en destino, de manera que los ficheros de la BBDD destino irán avanzando en el tiempo siguiendo los de la origen.

Finalmente desconectaremos a los usuarios y lanzaremos el último backup incremental que al igual que el resto traspasaremos y aplicaremos en destino. El tiempo de lanzar traspasar y aplicar este último backup incremental será mucho menor que el traspaso inicial de la BBDD completa.

  • Y recordaros otros puntos a revisar (sin que sea una lista exhaustiva):

Deberemos crear los correspondientes scripts de inicio para que la BBDD y el listener arranque con la maquina si lo creemos necesario.

Deberemos crear un fichero de passwords para poder conectar remotamente como SYSDBA si lo creemos necesario

Y deberemos configurar backups, purgado de logs, revisar las configuraciones de auditoria, etc.

Evolución, innovación y transformación
37 especializaciones avaladas por Oracle
Oportunidades ilimitadas
El equipo marca la diferencia
Posts 100% Oracle
Sigue nuestro día a día