Upgrade Oracle Database a 12c mediante scripts y RMAN
12/06/2015 -
En 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.