Instalación completa de Oracle Forms & Reports 12c en un Clúster de 3 Nodos con Alta Disponibilidad!

Oracle forms and reports cluster

Oracle forms and reports se ha convertido en una herramienta de la que muchas empresas a nivel mundial todavía dependen, apesar de que su última actualización ya tiene varios años en el mercado, se continúan creando ambientes y nuevos desarrollos para trabajar con Oracle forms and Reports, sin embargo, hay buenas noticias, Oracle acaba de anunciar que este año llegará una nueva versión de Oracle Fusion Middleware Infrastructure 14.1.2 la cual vendrá con importantes mejoras para Oracle forms and Reports, puedes leer más información sobre esta noticia en el siguiente link: Noticia

En esta entrada les brindaré una documentación detallada sobre como realizar la instalación de un ambiente de Oracle forms and reports 12c en un clúster de 3 nodos, este cluster constará de un nodo específicamente para el AdminServer y 3 nodos para ejecutar las instancias de forms and reports; todo esto será instalado en Oracle Linux.

Prerequisitos:

  • Instalador Full ISO de Oracle linux 7.9 en su último release – Descargar
  • Instaldor de la última versión del jdk de java 8 – Descargar
  • Instalador de Oracle Fusion Middleware Infrastructure 12.2.1.2 – Descargar
  • Instalador de Oracle Forms and Reports 12.2.1.2 – Descargar
  • Instalador de jacob 1.18 – Descargar
  • Instalador de webutil demo – Descargar
  • Se debe tener instalada y configurada una instancia de base de datos Oracle, puede ser en el mismo servidor o en otro servidor preferiblemente y tener el string de conexión y acceso sysadmin al schema donde se instalará forms and reports.

Nota 1: La instalación fue completamente probada e instalada usando la versión 12.2.1.2 de Oracle forms and reports, si descarga una versión más reciente, es probable que se presente algún error extra que no venga solucionado en esta documentación.

Nota 2: Para esta instalación, el admin server quedará configurado en un nodo y las instancias de forms and reports se ejecutarán en los otros 3 nodos, si lo desea, puede balancear el admin server entre los 3 nodos donde se ejecute forms and reports utilizando una tarjeta de red virtual y almacenamiento compartido, sin embargo, eso no viene explicado en esta documentación, pero si se requiere, antes de leer esta documentación, puede leer la siguiente, donde explico como se hace: Cómo configurar un AdminServer de Weblogic 12c en Alta Disponibilidad

Pasos de instalación:

Cada paso estará anclado, entonces puede tocarlo para que lo lleve a la sección donde comienza:

  1. Preparación del ambiente
  2. Configuración de paquetes
  3. Configuración de hosts
  4. Instalación de Java 8
  5. Instalación de Oracle Fusion Middleware Infrastructure 12c
  6. Instalación de Oracle Forms and Reports 12c
  7. Creación del RCU
  8. Creación y configuración del dominio de Weblogic
  9. Pack y unpack del nodo 1 al nodo 2 y 3
  10. Configuraciones posteriores a la instalación
  11. Configuración para resolución de nombres de DNS en setDomain.env
  12. Configuración del nodemanager
  13. Primer inicio de todo
  14. Configuración de boot.properties
  15. Configuración de jacob 1.18
  16. Instalación y configuración de webutil_demo
  17. Creación de cluster de reptools y reports server
  18. Configuración de cluster de servidores de reportes en los 3 nodos usando un clustername
  19. Configuración de repositorio de jobs en la base de datos para el cluster de reports
  20. Configuración de OHS
  21. Tips y configuraciones extras

Preparación del ambiente

Antes de realizar la instalación del sistema operativo, primero debemos tener 4 máquinas virtuales o servidores físicos con al menos las siguientes características, recordemos que una será solo para el admin server y las otras 3 correrán las instancias de forms and reports:

Requerimientos mínimos:

  • 8 gb de RAM
  • 2 cpus
  • 100 gb de almacenamiento

El almacenamiento podría ser mayor dependiendo la cantidad de formas que desee guardar en los servidores, es necesario usar una ruta o carpeta compartida entre los 3 nodos para que cuando se utilice la aplicación de forms, las formas se llamen siempre desde la misma ruta.

Ahora bien, teniendo las 4 máquinas, vamos a realizar la instalación del sistema operativo Oracle Linux 7.9 para ello, puede seguir la siguiente documentación donde explico como realizar la instalación a detalle Cómo instalar Oracle Linux tome en cuenta que las particiones del disco deberán quedar de la siguiente forma en todas las máquinas virtuales durante la instalación.

  • /home 20 GB
  • /oracle 25 GB
  • / 50 GB
  • /boot 1024 MB
  • swap 3.96 GB

Luego de la instalación del sistema operativo, es recomendable aplicar los siguientes comandos:

Se debe configurar la política de selinux en permissive

  • cat /etc/selinux/config
  • SELINUX=permissive

Se debe detener el firewalld para la instalación, luego de la instalación, se debe volver a iniciar y habilitar los puertos necesarios para el funcionamiento de forms:

  • systemctl stop firewalld
  • systemctl disable firewalld

Configuración de paquetes

Antes de comenzar con la instalación de Oracle Fusion Middleware Infrastructure 12.2.1.2 se deben instalar los siguientes paquetes en el sistema opertivo, todo utilizando el usuario root:

yum install binutils -y
yum install compat-libcap1 -y
yum install compat-libstdc++-33 -y
yum install compat-libstdc++-33.i686 -y
yum install gcc -y
yum install gcc-c++ -y
yum install glibc -y
yum install glibc.i686 -y
yum install glibc-devel -y
yum install glibc-devel.i686 -y
yum install libaio -y
yum install libaio-devel -y
yum install libgcc -y
yum install libgcc.i686 -y
yum install libstdc++ -y
yum install libstdc++.i686 -y
yum install libstdc++-devel -y
yum install ksh -y
yum install make -y
yum install sysstat -y
yum install tigervnc*
yum install ocfs2-tools -y
yum install motif -y
yum install motif-devel -y
yum install numactl -y
yum install numactl-devel -y

Y crearemos el usuario oracle y el grupo oinstall ejecutando los siguientes comandos:

groupadd oinstall
useradd oracle
usermod -g oinstall oracle

Configuración de hosts

Como vamos a instalar un ambiente Cluster, cada máquina deberá ver a la otras máquina, de modo que den ping y se puedan comunicar, para ello y para reconocerlas mejor, se debe configurar el hostname de cada máquina en el archivo /etc/hosts de manera que quede así:

Nodo1:

192.168.1.251 SA-CAPWLA-01
192.168.1.252 SA-CAPWLA-02
192.168.1.253 SA-CAPWLA-03
192.168.1.254 SA-CAPWLA-04

Nodo2:

192.168.1.251 SA-CAPWLA-01
192.168.1.252 SA-CAPWLA-02
192.168.1.253 SA-CAPWLA-03
192.168.1.254 SA-CAPWLA-04

Nodo3:

192.168.1.251 SA-CAPWLA-01
192.168.1.252 SA-CAPWLA-02
192.168.1.253 SA-CAPWLA-03
192.168.1.254 SA-CAPWLA-04

Nodo4:

192.168.1.251 SA-CAPWLA-01
192.168.1.252 SA-CAPWLA-02
192.168.1.253 SA-CAPWLA-03
192.168.1.254 SA-CAPWLA-04

De esta manera podremos llamar a cada máquina por un nombre definido y no una ip, esto nos ayudará a reconocerlos más fácilmente durante la instalación.

Instalación de Java 8

Debemos descargar el último release del jdk de java 8, el que tiene la extension tar.gz:

Cuando lo tengamos descargado, debemos pasarlo a cada máquina virtual, crearemos un folder en la ruta /oracle llamado java de manera que quede así:

mkdir /oracle/java -p

Pasaremos el instalador a esa ruta y luego lo debemos descomprimir usando el siguiente comando:

tar -xzvf jdk-8u401-linux-x64.tar.gz

De manera que quede así:

Ahora exportaremos algunas variables de entorno, para ello, abriremos el siguiente archivo /home/oracle/.bash_profile y le añadiremos lo siguiente:

export JAVA_HOME=/oracle/java/jdk1.8.0_281
export PATH=JAVA_HOME/bin:$PATH

Guardamos el archivo y luego ejecutaremos el siguiente comando para cargar las variables de entorno:

source /home/oracle/.bash_profile

Luego ejecutaremos java -version y nos deberá aparecer la siguiente información:

Nota: Recuerde que esto lo debe realizar en todos los nodos.

Instalación de Oracle Fusion Middleware Infrastructure 12c

La instalación de Oracle Fusion Middleware Infrastructure 12c se debe instalar en todos los nodos, para ello vamos a iniciar el instalador utilizando el siguiente comando:

java -jar /oracle	/installers/wls/fmw_12.2.1.3.0_infrastructure.jar

Definiremos donde guardar el oraInventory:

Crearemos la ruta donde se instalará el Oracle Home:

Recuerde que la instalación de Oracle Fusion Middleware Infrastructure se debe instalar en todos los nodos antes de poder continuar con el siguiente paso, luego de tenerlo instalado, continúe.

Instalación de Oracle Forms and Reports 12c

Ahora procederemos a instalar Oracle forms and Reports 12c, esta instalación también se debe realizar en los 3 nodos:

cd unpacked_archive_directory/Disk1
./runInstaller

Creación del RCU

En este paso, vamos a crear el RCU (Repository Creation Utility), esto únicamente lo ejecutaremos en el nodo1 donde estará el AdminServer los demás nodos no necesitan realizar este paso.

./oracle/Middleware/oracle_common/bin/rcu.sh

En la siguiente imagen colocaremos la información para conectarnos a nuestra base de datos, recuerde que debe tener un usuario con acceso sysdba para crear estos schemas:

Debemos colocar el nombre del nuevo schema, este se creará en la base de datos juntos con todos los componentes que seleccionemos, en este caso se llamará CAP, este nombre se solicitará más adelante así que guardalo:

Ahora le asignaremos una contraseña a todos los schemas, esta debe guardarse muy bien:

Recuerde que este paso únicamente se debe realizar en el nodo1 del AdminServer.

Creación y configuración del dominio de Weblogic

Este paso únicamente se debe ejecutar en el nodo1 del AdminServer también.

./oracle/Middleware/oracle_common/common/bin/config.sh

En este paso, debemos definir el nombre del dominio, este será el nombre de la última carpeta, en este caso promeapps:

En este siguiente paso, debemos definir cuales componentes tendrá nuestro dominio, marca los mismos que señalo en las siguientes 2 imágenes:

Aquí ya nos aparece el nombre del dominio como el de la última carpeta que creamos hace unos pasos:

Definiremos el usuario para acceder a la consola de administración de Weblogic y su contraseña:

En este paso, si elegimos ambiente de desarrollo, la diferencia será que al levantar la consola de administración, en el modo desarrollo no nos solicitará la contraseña del administrador, mientras que si lo ponemos en modo producción sí nos la solicitará:

Ahora, indicaremos el nombre del hostname de la máquina donde está la base de datos, el usuario, puerto y el schema CAP_STB junto con su contraseña, luego presionamos Get RCU Configuration y debemos verificar que la conexión diga «Successfully done»:

La revisión de los schemas debe salir en verde:

Acá elegiremos los componentes que necesitemos, en mi caso marqué los siguientes, y la verdad son los necesarios para una instalación productiva:

Indicaremos el nombre de nuestro AdminServer, el hostname por el cuál escuchará y el puerto por el que se desplegará el AdminServer:

Definimos la contraseña del Node Manager, esta será necesaria para el monitoreo de los servidores y para levantar los servicios usando el node manager:

Ahora en esta parte definiremos la cantidad de nodos que necesitemos ya sean 2, 3, 4, notese que cada WLS_FORMS y WLS_REPORTS llevan el mismo puerto, sin embargo, están en diferentes Listen Address ya que cada uno escucha por su propio hostname, además en la columna Server Groups debe elegir si es FORMS o REPORTS.

Debemos tener o crear los siguientes clusters:

Aquí, haremos la asignación de cada WLS_FORMS y cada WLS_REPORTS a su respectivo cluster:

Le colocaremos un nombre a cada Machine creada para cada cluster:

Asignaremos cada Machine a su respectivo nodo, en el nodo uno estará el AdminServer, para el caso de tener un tercer o cuarto nodo, solamente añadimos el nodo a otra máquina, cada una debe tener una máquina, un cluster y sus respectivos managed servers.

Aquí crearemos los componentes de forms y ohs, debemos tener uno por cada nodo:

Asegurese que cada uno apunte al hostname correcto:

Asignaremos cada forms y cada ohs a su respectivo nodo:

Presionamos Create y ahora a esperar:

Pack y unpack del nodo del AdminServer al nodo 1, 2 y 3

Ahora bien, debido a que las últimas configuraciones las hicimos en el nodo del AdminServer, ahora vamos a hacer un pack y unpack, esto es para copiar toda la configuración creada en Oracle forms and reports del nodo del AdminServer al nodo 1, 2 y 3, si tuvieramos más nodos, haríamos el mismo proceso para los demás.

Primero debemos ingresar al nodo del AdminServer y ejecutar los siguientes comandos, esto nos creará un jar que luego pasaremos al nodo 1, 2 y 3, en él vendrá toda la información de configuración del dominio que necesitamos:

cd /oracle/Middleware/oracle_common/common/bin
./pack.sh -managed=true -domain=/oracle/Middleware/user_projects/domains/promeapps -template=/oracle/frsdomain.jar -template_name=frsdomainTemplate

Movemos el jar hacía el nodo 1, 2 y 3, lo podemos mover usando scp como en la siguiente imagen:

Ahora procederemos a hacer el unpack en todos los nodos, para ello ejecutaremos los siguientes comandos:

cd /oracle/Middleware/oracle_common/common/bin
./unpack.sh -domain=/oracle/Middleware/user_projects/domains/promeapps -template=/oracle/frsdomain.jar -log_priority=DEBUG -log=/oracle/unpack.log -app_dir=/oracle/Middleware/user_projects/domains/promeapps

Opcional: overwrite_domain=true (Si añade este parámetro al comando anterior, permitirá sobreescribir un dominio ya existente)

Nodo1 de forms and reports:

Nodo2 de forms and reports:

Nodo3 de forms and reports:

Configuraciones posteriores a la instalación

Debemos ir a la siguiente ruta:

$DOMAIN_HOME/config

Debemos revisar si existe el archivo config.xml, en caso de que no exista, para se que cree, debemos levantar manualmente el WLS_FORMS1, 2 y 3 y WLS_REPORTS1, 2 y 3 en los nodos de forms respectivamente.

Vamos a $DOMAIN_HOME/bin en el nodo1:

./startManagedWebLogic.sh WLS_FORMS1 t3://SA-CAPWLA-01:7003
./startManagedWebLogic.sh WLS_REPORTS1 t3://SA-CAPWLA-01:7003

Luego vamos a $DOMAIN_HOME/bin en el nodo2:

./startManagedWebLogic.sh WLS_FORMS2 t3://SA-CAPWLA-01:7003
./startManagedWebLogic.sh WLS_REPORTS2 t3://SA-CAPWLA-01:7003

Y por último vamos a $DOMAIN_HOME/bin en el nodo3:

./startManagedWebLogic.sh WLS_FORMS3 t3://SA-CAPWLA-01:7003
./startManagedWebLogic.sh WLS_REPORTS3 t3://SA-CAPWLA-01:7003

Configuración para resolución de nombres de DNS en setDomain.env

Debemos ir a la siguiente ruta en el servidor del AdminServer:

$DOMAIN_HOME/bin

Dentro debemos hacer un back up del archivo setDomain.env.

Luego abriremos el archivo setDomain.env y añadiremos la siguiente línea en la línea 519:

export JAVA_OPTIONS=-Dweblogic.ResolveDNSName=true:$JAVA_OPTIONS

Configuración del nodemanager

En cada nodo debemos ir a la siguiente ruta:

$DOMAIN_HOME/nodemanager

Dentro debemos verificar el archivo nodemanager.properties, hay que asegurarse que el parámetro SecureListener este en true y que el parámetro ListenAddress tenga el nombre del hostname del nodo en el que esté.

Con esto configurado, ya será posible iniciar el NodeManager en cada nodo.

Primer inicio de todo

Para poder crear las instancias para posteriormente configurarlas, es necesario iniciar todo primeramente por consola de comandos.

Para ello nos iremos primeramente al nodo del AdminServer a $DOMAIN_HOME/bin y ejecutaremos lo siguiente:

./startWebLogic.sh
nohup ./startNodeManager.sh > node.log 2>&1 &
tail -f node.log

Ahora en todos los nodos de forms and reports, debemos iniciar el Node Manager, este permitirá la comunicación con el AdminServer para administrar todas las instancias desde la máquina del AdminServer, para ello, ejecutaremos el siguiente comando en cada nodo de forms and reports en $DOMAIN_HOME/bin:

nohup ./startNodeManager.sh > node.log 2>&1 &
tail -f node.log

Luego debemos volver al nodo del AdminServer y ejecutaremos los siguientes comandos individualmente cada uno, en cada ejecución se solicitará el usuario y la contraseña de la consola de Weblogic, cuando la ejecución llegue al estado RUNNING, continuaremos con el siguiente comando, se pueden ejecutar en diferentes tabs.

Estos nos ayudará a crear las instancias de forms and reports en cada nodo:

./startManagedWebLogic.sh WLS_FORMS1 t3://SA-CAPWLA-02:8001
./startManagedWebLogic.sh WLS_REPORTS1 t3://SA-CAPWLA-02:8002
./startManagedWebLogic.sh WLS_FORMS2 t3://SA-CAPWLA-03:8001
./startManagedWebLogic.sh WLS_REPORTS2 t3://SA-CAPWLA-03:8002
./startManagedWebLogic.sh WLS_FORMS3 t3://SA-CAPWLA-04:8001
./startManagedWebLogic.sh WLS_REPORTS3 t3://SA-CAPWLA-04:8002

Para iniciar los ohs, es necesario irnos al enterprise manager:

http://SA-CAPWLA-01:7001/em

OHS1

OHS2

Ahora que ya iniciamos todo es necesario bajar todo forms and reports.

Para ello nos iremos al nodo del AdminServer a $DOMAIN_HOME/bin y ejecutaremos lo siguiente:

./stopManagedWebLogic.sh WLS_FORMS1 t3://SA-CAPWLA-02:8001
./stopManagedWebLogic.sh WLS_REPORTS1 t3://SA-CAPWLA-02:8002
./stopManagedWebLogic.sh WLS_FORMS2 t3://SA-CAPWLA-03:8001
./stopManagedWebLogic.sh WLS_REPORTS2 t3://SA-CAPWLA-03:8002
./stopManagedWebLogic.sh WLS_FORMS3 t3://SA-CAPWLA-04:8001
./stopManagedWebLogic.sh WLS_REPORTS3 t3://SA-CAPWLA-04:8002

Luego iremos a cada nodo y bajaremos el node manager:

./stopNodeManager.sh

Y para bajar los ohs en el enterprise manager presionamos el botón de shut down en ohs1, ohs2 y ohs3.

Configuración de boot.properties

Ahora que tenemos las instancias creadas debemos crear el archivo boot.properties en cada manage server, para ello debemos hacerlo en cada nodo.

En el nodo01 iremos a la siguiente ruta:

$DOMAIN_HOME/servers/WLS_FORMS1/security

En caso de que no exista la carpeta security, simplemente la creamos y luego dentro de la carpeta security crearemos el archivo boot.properties y le agregaremos lo siguiente:

vi WLS_FORMS1/security/boot.properties
username=weblogic
password=pruebas123

Guardamos y luego aplicamos lo mismo en la ruta de REPORTS1

$DOMAIN_HOME/servers/WLS_REPORTS1/security

Luego nos iremos al nodo02 y nodo03 y haremos lo mismo solo que para FORMS2, REPORTS2 y FORMS3 y REPORTS3:

$DOMAIN_HOME/servers/WLS_FORMS2/security

$DOMAIN_HOME/servers/WLS_REPORTS2/security

$DOMAIN_HOME/servers/WLS_FORMS3/security

$DOMAIN_HOME/servers/WLS_REPORTS3/security

Esto debe realizarse también en el AdminServer.

Ahora debemos bajar la consola de weblogic para asegurarnos que al iniciarlo se encripten los archivos boot.properties, para ello vamos al nodo del AdminServer y ejecutaremos el siguiente comando:

cd $DOMAIN_HOME/bin
./stopWebLogic.sh

De esta manera con todos los servicios abajo, podemos hacer un inicio limpio, con la diferencia de que solo es necesario iniciar el servidor de weblogic desde el AdminServer, el NodeManager y los NodeManager de las 3 instancias de forms and reports.

Para iniciar el resto de servicios ya se podrá realizar desde la consola de Weblogic:

Configuración de jacob 1.18

Esta configuración se deberá realizar en todos los nodos de forms and reports, no es necesario hacerlo en el nodo del AdminServer.

  • Pasar el archivo jacob.jar a /oracle/Middleware/Oracle_Home/forms/java/
  • Copiamos el archivo Jacob.ddl que se encuentra en el directorio que descomprimimos. Dependiendo de la versión de Forms utilizada:

    a. Place jacob-1.18-M2-x86.dll in the ORACLE_HOME/forms/webutil/win32 directory.
    b. Place jacob-1.14-M2-x64.dll in the ORACLE_HOME/forms/webutil/win64 directory.

Ir a la ruta:

/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config/

Hacer un backup del archivo default.env

Ahora abrir el archive default.env y agregar al CLASSPATH las siguientes rutas:

  • /oracle/Middleware/forms/java/frmall.jar
  • /oracle/Middleware/forms/java/jacob.jar

Verificar que los archivos webutil.pll y webutil.olb estén en el directorio ORACLE_HOME/forms.

Debemos ir a la siguiente ruta /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/FORMS/instances/forms1/bin

Realizar un backup de sign_webutil.sh

Editar el archivo  sign_webuitl.sh y en la variables KEYSTORE_PASSWORD y JAR_KEY_PASSWORD colocar una clave personalizada.

Luego debemos cambiar las rutas que utiliza sign_webutil.jar para firmar los jars y crear el keystore, las cuales serías las siguientes:

/oracle/Middleware/oracle_common/jdk/bin/keytool
/oracle/Middleware/oracle_common/jdk/bin/jarsigner

Y validar que la condición de if test “$error_text” sea == y no != para corregir un error del script

Verifique la siguiente imagen para que encuentra la ubicación de las líneas dentro del archivo:

Luego procedermos a firmar el jacob.jar utilizaremos el siguiente comando:

./sign_webutil.sh /oracle/Middleware/forms/java/jacob.jar

Instalación y configuración de webutil_demo

Al igual que la instalación del jacob, no es necesario instalar webutil demo en el nodo con el AdminServer, solamente será necesario hacerlo en los nodos de forms and reports.

Copiamos el archivo webutil_demo.fmb al directorio:

ORACLE_HOME/forms

Copiamos el archivo ffisamp.dll  al directorio    

ORACLE_HOME/forms/webutil

Copiamos el archivo wu_fileupload_db_demo.sql al directorio

ORACLE_HOME/forms

cd /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/FORMS/instances/forms1/server/

Hacer un backup de webutil.cfg y luego editar el original:

Nos aseguramos de tener las siguientes líneas de la siguiente manera:

Guardamos y salimos del archivo, ahora es necesario compilar las formas de webutil demo, para ello, vamos a configurar primeramente el string de conexión de nuestra base de datos:

Iremos a la siguiente ruta:

cd /oracle/Middleware/network/admin/tnsnames.ora

  1. Dentro configuraremos el acceso a la Base de Datos, para ello debemos tener a mano el string de conexión el cual pondremos dentro del archivo de tnsnames.ora:
PROD =
  (DESCRIPTION =
    (ADDRESS =
      (PROTOCOL = TCP)
      (HOST = BASEPROD)
      (PORT = 1529)
    )
    (CONNECT_DATA =
      (SERVICE_NAME = PROD)
      (INSTANCE_NAME = PROD)
    )
  )

Luego se debe copiar el archivo tnsnames.ora a la siguiente ruta:

cd /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig1

Ahora procederemos a establecer algunas variables de entorno, para ello, iremos al siguiente archivo:

vi /home/orapro/.bash_profile

Dentro colocaremos las siguientes líneas:

export JAVA_HOME=/oracle/java/jdk1.8.0_281
export PATH=JAVA_HOME/bin:$PATH
export ORACLE_BASE=/oracle
export MW_HOME=/oracle/Middleware
export WLS_HOME=/oracle/Middleware/Oracle_Home/wlserver
export WL_HOME=$WLS_HOME
export DOMAIN_HOME=/oracle/Middleware/user_projects/domains/promeapps
export OHS_INSTANCE=/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/OHS/instances/ohs1
export ORACLE_HOME=/oracle/Middleware
export ORACLE_INSTANCE=/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/FORMS/instances/forms1
export ORACLE_REPORTS=/oracle/Middleware/user_projects/domains/promeapps/reports
export ORACLE_PATH=/oracle/Middleware/oracle_common/common/sql
export ORACLE_TERM=xterm
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
export LANG=en_US.UTF-8
export TNS_ADMIN=$ORACLE_HOME/network/admin
export DISPLAY=:0.0
export ORA_NLS11=$ORACLE_HOME/nls/data
export PATH=$ORACLE_HOME/bin:$ORACLE_REPORTS/bin:$ORACLE_INSTANCE/bin:/usr/bin:/bin:/usr/local/bin/:$PATH
export WL_DOMAIN=promeapps
export DEFAULTENV=/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/oracle_common/jdk/jre/lib/amd64/native_threads:$ORACLE_HOME/oracle_common/jdk/jre/lib/amd64/server:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export CLASSPATH=$ORACLE_HOME/oracle_common/jdk/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib:$CLASSPATH
export THREADS_FLAGS=native
export TEMP=/tmp
export TMPDIR=/tmp
export USER=orapro

Ahora nos dirigiremos a la siguiente ruta:

/oracle/Middleware/bin/

Dentro nos debemos conectar a la base de datos:

sqlplus /nolog

Una vez logueado como system corremos los siguientes comandos:

CREATE USER webutil identified by Password1
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp01;

GRANT CONNECT, CREATE PROCEDURE, CREATE PUBLIC SYNONYM TO webutil;
GRANT RESOURCE, CONNECT TO webutil;

Posterior de haber creado el usuario debemos desloguearnos y loguearnos a la base de datos con el usuario webutil.

sqlplus /nolog
connect webutil/Password1@PROD

Y procedermos a ejecutar el siguiente script:

@/oracle/Middleware/forms/create_webutil_db.sql

Ahora nos volveremos a conectar a la BD con el usuario y contraseña webutil y correremos:

@/oracle/Middleware/forms/wu_fileupload_db_demo.sql

Ahora salimos y nos dirigiremos a la siguiente ruta:

/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config

Ahí vamos a configurar el archivo formsweb.cfg, pero antes de configurarlo, sacarle un backup

Ahora lo abrimos y debemos agregar los archivos frmwebutil.jar y jacob.jar al parámetro WebUtilArchive en caso de que no se encuentren.

2. En este mismo documento formsweb.cfg especificaremos la forma webutil_demo.fmx al parámetro form:

3. Ahora procederemos a exportar la variable DISPLAY

export DISPLAY=:0.0

Luego nos logueamos como usuario root

Ejecutaremos los siguientes comandos:

export DISPLAY=:0.0
xhost +

Inmediatamente después de esto nos logueamos como usuario Oracle

  • Posterior a ello vamos a compilar los siguientes archivos, en la siguiente ruta:

/oracle/Middleware/forms

Colocaremos los siguientes commandos:

frmcmp module=webutil.pll module_type=library userid=webutil/Passwordcoope1@desabd_n compile_all=yes

Y también compilaremos:

frmcmp module=webutil_demo.fmb  module_type=form userid=webutil/Passwordcoope1@desabd_n compile_all=yes

De esta manera Webutil_demo quedará configurado.

Creación de cluster de reptools y reports servers

Primeramente antes de crear la configuración de los servidores de reportes, es necesario corregir un problema de librerías que sucede en Oracle Linxu 7, para ello únicamente es necesario ejecutar los siguientes comandos:

[root@server] cd /usr/lib64
[root@server] ls libXm.so*
libXm.so.4  libXm.so.4.0.4
[root@server] ln -s /usr/lib64/libXm.so.4 libXm.so.3

Ahora, procederemos a ir a la máquina del adminserver a la siguiente ruta:

/oracle/Middleware/oracle_common/common/bin

Dentro ejecutaremos el script ./wlst.sh, esto nos abrirá la herramienta llamada Weblogic Scripting Tool, una interfaz para administrar por línea de comandos el servidor de Weblogic.

Dentro nos conectaremos al weblogic con el siguiente comando:

connect('weblogic','pruebas123','SA-CAPWLA-01:7003')

Luego de conectado iremos ejecutando uno a uno los siguientes comandos:

createReportsToolsInstance(instanceName='reptoolpromeapps1',machine='SA-CAPWLA-02')
createReportsServerInstance(instanceName='rep_SACAPWLA02_01',machine='SA-CAPWLA-02')

createReportsToolsInstance(instanceName='reptoolpromeapps2',machine='SA-CAPWLA-03')
createReportsServerInstance(instanceName='rep_SACAPWLA03_01',machine='SA-CAPWLA-03')

createReportsToolsInstance(instanceName='reptoolpromeapps3',machine='SA-CAPWLA-04')
createReportsServerInstance(instanceName='rep_SACAPWLA04_01',machine='SA-CAPWLA-04')

De esta manera crearemos un reptools y un servidor de reportes para cada instancia de forms and reports:

  • rep_SACAPWLA02_01 para la máquina SA-CAPWLA-02
  • rep_SACAPWLA03_01 para la máquina SA-CAPWLA-03
  • rep_SACAPWLA04_01 para la máquina SA-CAPWLA-04

Como en la siguiente imagen:

Posterior a esto, realizaremos algunas configuración antes de iniciar los servidores de reportes, iremos a la siguiente ruta:

/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_REPORTS1/applications/reports_12.2.1/configuration

Respaldamos el archivo rwservlet.properties y luego lo editamos:

vi rwservlet.properties

Agregamos la siguiente línea:

Luego iremos a esta siguiente ruta:

cd /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/ReportsServerComponent/rep_SACAPWLA02_01

Respaldamos rwserver.conf y luego lo editamos:

Comentaremos la siguiente línea:

De manera que quede así:

Luego sustituya:  <!–job jobType=»report» engineId=»rwEng» securityId=»rwJaznSec»/–> por <job jobType=»report» engineId=»rwEng»/> de modo que quede así:

Luego de esto debemos reiniciar los WLS_REPORTS de todos los nodos y luego iniciarlos nuevamente, cada node manager deberá estar arriba y desde el nodo del AdminServer deberemos ejecutar los siguientes comandos, esto nos solicitará la constraseña del NodeManager y la almacenará en la configuración para que ya no la solicite.

cd $DOMAIN_HOME/bin

./startComponente.sh rep_SACAPWLA02_01 storeUserConfig
./startComponente.sh rep_SACAPWLA03_01 storeUserConfig
./startComponente.sh rep_SACAPWLA04_01 storeUserConfig

Luego probaremos el acceso a cada servidor de reportes:

Configuración de cluster de servidores de reportes en los 3 nodos usando un clustername

Después de haber creado los servidores de reportes debemos ir a la siguiente ruta para crear el cluster:

cd /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_REPORTS1/applications/reports_12.2.1/configuration

Dentro debemos realizar un backup del archivo rwservlet.properties y luego abrir el archivo para trabajar en él, se hará en todos los nodos menos en el admin server, debemos agregar y modificar lo siguiente:

Debemos tener en cuenta que en la configuración del cluster solo se colocan los nodos de los demás reports server que no existan en el servidor localmente:

El nombre del cluster debe ser el mismo para todos.

Nodo 1:

Nodo 2:

Nodo 3:

Configuración de repositorio de jobs en la base de datos para el cluster de reports

Para la configuración de los archivos siguientes, se siguió la nota Doc ID 2098657.1 donde se específica como habilitar la base de datos como repositorio de jobs para el cluster de reports:

Primeramente debemos crear un nuevo usuario en la base de datos:

create user weblogrep12 identified by "wl11$prod" default tablespace users quota unlimited on users;
grant create table to weblogrep12;
grant create view to weblogrep12;
grant create trigger to weblogrep12;
grant create procedure to weblogrep12;
grant create sequence to weblogrep12;

Luego debemos ir a la siguiente ruta y conectarnos con este usuario a la base de datos y ejecutar el siguiente script:

cd $ORACLE_HOME\reports\admin\sql

Ingresamos por sql plus y ejecutamos el script rw_server.sql

Ahora debemos ingresar al Enterprise Manager, luego en el menú desplegable elegir seguridad y credenciales.

Crearemos un Map llamado reports:

Luego de creado seleccionamos crear clave:

Lo llenaremos con los siguientes datos:

Colocamos los datos del usuario weblogrep12 que creamos en la base de datos con su respectiva contraseña.

Ahora iremos a configurar los 2 tipos de report server que tenemos, en el menú desplegable debemos ir a Explorador de MBean del sistema:

Nota: Existen 2 tipos de servidores de reportes, los Standalone que son los que iniciamos usando el nodemanager y los in-process, estos se iniciarán automáticamente al iniciarl el WLS_REPORTS.

Standalone:

En el menú lateral debemos ir a Mbeans de Configuración -> oracle.reports.serverconfig -> ReportsServer ->  rwserver-[REPORTS SERVER NAME].

Para agregar el área de folderaccess, jobRepository y jobStatusRepository debemos tocar solo el archivo e ir a la sección de operaciones:

Elegir las secciones que necesitamos en nuestro archivo, seleccionarla y luego en la siguiente pantalla presionar el botón de call.

Luego de tener las secciones que necesitamos debemos refrescar la página y desplegar la flecha al costado del rwserver de nuestro rwserver:

Debemos ir a la carpeta JobRepository y JobStatusRepository, vamos al apartado de operaciones y tocamos addProperty para agregar los parámetros, agregaremos los siguientes en ambos jobs:

<property name="dbuser" value="weblogrep12"/>
<property name="dbpassword" value="csf:reports:reports_wl"/>
<property name="dbconn" value="baseprod:1529/prod"/>

Debemos tener en cuenta que el parámetro dbpassword debe tener el nombre de la carpeta de credenciales y la clave iguales a las que creamos.

Luego de ello podemos continuar con la edición de todo el archivo rwserver, de modo que quedé de la siguiente manera:

<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="http://xmlns.oracle.com/reports/server" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <cache class="oracle.reports.cache.RWCache">
      <property name="cacheSize" value="50"/>
      <property name="maxCacheFileNumber" value="10"/>
      <property name="cacheDir" value="/app/reportes"/>
   </cache>
   <engine class="oracle.reports.urlengine.URLEngineImpl" engLife="50" id="rwURLEng" maxEngine="1" minEngine="0"/>
   <security class="oracle.reports.server.RWJAZNSecurity" id="rwJaznSec"/>
   <destination class="oracle.reports.plugin.destination.ftp.DesFTP" destype="ftp"/>
   <destination class="oracle.reports.plugin.destination.webdav.DesWebDAV" destype="WebDav"/>
   <job engineId="rwEng" jobType="report"/>
   <job engineId="rwURLEng" jobType="rwurl"/>
   <notification class="oracle.reports.server.MailNotify" id="mailNotify">
      <property name="succnotefile" value="succnote.txt"/>
      <property name="failnotefile" value="failnote.txt"/>
   </notification>
   <jobStatusRepository>
      <property name="dbuser" value="weblogrep12"/>
      <property name="dbconn" value="baseprod:1529/prod"/>
      <property name="dbpassword" value="csf:reports:reports_wl"/>
   </jobStatusRepository>
   <jobRepository>
      <property name="dbuser" value="weblogrep12"/>
      <property name="dbconn" value="baseprod:1529/prod"/>
      <property name="dbpassword" value="csf:reports:reports_wl"/>
   </jobRepository>
   <connection idleTimeOut="15" maxConnect="200"/>
   <queue maxQueueSize="1000"/>
   <folderAccess>
      <write>/app/reportes</write>
   </folderAccess>
   <proxyInfo>
      <proxyServers>
         <proxyServer name="$$Self.proxyHost$$" port="$$Self.proxyPort$$" protocol="all"/>
      </proxyServers>
      <bypassProxy>
         <domain>$$Self.proxyByPass$$</domain>
      </bypassProxy>
   </proxyInfo>
   <pluginParam value="%MAILSERVER_NAME%" name="mailServer"/>
</server>

In-process:

En el menú lateral debemos ir a Mbeans Definidos por la Aplicación ->oracle.reportsApp.config -> Server:WLS_REPORTS -> Application:reports -> ReportsApp -> rwserver

Para agregar el área de folderaccess, jobRepository y jobStatusRepository debemos tocar solo el archivo e ir a la sección de operaciones:

Elegir las secciones que necesitamos en nuestro archivo, seleccionarla y luego en la siguiente pantalla presionar el botón de call.

Luego de tener las secciones que necesitamos debemos refrescar la página y desplegar la flecha al costado del rwserver de nuestro rwserver:

Debemos ir a la carpeta JobRepository y JobStatusRepository, vamos al apartado de operaciones y tocamos addProperty para agregar los parámetros, agregaremos los siguientes en ambos jobs:

<property name="dbuser" value="weblogrep12"/>
<property name="dbpassword" value="csf:reports:reports_wl"/>
<property name="dbconn" value="baseprod:1529/prod"/>

Debemos tener en cuenta que el parámetro dbpassword debe tener el nombre de la carpeta de credenciales y la clave iguales a las que creamos.

Luego de ello podemos continuar con la edición de todo el archivo rwserver, de modo que quede de la siguiente manera:

<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="http://xmlns.oracle.com/reports/server" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <cache class="oracle.reports.cache.RWCache">
      <property name="cacheSize" value="50"/>
      <property name="cacheDir" value="/app/reportes"/>
      <property name="maxCacheFileNumber" value="10"/>
   </cache>
   <engine class="oracle.reports.engine.EngineImpl" engLife="50" id="rwEng" initEngine="8" maxEngine="40" maxIdle="60" minEngin
e="8"/>
   <engine class="oracle.reports.urlengine.URLEngineImpl" engLife="50" id="rwURLEng" maxEngine="1" minEngine="0"/>
   <security class="oracle.reports.server.RWJAZNSecurity" id="rwJaznSec"/>
   <destination class="oracle.reports.plugin.destination.ftp.DesFTP" destype="ftp"/>
   <destination class="oracle.reports.plugin.destination.webdav.DesWebDAV" destype="WebDav"/>
   <job engineId="rwEng" jobType="report"/>
   <job engineId="rwURLEng" jobType="rwurl"/>
   <notification class="oracle.reports.server.MailNotify" id="mailNotify">
      <property name="succnotefile" value="succnote.txt"/>
      <property name="failnotefile" value="failnote.txt"/>
   </notification>
   <jobStatusRepository class="oracle.reports.server.JobRepositoryDB">
 	  <property name="dbuser" value="weblogrep12"/>
      <property name="dbconn" value="baseprod:1529/prod"/>
      <property name="dbpassword" value="csf:reports:reports_wl"/>
   </jobStatusRepository>
   <jobRepository>
      <property name="dbuser" value="weblogrep12"/>
      <property name="dbconn" value="baseprod:1529/prod"/>
      <property name="dbpassword" value="csf:reports:reports_wl"/>
   </jobRepository>
   <connection idleTimeOut="15" maxConnect="200"/>
   <queue maxQueueSize="1000"/>
   <folderAccess>
      <read>/app/*</read>
      <write>/app/*</write>
   </folderAccess>
   <proxyInfo>
      <proxyServers>
         <proxyServer name="$$Self.proxyHost$$" port="$$Self.proxyPort$$" protocol="all"/>
      </proxyServers>
      <bypassProxy>
         <domain>$$Self.proxyByPass$$</domain>
      </bypassProxy>
   </proxyInfo>
   <pluginParam value="%MAILSERVER_NAME%" name="mailServer"/>
</server>

Asegurarse de crear la clase class=»oracle.reports.server.JobRepositoryDB» en el jobStatusRepository ya que en standalone no lo creamos pero en In-process sí.

Ahora debemos reiniciar nuestras instancias de WLS_REPORTS.

Por último para verificar que todo este funcionando podemos ejecutar los siguientes comandos en la base de datos:

SQL> select count(*) from RW_SERVER_JOB_QUEUE;
or
SQL> select count(*) from RW_SERVER_QUEUE;

En caso de tener algún acceso denegado o problemas con el key al levantar el WLS_REPORTS podemos validar esta nota:

Doc ID 1675769.1

Debemos recordar que ahora al ser un ambiente cluster la instancia de reportes se administra por el WLS_REPORTS y ya no en una instancia separada, esto se logró cuando cambiamos el nombre del server en el rwservlet.properties mientras realizabamos el cluster.

Se puede validar mayor información en la siguiente nota:

Doc ID 2215476.1

Configuración de OHS

Debemos ingresar al Enterprise Manager, en el menú lateral desplegable ingresar al ohs respectivo de cada instancia:

Cambiar los puertos 7777 a 7780:

Aplicar los cambios y reiniciar el ohs usando el Enterprise Manager.

Por último, realizaremos una configuración para que el OHS funcione todo atraves de un mismo puerto, en este caso el 8001 para forms y el 8002 para reports.

Para ello, debemos ir a /oracle/Middleware/forms/templates/config/forms.conf esto en caso nodo de forms and reports.

Dentro del archivo agregaremos lo siguiente:

Cambiaremos el host respectivo dependiendo del servidor.

Y luego nos iremos a la siguiente ruta: /oracle/Middleware/reports/conf/reports_ohs.conf

Agregaremos lo siguiente:

Cambiaremos el host dependiendo el servidor respectivamente.

Luego de hacer esto, debemos copiar los archivos a las siguientes ruta:

cp forms.conf /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/OHS/instances/ohs1/moduleconf/

cp reports_ohs.conf /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/OHS/instances/ohs1/moduleconf/

Por último, nos conectamos al Enterprise Manager y reiniciamos los OHS nuevamente.

Tips y configuraciones extras

Al llegar acá usted ya tendrá todo su ambiente de Oracle forms and reports 12c en un cluster de 3 nodos y un nodo con el AdminServer aparte funcionando correctamente, sin embargo, el resto de configuraciones como rutas hacía las formas, menús y reportes, usted deberá configurarlas, es por ello que le dejo algunos tips para hacerlo:

  • Los 3 nodos de forms and reports, deben de ver la ruta en donde se encuentren las formas, menús y reportes, es por ello que recomiendo usar una ruta compartida entre todos los nodos para que pueda cambiar o actualizar la forma una vez y ya se aplique para todo el ambiente.
  • Toda configuración de inicio o apagado en un ambiente cluster, se recomienda realizarlo desde la consola de Weblogic o bien desde el Enterprise Manager.
  • Para configurar la ruta de las formas, lo puede hacer usando la variable FORMS_PATH.
  • Recuerde que para iniciar todo el ambiente, solo es necesario ejecutar el script startWebLogic.sh en el nodo del AdminServer y levantar todos los nodemanagers tanto del AdminServer como de los nodos de forms and reports, con eso podrá iniciar todo desde la consola de Weblogic.

Cualquier duda o consulta, déjala en los comentarios y con gusto les responderé.

2 respuestas a «Instalación completa de Oracle Forms & Reports 12c en un Clúster de 3 Nodos con Alta Disponibilidad!»

  1. Very Good guide. I have a Oracle RAC DB on proxmox Cluster VMs. Is there any guide to incorporate load balancer for Weblogic domain and Forms cluster. Because forms cluster makes two separate addresses to access applications. I need a setup with load balancer with a cluster of forms and reports operating on a RAC database in proxmox with ceph environment

    1. When you set up the Forms and Report repository, you must point to the URL of the RAC no to a single node, thus configuring Forms with the database RAC

      Also, if you want to unify the addresses of Forms, you can configure a HA Proxy Balance, this will unify the addresses using a virtual IP, if you want I have a document explaining how to implement, Write me to oracle.max.consultor@gmail.com I will share it with you                                                                  

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *