domingo, 25 de septiembre de 2011

Forms developers Tips

DATA BLOCK PROPERTY
Database\Update Changed Columns Only

Saludos, a continuación les voy a explicar el por que es importante considerar el parámetro de bloque de datos Update Changed Columns Only.


Se debe de considerar cuando se cumplan las siguientes condiciones:
  • Es un bloque de base de datos
  • Se permite la modificación del registro
  • La tabla atachada al bloque de datos tiene primary key y otras tablas estan relacionadas a la tabla atachada al bloque.
Que valor debe de setearse y por que es importante?
El valor que debe se setearse es YES y es importante para que al momento de realizar la modificación y grabar los cambios solo se actualicen las columnas que fueron modificadas, caso contrario si el parámetro esta seteado con NO en la actualización se consideraran todos lo campos de la tabla que fueron atachados al bloque.

Bajo ningun concepto en una base de datos relacional se debería poder actualizar un campo que sea parte de una clave primaria ya que al hacerlo esto causaría el bloqueo simultaneo de datos que tengan relación con el registro(Foreing Keys).

El parámetro deberá quedar asi:

Este parametro por default es NO, y nos causo muchos problemas de bloqueos de datos ya que mientras los uausrios realizaban configuraciones estos cambios afectaban a tablas de configuración que tenian otras tablas hijas con mas de 15 millones de registros y no había indices FK en las tablas hijas por lo que se hacia un bloqueo total a las tablas hijas.

Espero les sirva y lo consideren durante sus desarrollos.

sábado, 24 de septiembre de 2011

Tunea tu Report Server Oracle 10g

A continuación este artículo les ayudara a mejorar el rendimiento y desempeño se nuestro OASR2 10.1.2 (Oracle Application Server).

Report Parameter
 Si tenemos varios usuarios que desean ejecutar reportes e informes pero se quejan que esperan mucho tiempo (porque es solo un formulario que imprimen). Lo ideal es que se optimice el reporte para ver si se le puede hacer algún tuneo a la consulta, pero si son reportes que por su naturaleza son complejos y necesitan de un tiempo de entre 10 y 60 segundos a nivel de del reporte no podemos hacer nada para mejorarlo, lo que podemos hacer es configurar nuestro report server para que se creen más procesos de manera automática si existen reportes en cola d ejecución. La configuración inicial de report server solo permite ejecutar uno a uno las colas de reportes, por lo que puede suceder que esta cola de impresión se demore en atenderse si hablamos de reportes complejos.
Para esto nos podemos ayudar de los parámetros del sistema de reporte

  • Sistemas Iniciales (initEngine)
  • Máximo de Sistemas (maxEngine)  
Sistemas Iniciales (initEngine): Indica el número de procesos iniciales que empezaran atender las peticiones de ejecución de reportes. El valor por defecto es 1.
Máximo de Sistemas (maxEngine): Indica el número de procesos máximo que se pueden crear para atender las peticiones de ejecución de reportes. El valor por defecto es 1.

Lo recomendable es que Máximo de Sistemas (maxEngine) se configure con la cantidad de procesadores que posee el servidor donde reside el servicio de reportes.
Sistemas Iniciales (initEngine) yo recomiendo que se deje su valor en 1, para que luego no queden procesos subutilizado que ocupan memoria. Por qué ? Bueno como les dije este parámetro indica la cantida de procesos iniciales que atenderán las peticiones de impresión, Ejemplo:
Si maxEngine es igual 4 y initEngine es igual a 4 entonces desde que se levanta el servicio de report habrán 4 procesos para impresiones estén o no haciendo solicitudes
Si maxEngine es igual 4 y initEngine es igual a 1 entonces desde que se levanta el servicio de report habrá 1 proceso para impresiones estén o no haciendo solicitudes, y si el proceso esta ocupado se procederá a crearse otro para atender una petición, luego de finalizar este nuevo proceso se eliminará.

 Configuración desde el EM de Oracle:

1-Ingresamos a la url del em y digitamos el usuario y clave.

2-Seleccionamos nuestro componente del sistema Reporte que deseamos configurar

3-Vamos a la parte inferior de Administración y damos click al link configuración.

4-Cambiamos el valor del parámetro (en mi caso tengo 2 procesadores con 4 núcleo y lo configuro con 8) y damos click en aceptar.

 5-Indicamos que si deseamos reiniciar el servicio de reportes.

6-Listo, ya tenemos nuestro servidor de reportes configurado para que pueda atender a 8 solicitudes a la vez.



Configuración desde el archivo:
1-Editamos el archivo de configuración .conf del servidor de reportes ubicado en %OAS_HOME%\reports\conf, el nombre de mi servidor de reportes es srv_reporte01 por lo que el archivo de configuración tendrá el mismo nombre.
2-Buscamos dentro de la sección engine y buscamos los parámetros initEngine y maxEngine. Luego de encontrarlo modificamos sus valores.
<engine id="rwEng" class="oracle.reports.engine.EngineImpl" initEngine="1" maxEngine="8" minEngine="0" engLife="50" maxIdle="30" callbackTimeOut="90000">
<property name="sourceDir" value="E: \Reportes "/>
<!--property name="tempDir" value="your reports temp directory"/-->
<!--property name="keepConnection" value="yes"/-->
</engine>

 3-Bajamos y subimos el servicio del report server, vamos al %OAS_HOME%opmn\bin.    opmnctl stopproc ias-component=srv_reporte01
    opmnctl startproc ias-component=srv_reporte01

 




  1. Listo, ya tenemos configurado nuestro servidor de reportes para que pueda atender 8 solicitudes a la vez

Nota: El cambio de este parámetro involucra reiniciar el servicio de reportes, por lo que se debe de tener en consideración que el servicio estará fuera lo que tarde en reiniciarse.