viernes, 17 de abril de 2015

Oracle 12c : Upgrade a 12c de Base de datos - Parte II

En el artículo anterior realizamos el upgrade de la base de datos mediante el DBUA.  En este articulo continuaremos con el tema de Upgrade pero ahora realizaremos el upgrade Manual por línea de comandos.

Posteriormente realizaremos el PLUG-IN de la base de datos a un contenedor CDB.

Tareas Previas al Upgrade.

Las tareas previas para el upgrade es son las mismas explicadas en el artículo anterior.  Pueden acceder al artículo anterior desde aquí:


Upgrade Manual por Línea de comandos

El upgrade manual es un procedimiento de upgrade  muy popular entre los DBAs más experimentados ya que nos permite tener un control total de cada paso del upgrade.
Explicaremos paso a paso como realizar un upgrade manual a Oracle 12c.

Paso 1: Para poder entender mejor el proceso de upgrade voy a definir dos variables de entorno. El HOME de la versión 11g y la versión 12c.

Ambas variables me servirán de base para poder diferencias entre un motor y otro.

[oracle@upgrade12c ~]$
[oracle@upgrade12c ~]$ export ORACLE_HOME_11g=/u01/app/oracle/product/11.2.0/db_1

[oracle@upgrade12c ~]$ export ORACLE_HOME_12c=/u01/app/oracle/product/12.1.0/db_1


Paso 2: Copiamos los archivos de configuración desde el ORACLE_HOME_11g al ORACLE_HOME_12c. Los archivos que se copian están en los directorios:
  • ORACLE_HOME_11g/dbs
  • ORACLE_HOME_11g/network/admin

[oracle@upgrade12c dbs]$ cp $ORACLE_HOME_11g/dbs/* $ORACLE_HOME_12c/dbs/.
[oracle@upgrade12c dbs]$
[oracle@upgrade12c dbs]$ cp $ORACLE_HOME_11g/network/admin/* $ORACLE_HOME_12c/network/admin/.
[oracle@upgrade12c dbs]$

Paso 3:  Bajamos los servicios de base de datos.  Los servicios de Listener no son necesarios bajarlos debido a que son administrados por la Infraestructura Grid.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.


Para los usuarios Windows es necesario recrear el servicio con el nuevo ORACLE_HOME_12c

C:\> NET STOP OracleServiceORCL
C:\> ORADIM -DELETE -SID ORCL
C:\> ORADIM -NEW -SID ORCL -INTPWD PASSWORD  -STARTMODE AUTO -PFILE %ORACLE_HOME_12c%\DATABASE\INITORCL.ORA

Paso 4: Definimos todas las variables de entorno con los valores del HOME de Oracle 12c.

[oracle@upgrade12c ~]$ export ORACLE_BASE=/u01/app/oracle

[oracle@upgrade12c ~]$ export ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1

[oracle@upgrade12c ~]$ export PATH=$ORACLE_HOME/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oracle/bin

[oracle@upgrade12c ~]$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

[oracle@upgrade12c ~]$ export ORACLE_SID=orcl

Paso 5: Modificamos el archivo /etc/oratab con el nuevo HOME de Oracle 12c

[oracle@upgrade12c ~]$ cat /etc/oratab
#
+ASM:/u01/app/oracle/product/12.1.0/grid:N:        # line added by Agent
orcl:/u01/app/oracle/product/12.1.0/db_1:N:             

Paso 6: Iniciamos la base de datos en modo UPGRADE.

SQL*Plus: Release 12.1.0.1.0 Production on Fri Apr 17 11:30:29 2015

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

Connected to an idle instance.

SQL> startup UPGRADE
ORACLE instance started.

Total System Global Area 1014657024 bytes
Fixed Size                  2295944 bytes
Variable Size             364906360 bytes
Database Buffers          641728512 bytes
Redo Buffers                5726208 bytes
Database mounted.
Database opened.

Paso 7: (Nuevo en Oracle 12c) Ejecutamos el nuevo comando para upgrade catctl.pl.

El comando catctl.pl se encuentra en el directorio ORACLE_HOME_12c/rdbms/admin.  Es un archivo perl que permite ejecutar el upgrade de base de datos con opciones extras en comparación con el script original catupgrd.sql

El comando catctl.pl ejecuta como parte de sus tareas el script catupgrd.sql y también catuppst.sql. Es por eso que, para la versión Oracle 12c, ya no se debe ejecutar el script catupgrd.sql por si solo (se encuentra deprecado)
El comando catctl.pl posee diferentes opciones como paralelismo, definición del log, reinicio del upgrade donde se quedo anteriormente.  En el siguiente cuadro se muestra las opciones que posee el comando catctl.pl















Para este ejemplo realizamos el upgrade de base de datos con paralelismo 2 y definiremos el log en el directorio ORACLE_HOME_12c/diagnostic (creado previamente)

Como es un comando de Sistema Operativo podríamos correrlo en background con nohup o en una sesión VNC

[oracle@upgrade12c ~]$ mkdir $ORACLE_HOME_12c/diagnostic

[oracle@upgrade12c ~]$ cd $ORACLE_HOME_12c/rdbms/admin

[oracle@upgrade12c admin]$  $ORACLE_HOME_12c/perl/bin/perl catctl.pl -n 2 -l $ORACLE_HOME_12c/diagnostic catupgrd.sql

Analyzing file catupgrd.sql
Log files in /u01/app/oracle/product/12.1.0/db_1/diagnostic
14 scripts found in file catupgrd.sql
Next path: catalog.sql
32 scripts found in file catalog.sql
Next path: catproc.sql
37 scripts found in file catproc.sql
Next path: catptabs.sql
61 scripts found in file catptabs.sql
Next path: catpdbms.sql
205 scripts found in file catpdbms.sql
Next path: catpdeps.sql
77 scripts found in file catpdeps.sql
Next path: catpprvt.sql
260 scripts found in file catpprvt.sql
Next path: catpexec.sql
26 scripts found in file catpexec.sql
Next path: cmpupgrd.sql
16 scripts found in file cmpupgrd.sql
...

Como se observa en el log del upgrade se están utilizando dos procesos para poder realizar el upgrade. Según lo que definimos en el comando catctl.pl

También podemos ver que el upgrade ahora se divide en Fases, de esa manera es más sencillo saber el progreso del upgrade.

..
[Phase 55] type is 1 with 1 Files
catuppst.sql

[Phase 56] type is 1 with 1 Files
catshutdown.sql

Using 2 processes.
Serial   Phase #: 0 Files: 1

Paso 8: Mientras se ejecuta el upgrade podemos revisar los logs que se van generando en el directorio indicado en el comando catctl.pl: ORACLE_HOME_12c/diagnostic
Existe un log por cada proceso que ejecuta el upgrade. Para este ejemplo son 2 procesos.
[oracle@upgrade12c diagnostic]$ ls -lrt
total 368
-rw-r--r--. 1 oracle oinstall    132 Apr 17 11:45 catupgrd1.log
-rw-r--r--. 1 oracle oinstall 370964 Apr 17 11:49 catupgrd0.log

 
Monitoreamos la ejecución de los procesos que realizan el Upgrade 

[oracle@upgrade12c diagnostic]$ tail -f catupgrd0.log

SQL>
SQL> alter type lcr$_row_record add member function
  2     get_object_id return number cascade;

Type altered.

SQL>
SQL> alter type lcr$_row_record add member function
  2     get_root_name return varchar2 cascade;

Type altered.

SQL>
SQL> alter type lcr$_row_record add member procedure set_root_name(
  2          self in out nocopy lcr$_row_record,
  3          root_name       IN VARCHAR2) cascade;

Type altered.
 
Paso 9: Finalizado el Upgrade, levantamos la BD 
...
Serial   Phase #:54 Files: 1      Time: 408s
Serial   Phase #:55 Files: 1      Time: 254s
Serial   Phase #:56 Files: 1      Time: 49s
Grand Total Time: 7212s
[oracle@upgrade12c admin]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Fri Apr 17 14:43:10 2015

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

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1014657024 bytes
Fixed Size                  2295944 bytes
Variable Size             482346872 bytes
Database Buffers          524288000 bytes
Redo Buffers                5726208 bytes
Database mounted.
Database opened.
 
Paso 10: Verificamos que los componentes han sido actualizados correctamente mediante el script utlu121s.sql 
SQL> @?/rdbms/admin/utlu121s.sql
.
Oracle Database 12.1 Post-Upgrade Status Tool           04-17-2015 14:44:21
.
Component                               Current         Version  Elapsed Time
Name                                    Status          Number   HH:MM:SS
.
Oracle Server
.                                      UPGRADED      12.1.0.1.0  00:34:40
JServer JAVA Virtual Machine
.                                         VALID      12.1.0.1.0  00:06:45
Oracle Workspace Manager
.                                         VALID      12.1.0.1.0  00:01:50
OLAP Analytic Workspace
.                                         VALID      12.1.0.1.0  00:02:40
Oracle OLAP API
.                                         VALID      12.1.0.1.0  00:00:35
Oracle XDK
.                                         VALID      12.1.0.1.0  00:01:29
Oracle Text
.                                         VALID      12.1.0.1.0  00:01:36
Oracle XML Database
.                                         VALID      12.1.0.1.0  00:07:27
Oracle Database Java Packages
.                                         VALID      12.1.0.1.0  00:00:32
Oracle Multimedia
.                                         VALID      12.1.0.1.0  00:04:09
Spatial
.                                         VALID      12.1.0.1.0  00:10:39
Oracle Application Express
.                                         VALID     4.2.0.00.27  00:35:02
Final Actions
.                                                                00:05:20
Total Upgrade Time: 01:53:29
 
Paso 11: Compilamos todos los objetos de la base de datos y validamos los paquetes mediante los scripts utlrp.sql y utluiobj.sql 
SQL> @?/rdbms/admin/utlrp.sql

TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN  2015-04-17 14:44:48

DOC>   The following PL/SQL block invokes UTL_RECOMP to recompile invalid
DOC>   objects in the database. Recompilation time is proportional to the
DOC>   number of invalid objects in the database, so this command may take
DOC>   a long time to execute on a database with a large number of invalid
...

...Database user "SYS", database schema "APEX_040200", user# "116" 14:58:47
...Compiled 0 out of 2998 objects considered, 0 failed compilation 14:58:48
...263 packages
...255 package bodies
...453 tables
...11 functions
...16 procedures
...3 sequences
...458 triggers
...1322 indexes
...207 views
...0 libraries
...6 types
...0 type bodies
...0 operators
...0 index types
...Begin key object existence check 14:58:48
...Completed key object existence check 14:58:48
...Setting DBMS Registry 14:58:48
...Setting DBMS Registry Complete 14:58:49
...Exiting validate 14:58:49


SQL> @?/rdbms/admin/utluiobj.sql
.
Oracle Database 12.1 Post-Upgrade Invalid Objects Tool 04-17-2015 14:59:29
.
This tool lists post-upgrade invalid objects that were not invalid
prior to upgrade (it ignores pre-existing pre-upgrade invalid objects).
.
Owner                     Object Name                     Object Type
.

PL/SQL procedure successfully completed.

Paso 12: Ejecutamos el script post upgrade generado por la herramienta Pre-Upgrade Information.

SQL> @/u01/app/oracle/cfgtoollogs/orcl/preupgrade/postupgrade_fixups.sql
Post Upgrade Fixup Script Generated on 2015-04-16 04:09:38  Version: 12.1.0.1 Build: 006
Beginning Post-Upgrade Fixups...

PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


**********************************************************************
Check Tag:     OLD_TIME_ZONES_EXIST
Check Summary: Check for use of older timezone data file
Fix Summary:   Update the timezone using the DBMS_DST package after upgrade is complete.
**********************************************************************
Fixup Returned Information:
INFORMATION: --> Older Timezone in use

     Database is using a time zone file older than version 18.
     After the upgrade, it is recommended that DBMS_DST package
     be used to upgrade the 12.1.0.1.0 database time zone version
     to the latest version which comes with the new release.
     Please refer to My Oracle Support note number 977512.1 for details.
**********************************************************************


PL/SQL procedure successfully completed.


Paso 13: Realizar las pruebas funcionales para poder asegurar que la base de datos y las aplicaciones no tengan ningún problema.
 
Paso 14: Después de validar que la base de datos funciona correctamente podemos modificar el parámetro compatible a 12.1.0


SQL> ALTER SYSTEM SET compatible = '12.1.0' SCOPE=spfile;

System altered.


Finalizamos el Upgrade de manera manual con las validaciones de las aplicaciones.  Ahora procederemos a realizar el PLUG-IN de la base de datos a un CDB.



PLUG-IN de la base de datos

Con la base de datos ya actualizada a Oracle 12c podemos realizar el PLUG-IN a un contenedor.

Paso 1: Crear una base de datos solo contenedor.  Los pasos para crear la base de datos contenedor se encuentra en mi articulo 

Paso 2:  Colocamos la base de datos en Read Only y generamos el archivo XML con la metadata de la base de datos.

SQL> alter database open READ ONLY;

Database altered.

SQL> exec DBMS_PDB.DESCRIBE('/home/oracle/ORCL.xml');

PL/SQL procedure successfully completed.

Paso 3: Bajamos la base de datos

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.


Paso 4: En la base de datos contenedor  realizamos el PLUG-IN de la base de datos actualizada.

[oracle@upgrade12c ~]$ export ORACLE_SID=cdb
[oracle@upgrade12c ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Fri Apr 17 16:04:05 2015

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


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

SQL> create pluggable database PDBORCL using '/home/oracle/ORCL.xml' NOCOPY;

Pluggable database created.

SQL>

Paso 5: Finalizamos el PLUG-IN convirtiendo la base de datos a un Pluggable Database mediante el script noncdb_to_pdb.sql.

SQL> alter session set container=PDBORCL;

Session altered.

SQL> @?/rdbms/admin/noncdb_to_pdb.sql
SQL> SET SERVEROUTPUT ON
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> WHENEVER SQLERROR EXIT;

...

SQL>
SQL> -- leave the PDB in the same state it was when we started
SQL> BEGIN
  2    execute immediate '&open_sql &restricted_state';
  3  EXCEPTION
  4    WHEN OTHERS THEN
  5    BEGIN
  6      IF (sqlcode <> -900) THEN
  7        RAISE;
  8      END IF;
  9    END;
 10  END;
 11  /

PL/SQL procedure successfully completed.

SQL>
SQL> WHENEVER SQLERROR CONTINUE;

Paso 6: Abrimos la nueva base de datos Pluggable.

SQL> alter session set container=PDBORCL;

Session altered.

SQL> startup
Pluggable Database opened.


Paso 7: Finalizamos el PLUG-IN verificando la nueva base de datos Pluggable.

SQL>  select CON_ID, NAME, OPEN_MODE from v$pdbs order by CON_ID;

    CON_ID NAME                           OPEN_MODE
---------- ------------------------------ ----------
         2 PDB$SEED                       READ ONLY
         3 PDBORCL                        READ WRITE

Si quieres saber más detalles sobre el proceso de PLUG-IN y UN-PLUG puedes revisar mi articulo


De esta manera finalizamos todo el proceso de Upgrade a la versión Oracle 12c.  En otros artículos me gustaría explicar procedimientos de Migración a Oracle 12c.


Espero que les pueda servir.

No hay comentarios.:

Publicar un comentario