jueves, 24 de agosto de 2017

Parches de la base de datos Oracle

Saludos, a quien no le da miedo cuando escuchas Parche, bueno el parchado de la base de datos es una tarea que no se debe omitir en la administracion de nuestra base de datos y tampoco tenerle miedo, pero el hecho que diga que se debe de tener miedo no quiere decir que no tengamos precauciones.

Que es un parche?
Los parche que libera Oracle en su mayoría son soluciones(Fixes) a errores (Bugs) reportados, vulnerabilidades, rendimiento, entre otros, por ello es su importancia de revisar que soluciona y si aplica a nuestra arquitectura.


Los parches se los clasifica en tres grupos:
  • Security Patch Update (SPU). Parche que contiene reparaciones a vulnerabilidades que pueden ser perjudiciales para la seguridad de la información.
  • Patch Set Updates (PSU). Parche que contiene reparaciones a errores encontrados, esto errores pueden se de alto impacto, mediano o bajo para la operación de la base de datos, en este grupo de parche se incluye los SPU, el cual lo describimos en el anterior punto.
  • Bundle Patch (BP). Parche orientadoa productos, como ejemplo alguna mejora o funcionalidad, este parche incluye los parches SPU y PSU. 



Como sabemos que parche aplicar?
Para ello debemos leer los avisos que nos llegan de liberaciones de parches y ver el contenido para ver si aplica a nuestra arquitectura.


Otra forma es apoyandonos del Soporte de Oracle y en la seccion de "Patchs & Update" realizar la busqueda. Existen 3 opciones de busqueda, en lo particula prefiero la opcion "Recommended Patch Advisor", aqui seleccionamos nuestro producto, version y plataforma y nos arroja los parches recomedados.



Aqui nos aparece los parches recomendados y podemos descargarlos y tambien revisar el contenido del parche README.HTML, debemos revisar que soluciona, si lo necesitamos, pre-requisitos, consideraciones previas y consideraciones post.



Aplicar el parche
Una vez que hemos encontrado los parches procedemos a descargarlos, en mi ejemplo descargue un BP(Bundle Patch) 26161724, ahora si podemos a aplicarlos con la utilidad OPATCH, pero como les dige no hay que tener miedo, pero no por esto no dejar de tener precaución, por eso mi recomendacion es primero aplicar el parche en ambientes no productivos como uno de desarrollo o pruebas, hago incapie en esto por que hay que prevenir y probar que todo funcione en estos ambientes antes de aplicar en producció, aunque OPATCH tambien dispone de un rollback del parche por cualquier inconveniente que nos genere la aplicación del parche. Leer el documento README.HTML del parche, en el se incluye los pasos a seguir y las consideraciones.

Pasos
  • Descomprimir el zip

  • Setear variables de ambiente
REM Es importantes seter la ruta del OPATCH para que funcione
>set ORACLE_HOME=D:\oracle\product\12.1.0\dbhome_1
>set path=%ORACLE_HOME%\perl\bin;%ORACLE_HOME%\OPatch;%path%

  • Bajar Instancias de base de datos y servicios 
REM Bajar la instancia Oracle (Em mi ejemplo es una instancia simple)
set ORACLE_SID=ORCL
>SQLPLUS / AS SYSDBA
SQL>shutdown immediate;

REM Bajar servicio de Windows
C:\>net stop msdtc
El servicio de Coordinador de transacciones distribuidas está deteniéndose.
El servicio de Coordinador de transacciones distribuidas se detuvo correctamente.


  • AplicarParche con OPATCH
REM no dirigimos a la ruta del parche que descomprimos
>cd D:\OraInstall\parches\p26161724_121020_MSWIN-x86-64\26161724
REM Aplicar Parche
>opatch apply
Oracle Interim Patch Installer version 12.1.0.1.3
Copyright (c) 2017, Oracle Corporation.  All rights reserved.


Oracle Home       : D:\oracle\product\12.1.0\dbhome_1
Central Inventory : C:\Program Files\Oracle\Inventory
   from           : n/a
OPatch version    : 12.1.0.1.3
OUI version       : 12.1.0.2.0
Log file location : D:\oracle\product\12.1.0\dbhome_1\cfgtoollogs\opatch\26161724_Aug_24_2017_14_59_32\apply2017-08-24_1
4-59-32PM_1.log

Applying interim patch '26161724' to OH 'D:\oracle\product\12.1.0\dbhome_1'
Verifying environment and performing prerequisite checks...
Patch 26161724: Optional component(s) missing : [ oracle.rdbms.tg4ifmx, 12.1.0.2.0 ] , [ oracle.rdbms.tg4msql, 12.1.0.2.
0 ] , [ oracle.oraolap, 12.1.0.2.0 ] , [ oracle.rdbms.tg4adbs, 12.1.0.2.0 ] , [ oracle.rdbms.tg4db2, 12.1.0.2.0 ] , [ or
acle.oraolap.api, 12.1.0.2.0 ] , [ oracle.rdbms.tg4ims, 12.1.0.2.0 ] , [ oracle.usm, 12.1.0.2.0 ] , [ oracle.rdbms.ic, 1
2.1.0.2.0 ] , [ oracle.has.cfs, 12.1.0.2.0 ] , [ oracle.rdbms.tg4tera, 12.1.0.2.0 ] , [ oracle.rdbms.tg4sybs, 12.1.0.2.0
 ] , [ oracle.has.cvu, 12.1.0.2.0 ] , [ oracle.has.crs, 12.1.0.2.0 ] , [ oracle.ldap.ztk, 12.1.0.2.0 ]
All checks passed.

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = 'D:\oracle\product\12.1.0\dbhome_1')


Is the local system ready for patching? [y|n]//Digita Y y dale Enter
y
User Responded with: Y
Backing up files...

Patching component oracle.network.rsf, 12.1.0.2.0...
Patching component oracle.swd.oui.core.min, 12.1.0.2.0...
Patching component oracle.has.db, 12.1.0.2.0...
Patching component oracle.odbc.ic, 12.1.0.2.0...
Patching component oracle.rdbms.hsodbc, 12.1.0.2.0...
Patching component oracle.has.common, 12.1.0.2.0...
Patching component oracle.assistants.server, 12.1.0.2.0...
Patching component oracle.ordim.server, 12.1.0.2.0...
Patching component oracle.has.common.cvu, 12.1.0.2.0...
Patching component oracle.ctx.atg, 12.1.0.2.0...
Patching component oracle.sdo.locator, 12.1.0.2.0...
Patching component oracle.oraolap.dbscripts, 12.1.0.2.0...
Patching component oracle.sqlplus, 12.1.0.2.0...
Patching component oracle.sqlplus.ic, 12.1.0.2.0...
Patching component oracle.precomp.common.core, 12.1.0.2.0...
Patching component oracle.oracore.rsf, 12.1.0.2.0...
Patching component oracle.rdbms.rsf.ic, 12.1.0.2.0...
Patching component oracle.ctx, 12.1.0.2.0...
Patching component oracle.precomp.common, 12.1.0.2.0...
Patching component oracle.rdbms.dbscripts, 12.1.0.2.0...
Patching component oracle.usm.deconfig, 12.1.0.2.0...
Patching component oracle.ntrdbms.oraconfig, 12.1.0.2.0...
Patching component oracle.ldap.rsf.ic, 12.1.0.2.0...
Patching component oracle.ntoledb.odp_net_2, 12.1.0.2.0...
Patching component oracle.rdbms.dv, 12.1.0.2.0...
Patching component oracle.clrintg.ode_net_2, 12.1.0.2.0...
Patching component oracle.has.rsf, 12.1.0.2.0...
Patching component oracle.javavm.containers, 12.1.0.2.0...
Patching component oracle.rdbms.install.plugins, 12.1.0.2.0...
Patching component oracle.rdbms, 12.1.0.2.0...
Patching component oracle.ntoramts, 12.1.0.2.0...
Patching component oracle.ldap.owm, 12.1.0.2.0...
Patching component oracle.has.deconfig, 12.1.0.2.0...
Patching component oracle.ntrdbms.admin, 12.1.0.2.0...
Patching component oracle.rdbms.util, 12.1.0.2.0...
Patching component oracle.ldap.client, 12.1.0.2.0...
Patching component oracle.rdbms.rman, 12.1.0.2.0...
Patching component oracle.xdk.rsf, 12.1.0.2.0...
Patching component oracle.ldap.rsf, 12.1.0.2.0...
Patching component oracle.xdk.parser.java, 12.1.0.2.0...
Patching component oracle.ntoledb, 12.1.0.2.0...
Patching component oracle.rdbms.rsf, 12.1.0.2.0...
Patching component oracle.precomp.rsf, 12.1.0.2.0...
Patching component oracle.nlsrtl.rsf, 12.1.0.2.0...
Patching component oracle.network.aso, 12.1.0.2.0...
Patching component oracle.network.listener, 12.1.0.2.0...
Patching component oracle.ordim.jai, 12.1.0.2.0...
Patching component oracle.aspnet_2, 12.1.0.2.0...
Patching component oracle.precomp.lang, 12.1.0.2.0...
Patching component oracle.rdbms.deconfig, 12.1.0.2.0...
Patching component oracle.ordim.client, 12.1.0.2.0...
Patching component oracle.ldap.security.osdt, 12.1.0.2.0...
Verifying the update...
"Found msvcrt.dll in Oracle_Home\BIN."
"Deleting Oracle_Home\BIN\msvcrt.dll, as the OS loads msvcrt.dll from C:\WINDOWS\System32\ directory."
Patch 26161724 successfully applied
Log file location: D:\oracle\product\12.1.0\dbhome_1\cfgtoollogs\opatch\26161724_Aug_24_2017_14_59_32\apply2017-08-24_14
-59-32PM_1.log

OPatch succeeded.

  • Iniciar servicios, instancias y actualizar los SQL con datapatcha
REM Iniciar la instancia
set ORACLE_SID=ORCL
>SQLPLUS / AS SYSDBA
SQL>startup

REM Iniciar servicios de Windows
C:\>net start msdtc
El servicio de Coordinador de transacciones distribuidas está deteniéndose.
El servicio de Coordinador de transacciones distribuidas se detuvo correctamente.

>datapatch -verbose
SQL Patching tool version 12.1.0.2.0 Production on Thu Aug 24 15:23:54 2017
Copyright (c) 2012, 2017, Oracle.  All rights reserved.

Log file for this invocation: D:\oracle\product\12.1.0\dbhome_1\cfgtoollogs\sqlpatch\sqlpatch_5684_2017_08_24_15_23_54\s
qlpatch_invocation.log

Connecting to database...Database
SQL Patching tool complete on Thu Aug 24 15:23:54 2017


  • Aplicamos los SQL del parche a la base de datos con el datapach
En el %ORACLE_HOME%\Opactch ejecutar  datapach
cd D:\oracle\product\12.1.0\dbhome_1d\Opatch

D:\oracle\product\12.1.0\dbhome_1\OPatch>datapatch.bat
SQL Patching tool version 12.1.0.2.0 Production on Mon
Copyright (c) 2012, 2017, Oracle.  All rights reserved.
Connecting to database...OK
Bootstrapping registry and package to current versions...done
Determining current state...done
Adding patches to installation queue and performing prereq checks...done
Installation queue:
  Nothing to roll back
  The following patches will be applied:
    26161724 (WINDOWS DB BUNDLE PATCH 12.1.0.2.170718(64bit):26161724)
    21554480 ()
Installing patches...
Patch installation complete.  Total patches installed: 2
Validating logfiles...done
SQL Patching tool complete on Mon Oct 


  • Revisar objetos descompilados

Ahora si, tenermos parchada nuestra base de datos y debemos probar su funcionalidad.

Si por algun motivo necesitamos reversar elparche lo podemos realizar el comando OPATCH, solo le tenemos que pasar como parametro ROLLBACK y el id del parche a reversar 26161724:
REM desinstalar parche
>opatch rollback -id 26161724