HOWTO - Upgrade de la Infraestuctura Grid de Oracle11gR2 a Oracle12cR2
1. HOWTO - Upgrade de la Infraestructura Grid de
Oracle11gR2 a Oracle12cR2.
1. Introducción
Hace algún tiempo monte en mi portátil una máquina de laboratorio con Oracle
VirtualBox. En esta máquina instale un Sistema Operativo Oracle Linux 6, una
Infraestructura Grid Oracle11gR2 con ASM y un motor de Base de Datos
Oracle11gR2 Enterprise Edition en modo Single Alone. Recientemente decidí
actualizar la versión de la Infraestructura Grid de este servidor a Oracle12cR2,
seguir dejando el motor de la Base Oracle11gR2 y además instalar un nuevo motor
de Base de Datos Oracle12cR2 Enterprise Edition en modo Single Alone con ASM,
de tal forma que el resultado final cuando terminara de hacerlo todo sería un
servidor que tendría los motores de Base de Datos Oracle11gR2 y Oracle12cR2
que convivirían con una única Infraestructura Grid Oracle12cR2 y una Base de
Datos ASM para las dos.
En este artículo os voy a contar a modo de guía rápida los pasos que he seguido
para hacer el upgrade de la Infraestructura Grid de Oracle11gR2 a Oracle12cR2.
2. Entorno
Como os he comentado anteriormente la maquina con la que voy a trabajar es un
servidor virtual Oracle VirtualBox, con una versión del Sistema Operativo Oracle
Linux 6.10. Las versiones del software de Oracle tanto de la infraestructura Grid
como del motor de la Base de Datos son Oracle11gR2 (11.2.0.4). Además, en
Febrero de este año instale el último PSU que había disponible para esta versión,
el correspondiente al mes de Enero de 2019
Resumen de los entornos de origen y destino
Servidor: ol6-oracledb / Dirección IP: 10.10.2.40
Sistema Operativo: Oracle Linux 6.10 / Kernel: UEK 3.8.13-118.35.2
Oracle11gR2 Grid Infrastucture (11.2.0.4) --> /u01/app/11.2.0.4/grid
Oracle11gR2 RDBMS (11.2.0.4) --> /u01/app/oracle/product/11.2.0.4/db_1
Patch 28813878: Oracle Grid Infrastucture Patch Set Update 11.2.0.4.190115
Servidor: ol6-oracledb / Dirección IP: 10.10.2.40
Sistema Operativo: Oracle Linux 6.10 / Kernel: UEK 3.8.13-118.35.2
Oracle11gR2 Grid Infrastucture (11.2.0.4) --> /u01/app/11.2.0.4/grid (Upgraded)
Oracle12cR2 Grid Infrastucture (12.2.0.1) --> /u01/app/12.2.0.1/grid
Oracle11gR2 RDBMS (11.2.0.4) --> /u01/app/oracle/product/11.2.0.4/db_1
Patch 29255947: Oracle Grid Infrastructure Patch Set Update 11.2.0.4.190416
Patch 29301687: Oracle Grid Infrastucture Patch Set Upadate 12.2.0.1.190416
2. 3. Pasos previos y pre-requisitos
La primera decisión que tome antes ponerme a actualizar el software de la
Infraestructura Oracle Grid a Oracle12cR2, fue actualizar la infraestructura
Grid Oracle11gR2 actual con último PSU disponible el del mes de Abril de
2019 (Patch 29255947: Oracle Grid Infrastructure Patch Set Update
11.2.0.4.190416). Este paso obviamente es opcional, si quieres puedes
hacerlo y sino no, no pasa nada. Aunque yo siempre recomiendo tener el
software de la Base de Datos y de la Infraestructura lo más actualizado
posible con los últimos parches. Mi recomendación entonces, es que antes
de ponerte hacer nada, actualices todo el software de Oracle que tengas
instalado en tu servidor.
La siguiente tarea que hay que hacer es bajarse la versión Oracle12cR2 de
la Infraestructura Grid de la página de Oracle. Este software está disponible
tanto a través de Oracle OTN como en la página de Oracle Software
Delivery Cloud.
A continuación, nos crearemos el directorio donde haremos toda la
instalación (el nuevo $ORACLE_HOME de la Infraestructura Grid Oracle12cR2).
[grid@ol6-oracledb]$ mkdir –p /u01/app/12.2.0.1/grid
Una vez que haya terminado de bajarse el software, lo subimos al servidor
por FTP/SFTP al servidor y dejamos el fichero en un directorio temporal, en
mi caso en el área de stage que tengo definido en /u01/stage
Descomprimimos el fichero linuxx64_12201_grid_home.zip que nos
hemos bajado en el nuevo $ORACLE_HOME
[grid@ol6-oracledb]$ cd /u01/app/12.2.0.1/grid
[grid@ol6-oracledb]$ unzip /u01/stage/linuxx64_1201_grid_home.zip .
Durante la instalación hará un chequeo de una serie de pre-requisitos que
se tienen que cumplir, así que mientras se descomprime el fichero
podemos ir trabajando en otra serie tareas:
Lo primero que nada hay bajar todas la Bases de Datos que estén
corriendo en el servidor. En mi caso solo tengo una, ORALAB así que lo
primero que tenemos que hacer es conectarnos con el usuario oracle y
bajar todas las Bases de Datos con el comando srvctl.
[grid@ol6-oracledb]$ su – oracle
[oracle@ol6-oracledb]$ srvctl stop database –d ORALAB
3. Lo siguiente que debemos hacer es actualizar la versión del paquete de
Sistema Operativo cvuqdisk. Nos conectamos con el usuario root y
ejecutamos el siguiente comando.
[grid@ol6-oracledb]$ su –
[root@ol6-oracledb]# cd /u01/app/12.2.0.1/grid/cv/rpm
[root@ol6-oracledb]# rpm -Uvh cvuqdisk-1.0.10-1.rpm
Para poder hacer el upgrade de la Infraestructura Grid necesitaremos
cambiar previamente el atributo “asm.compatible” de los diskgroup de
nuestra Base de Datos ASM. Para poder hacer el upgrade a Oracle12cR2
necesitaras cambiar este atributo como mínimo a 11.2.0.2.0, pero si vas
a instalar una Base de Datos Oracle12cR2 necesitaras ponerlo como
mínimo a 12.2.0.0. Yo en mi caso primero lo cambie a 11.2.0.2.0 pero
cuando instale el software y la Base de Datos Oracle12c me pidió volver
a cambiarlo nuevamente a 12.2.0.0. Si va a trabajar con una Base de
Oracle11gR2 puedes dejarlo en 11.2.0.2.0 pero si quieres instalar una
Base de Datos Oracle12c, mi recomendación entonces es que lo
cambies ya directamente a 12.2.0.0 y así te ahorraras una tarea cuando
vayas a instalar el software de la Base de Datos Oracle12c. Para hacer
esto ejecutaremos los siguientes comandos con el propietario de la
infraestructura Oracle Grid y conectándonos a la Base de Datos de ASM.
[grid@ol6-oracledb]$ sqlplus / as sysam
SQL> ALTER DISKGROUP data SET ATTRIBUTE 'compatible.asm'='11.2.0.2.0';
SQL> ALTER DISKGROUP fra SET ATTRIBUTE 'compatible.asm'='11.2.0.2.0';
4. Actualizando la Infraestructura Grid
Terminado todo esto, ha llegado el momento de empezar ya a actualizar nuestra
Infraestructura Grid a Oracle12cR2.
Con el usuario propietario del software de la Infraestructura Grid ejecutamos
desde el nuevo $ORACLE_HOME (donde hemos descomprimido del software de la
Infraestructura Oracle12cR2 anteriormente) el comando gridSetup.sh
[grid@ol6-oracledb]$ /u01/app/12.2.0.1/grid/gridSetup.sh
Después de la pantalla de “Bienvenida” nos aparecerá la siguiente pantalla, donde
elegiremos la opción “Upgrade Oracle Grid Infrastructure”
4. Al darle “Next” nos saldrá el siguiente aviso
Como nosotros en nuestro caso ya hemos bajado previamente todas las Bases de
Datos existentes en el servidor, podemos ignorar este mensaje darle al botón “Yes”
y continuar con el siguiente paso de la instalación.
5. En la siguiente pantalla nos da la opción de registrar la infraestructura en el Oracle
Cloud Control. En mi caso no aplica, pero en el caso de querer regístralo
tendremos que facilitarle los datos que nos pide y le damos a “Next” para
continuar.
En la siguiente pantalla nos pedirá los grupos del Sistema Operativo asociados al
admin, al dba y al oper de la Infraestructura Grid. Aceptamos los valores por
defecto que nos presentan, que en mi caso están definidos como asmadmin y
asmdba y le damos “Next>” para continuar
6. En la siguiente pantalla aceptamos los valores para el $ORACLE_BASE y el
$ORACLE_HOME y le damos al “Next” para continuar
7. En la siguiente pantalla nos dará la opción de poder ejecutar el script
rootupgrade.sh de forma automática. Yo prefiero hacerlo todo de forma manual
así que dejo esta opción desactivada y le doy al botón de “Next>” para continuar.
A continuación, empezará a realizar el chequeo de los pre-requisitos
8. Llegados a este punto del chequeo de pre-requisitos la instalación nos fallara ya
que nos pide que tengamos instalado el parche 21255373.
Estuve buscando información sobre este parche y vi que se trata de un parche de
Junio de 2018 con cual este parche debería de estar ya incluido en los últimos PSU
a partir de Octubre de ese mismo año. Al tener el ultimo PSU instalado me extraño
mucho que no estuviera incluido, pero leyendo la información de este parche
resulta que este parche solo es aplicable para entornos RAC por lo que al instalar
el PSU de Abril 2019 en un entorno de Infraestructura Single Alone por alguna
razón este parche no se aplica.
9. Si intentamos saltárnoslo no nos dejará continuar con la instalación y te saldrá la
siguiente pantalla indicándonos que este requisito no puede ser ignorado ya que
este parche es un requisito obligatorio para poder hacer el upgrade de la
Infraestructura Grid a Oracle12cR2.
La única solución para poder continuar y hacer el upgrade es cancelar por
completo la instalación que estábamos haciendo y volver a ejecutar el script
gridUpgrade.sh con la opción –skipPrereqs, que nos permite saltarnos el
chequeo de pre-requisitos, desde el principio.
[grid@ol6-oracledb]$ /u01/app/12.2.0.1/grid/gridSetup.sh –skipPrereqs
Como os acabo de comentar, al volver a ejecutar el script volverá a empezar toda
la instalación desde el principio mostrándonos nuevamente todas las pantallas
que ya os he comentado anteriormente con la excepción de la del chequeo de pre-
requisitos. Volvemos a introducir toda información hasta llegar a la siguiente
pantalla “Summary” donde nos mostrara un resumen de la instalación que va a
realizar y que aceptaremos pulsando el botón “Next” y continuación ya no
tenemos que hacer nada más de momento, empezara a relinkar y configurar el
solo el software de la Infraestructura Grid Oracle12c.
10. Cuando llegue aproximadamente al 22% de la instalación nos pedirá que
ejecutemos con el usuario root el script rootUpgrade.sh
11. Abrimos una consola con el usuario root y ejecutamos el script
[grid@ol6-oracledb]$ su -
[root@ol6-oracledb]# /u01/app/12.2.0.1/grid
[root@ol6-oracledb]# . ./rootupgrade.sh
Este es el log que nos devolverá la ejecución del script
Performing root user operation.
The following environment variables are set as:
ORACLE_OWNER= grid
ORACLE_HOME= /u01/app/12.2.0.1/grid
Enter the full pathname of the local bin directory:
[/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin. Overwrite it?
(y/n)[n]:
The file "oraenv" already exists in /usr/local/bin. Overwrite it?
(y/n)[n]:
The file "coraenv" already exists in /usr/local/bin. Overwrite it?
(y/n)[n]:
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file:
/u01/app/12.2.0.1/grid/crs/install/crsconfig_params
The log of current session can be found at:
/u01/app/oracle/crsdata/ol6-oracledb/crsconfig/roothas_2019-06-
27_04-40-17PM.log
2019/06/27 16:40:24 CLSRSC-363: User ignored prerequisites during
installation
ASM has been upgraded and started successfully.
Creating OCR keys for user 'grid', privgrp 'oinstall'..
Operation successful.
LOCAL ONLY MODE
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4664: Node ol6-oracledb successfully pinned.
2019/06/27 16:45:07 CLSRSC-329: Replacing Clusterware entries in
file 'oracle-ohasd.conf'
CRS-4123: Oracle High Availability Services has been started.
2019/06/27 16:48:15 CLSRSC-482: Running command: 'srvctl upgrade
model -s 11.2.0.4.0 -d 12.2.0.1.0 -p first'
2019/06/27 16:50:04 CLSRSC-482: Running command: 'srvctl upgrade
model -s 11.2.0.4.0 -d 12.2.0.1.0 -p last'
ol6-oracledb 2019/06/27 16:50:11
/u01/app/12.2.0.1/grid/cdata/ol6-oracledb/backup_20190627_165011.olr
0
ol6-oracledb 2019/06/26 15:23:24
/u01/app/11.2.0.4/grid/cdata/ol6-oracledb/backup_20190626_152324.olr
-
CRS-2791: Starting shutdown of Oracle High Availability Services-
managed resources on 'ol6-oracledb'
CRS-2673: Attempting to stop 'ora.evmd' on 'ol6-oracledb'
12. CRS-2677: Stop of 'ora.evmd' on 'ol6-oracledb' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed
resources on 'ol6-oracledb' has completed
CRS-4133: Oracle High Availability Services has been stopped.
CRS-4123: Oracle High Availability Services has been started.
2019/06/27 16:54:40 CLSRSC-327: Successfully configured Oracle
Restart for a standalone server
Una vez haya finalizado la ejecución del script correctamente, volvemos a la
pantalla del instalador pulsamos “Ok” y continuamos con el upgrade.
Después de algunos minutos más y si no hay ningún error nos saldrá una pantalla
indicado que la instalación ha finalizado satisfactoriamente. Pulsamos “Close”
para cerrar el instalador.
13. Finalmente establecemos las nuevas variables de entorno en fichero
.bash_profile y a continuación verificamos el estado de los servicios de la nueva
Infraestructura Grid Oracle12cR2 ejecutando el comando crsctl con el fin de
poder comprobar el estado de nuestra instalación.
ORACLE_SID=+ASM; export ORACLE_SID
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=/u01/app/12.2.0.1/grid; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export
LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
[grid@ol6-oracledb]$ crsctl stat res -t
14. --------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
ONLINE ONLINE ol6-oracledb STABLE
ora.FRA.dg
ONLINE ONLINE ol6-oracledb STABLE
ora.LISTENER.lsnr
ONLINE ONLINE ol6-oracledb STABLE
ora.asm
ONLINE ONLINE ol6-oracledb Started,STABLE
ora.ons
OFFLINE OFFLINE ol6-oracledb STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
1 ONLINE ONLINE ol6-oracledb STABLE
ora.diskmon
1 OFFLINE OFFLINE STABLE
ora.evmd
1 ONLINE ONLINE ol6-oracledb STABLE
ora.oralab.db
1 OFFLINE OFFLINE Instance Shutdown,STABLE
A continuación, procederemos a arrancar nuevamente la Base de Datos de forma
manual con el comando srvctl.
[grid@ol6-oracledb]$ su - oracle
[oracle@ol6-oracledb]$ srvctl start database –d ORALAB
Al intentar arrancar la Base de Datos me dio el siguiente error:
PRCR-1079 : Failed to start resource ora.oralab.db
CRS-5017: The resource action "ora.oralab.db start" encountered the
following error:
ORA-00845: MEMORY_TARGET not supported on this system
. For details refer to "(:CLSN00107:)" in "/u01/app/oracle/diag/crs/ol6-
oracledb/crs/trace/ohasd_oraagent_grid.tr.
CRS-2674: Start of 'ora.oralab.db' on 'ol6-oracledb' failed
ORA-00845: MEMORY_TARGET not supported on this system
Cause: The MEMORY_TARGET parameter was not supported on this
operating system or /dev/shm was not sized correctly on Linux.
Action: Refer to documentation for a list of supported operating
systems. Or, size /dev/shm to be at least the SGA_MAX_SIZE on each
Oracle instance running on the system.
Hice una búsqueda rápida en Google y no tarde mucho en encontrar la solución
para este problema.
15. Nos conectamos con usuario root y ejecutamos el siguiente comando:
[grid@ol6-oracledb]$ su -
[root@ol6-oracledb]# mount -t tmpfs shmfs -o size=10g /dev/shm
[root@ol6-oracledb]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ol6_oracledb-lv_root
23G 4.7G 17G 22% /
shmfs 10G 904M 9.2G 9% /dev/shm
/dev/sda1 283M 132M 133M 50% /boot
/dev/mapper/ol6_oracledb-lv_oracle
50G 22G 25G 47% /u01
/dev/mapper/ol6_oracledb-lv_stage
15G 38M 14G 1% /u01/stage
Para hacer este cambio forma permanente añadiremos la siguiente línea en el
fichero /etc/fstab con el usuario root
shmfs /dev/shm tmpfs size=10g 0
Al volver a arrancar la Base de Datos comprobamos que, ahora sí, lo hace
correctamente y que en la Infraestructura Grid Oracle12cR2 ya podemos ver
nuestra Base de Datos Oracle11gR2 arrancada.
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
ONLINE ONLINE ol6-oracledb STABLE
ora.FRA.dg
ONLINE ONLINE ol6-oracledb STABLE
ora.LISTENER.lsnr
ONLINE ONLINE ol6-oracledb STABLE
ora.asm
ONLINE ONLINE ol6-oracledb Started,STABLE
ora.ons
OFFLINE OFFLINE ol6-oracledb STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
1 ONLINE ONLINE ol6-oracledb STABLE
ora.diskmon
1 OFFLINE OFFLINE STABLE
ora.evmd
1 ONLINE ONLINE ol6-oracledb STABLE
ora.oralab.db
1 ONLINE ONLINE ol6-oracledb Open,HOME=/u01/app/o
racle/product/11.2.0
.4/db_1,STABLE
16. Con esto podemos dar ya por finalizado el upgrade de la Infraestructura Grid de
Oracle11gR2 a Oracle12cR2. Si queremos rizar el rizo un poquito más, a
continuación, podemos, opcionalmente, bajar la Base de Datos nuevamente e
instalar el ultimo PSU disponible para la Infraestructura Grid Oracle12cR2 (Patch
2930687 GI APR 2019 RELEASE UPDATE 12.2.0.1.190416).
Espero que os haya gustado esta HOWTO y que os sea de utilidad si algún día
tenéis que hacer el upgrade la Infraestructura Grid de Oracle11gR2 a Oracle12cR2.
Un saludo y hasta la próxima.
______________________________________________________________________
Acerca del Autor
José Francisco Gómez es un DBA y Administrador de Sistemas
Unix/Linux experimentado con más de 15 años de experiencia en IT. Sus
especialidades son principalmente la administración del RDBMS Oracle,
los entornos de alta disponibilidad Oracle RAC y Oracle Dataguard, el
tuning de Base de Datos y el análisis y optimización de sentencias SQL y
paquetes PL/SQL.