Inicio > Database > Upgrade Oracle Database a 12c mediante scripts y RMAN

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:

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.

[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).


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:

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.


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).


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:


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

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á:


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”

[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.

 

[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”:


[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:

[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:


[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.

  1. Aún no hay comentarios.
  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: