Archive for the ‘Arquitectura de Software’ Category

Crear la base de datos en linea de comando

miércoles, abril 24th, 2013

Luego de la instalación de Oracle, no termina el uso de la linea de mando, debido a que la instalación de oracle en modo silencioso no crea la base de datos. Para quienes han instalado a través del modo grafico recordarán que la creación de la base de datos es parte del proceso de instalación. En este caso no, solo instalamos el software, de ahí en adelante nos toca crear la base de datos, para lo cual utilizamos el comando dbca de la siguiente forma

[root@arocl ]$su - oracle
[oracle@arocl bin]$ ./dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname oinstall -sid orcl -responseFile NO_VALUE -characterSet AL32UTF8 -memoryPercentage 30 -emConfiguration LOCAL
Introduzca la contraseña de usuario SYS: 
 
Introduzca la contraseña de usuario SYSTEM: 
 
Introduzca la contraseña de usuario DBSNMP: 
 
Introduzca la contraseña de usuario SYSMAN: 
 
Copiando archivos de base de datos
1% terminado
3% terminado
11% terminado
18% terminado
26% terminado
37% terminado
Creando e iniciando instancia Oracle
40% terminado
45% terminado
50% terminado
55% terminado
56% terminado
60% terminado
62% terminado
Terminando creación de base de datos
66% terminado
70% terminado
73% terminado
85% terminado
96% terminado
100% terminado
Para obtener información detallada, consulte el archivo log "/u01/app/oracle/cfgtoollogs/dbca/oinstall/oinstall.log".

Instalando Oracle 11G/12c a línea de mando (Silent Mode)

miércoles, abril 24th, 2013

La verdad es que desde hace un tiempo las instalaciones de Oracle se pueden hacer en modo gráfico «como en Windows» pero para aquellos que estamos acostumbrados al modo texto o lisa y llanamente solo podemos utilizar un terminal a línea de mando, es util tener el conocimiento de co mo instalar Oracle de esta forma.

Preparación

Bien es cierto que la linea para ejecutar en modo silent es conocida, es necesario crear los usuarios y las carpetas necesarias para una instalación adecuada. Para ello debes primer crear los usuarios que se requieren para la instalación y ejecución de la base de datos.

groupadd oinstall
groupadd dba
groupadd oper
useradd -g oinstall -G dba,oper oracle

Aunque es obvio, si estas leyendo esto es porque tienes los archivos de instalación

unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip


Actualizacion (24-09-2015)
Por mi parte encuentro conveniente mover la carpeta descomprimida a /tmp, este articulo presume que los archivos de instalación estan en esta carpeta, por lo tanto en la carpeta que se descomprimió oracle debes aplicar

mv database/ /tmp
cd /tmp

Esto te genera una carpeta database/ en la ruta en donde descomprimiste. Para ejecutar el instalador como el usuario oracle es necesario dar los permisos necesarios

chown -R oracle.oinstall database/ 

Debes además crear las carpetas necesarias que utiliza inicialmente el instalador de Oracle, luego de crearlas en comando creará todas las subcarpetas, obviamente si se le dan los permisos adecuados.

mkdir /u01
chown -R oracle.oinstall /u01 
mkdir -p /u01/app
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app

Asegurarse que estan instalados los paquetes necesarios que utiliza Oracle

yum -y install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel gcc gcc-c++ libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel  mksh

En este punto la unica discrepancia que tengo con el instalador es que igual, en un ambiente 64bits te reclama como necesarias ciertas librerías i386, que en rigor si estan instalados pero para 64bits.

Establecer los requerimientos mínimos exigidos por oracle (en su instalador de 64bits). Estas lineas las puedes establecer al final del archivo, fijandote previamente que alguna de estas variables no este establecida con anterioridad.

vi /etc/sysctl.conf
kernel.shmmax = 2147483648
kernel.shmall = 2097152
kernel.shmmni=4096
kernel.sem=250 32000 100 128
fs.file-max=6815744
net.ipv4.ip_local_port_range=9000 65500
net.core.rmem_default=1048576
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
fs.aio-max-nr=1048576

Para volcar estos parametros sin reiniciar (¡gracias Linux!) ejecutar

/sbin/sysctl -p

Editar adicionalmente 3 archivos, uno para establecer los limites de archivos

vi /etc/security/limits.conf
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536

Editar la seguridad para el logeo de usuarios de la máquina

vi /etc/pam.d/login
session    required     /lib/security/pam_limits.so
session    required     pam_limits.so

Editar profile (añadir al final) para establecer ciertos limites necesarios.

vi /etc/profile
if [ $USER = "oracle" ]; then
        if [ $SHELL = "/bin/ksh" ]; then
              ulimit -p 16384
              ulimit -n 65536
        else
              ulimit -u 16384 -n 65536
        fi
fi

Instalar Oracle

Y ahora instalar oracle

Crea un archivo en /etc o en /var/opt/oracle

[root@arocl ~]# vi /etc/oraInst.loc
inventory_loc=/tmp/oraInventory
inst_group=oinstall
su - oracle

y correr (situate en la carpeta donde descomprimiste oracle)

Actualizacion (24-09-2015)

cd /tmp/database


Actualizacion (12-04-2016)
Para el caso que estes instalando Oracle 12c entonces debes agregar

oracle.install.db.BACKUPDBA_GROUP=dba \
oracle.install.db.DGDBA_GROUP=dba \
oracle.install.db.KMDBA_GROUP=dba \

./runInstaller -silent -force -ignoreSysPrereqs -ignorePrereq \
FROM_LOCATION=/tmp/database/stage/products.xml \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=/tmp/oraInventory \
ORACLE_HOME=/u01/app/oracle/product/11.2/db_1 \
ORACLE_HOME_NAME="OraDb11g_Home1" \
ORACLE_BASE=/u01/app/oracle \
oracle.install.db.InstallEdition=SE \
oracle.install.db.isCustomInstall=false \
oracle.install.db.DBA_GROUP=dba \
oracle.install.db.OPER_GROUP=dba \
DECLINE_SECURITY_UPDATES=true

Y finaliza ejecutando

/u01/app/oracle/product/11.2/db_1/root.sh


Actualizacion (24-09-2015)
Pasos siguientes
Luego de instalar la base de datos deben seguirse ciertos pasos para completar la generación y conexión a una instancia:
Establecer la variables de entorno para Oracle
Crear una base de datos
Crear el listener

Problemas

[INS-06101] No se ha podido determinar la dirección IP del host local

Para esto debes fijarte si en el archivo /etc/hosts y en el archivo /etc/sysconfig/network este establecido el nombre del hostname

En mi caso

[root@arocl ~]# vi /etc/hosts
127.0.0.1   arocl localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         arocl localhost localhost.localdomain localhost6 localhost6.localdomain6

[root@arocl ~]more /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=arocl

[INS-32035] No se ha podido crear un nuevo inventario central en la ubicación especificada

Crea un archivo en /etc o en /var/opt/oracle

[root@arocl ~]# vi /etc/oraInst.loc
inventory_loc=/home/oracle/oraInventory
inst_group=oinstall

[INS-13013] El entorno de destino no cumple algunos requisitos obligatorios

Este es el error que no me gusta el log señala

	
INFO: Error Message:PRVF-7573 : El tamaño de intercambio suficiente no está disponible en el nodo "arocl" [Se necesita = 15,56GB (1.6316164E7KB) ; Se ha encontrado = 8GB (8388600.0KB)]
INFO: Error Message:PRVF-7543 : El parámetro del núcleo del sistema operativo "ip_local_port_range" no tiene un valor adecuado en el nodo "arocl" [Se esperaba = "between 9000 & 65500" ; Se ha encontrado = "between 9000 & 65000"]
INFO: Error Message:PRVF-7532 : Falta el paquete "libaio-0.3.105 (i386)" en el nodo "arocl"
INFO: Error Message:PRVF-7532 : Falta el paquete "glibc-2.3.4-2.41 (i686)" en el nodo "arocl"
INFO: Error Message:PRVF-7532 : Falta el paquete "compat-libstdc++-33-3.2.3 (i386)" en el nodo "arocl"
INFO: Error Message:PRVF-7532 : Falta el paquete "libaio-devel-0.3.105 (i386)" en el nodo "arocl"
INFO: Error Message:PRVF-7532 : Falta el paquete "libgcc-3.4.6 (i386)" en el nodo "arocl"
INFO: Error Message:PRVF-7532 : Falta el paquete "libstdc++-3.4.6 (i386)" en el nodo "arocl"
INFO: Error Message:PRVF-7532 : Falta el paquete "unixODBC-2.2.11 (i386)" en el nodo "arocl"
INFO: Error Message:PRVF-7532 : Falta el paquete "unixODBC-devel-2.2.11 (i386)" en el nodo "arocl"
INFO: Error Message:PRVF-7532 : Falta el paquete "pdksh-5.2.14" en el nodo "arocl"

Esto para mi es raro, debido a que estoy en un ambiente 64bits, por lo cual nota que este comando esta aplicado con los parametros -ignoreSysPrereqs -ignorePrereq, esto se salta cualquier validacion de sistema y de librerías.

En este caso es justificado.


Actualizacion (12-04-2016)

[FATAL] [INS-35344] No se ha especificado el valor para Database Backup and Recovery (OSBACKUPDBA) group.


Para el caso que estes instlanmdo Oracle 12c y te aparezca este error implica que debes adicionar a la linea de instalacion

Comprendiendo la necesidad del versionamiento (2)

miércoles, marzo 27th, 2013

El proceso

Inicialmente existe uno o varios requerimientos que deben ser agrupados por el usuario o jefe de un proyecto (quien es el encargado de dar la prioridad a las necesidades del usuario). Ahí define la funcionalidad que uno o un grupo de requerimientos genera, y le encarga la tarea a un desarrollador.

El desarrollador debiese descargar la ultima version de desarrollo, generar los cambios de uno o más archivos, y comprometer al repositorio de codigo con alguna forma identificadora de la funcionalidad.

sc0000

Con esto el desarrollador hace su liberación.

La persona encargada de QA debe descargar un copia de la ultima version de produccion, compila, ejecuta, hace las pruebas y da su veredicto. si la aprueba, se genera una version QA con la funcionalidad, sino, se devuelve al desarrollador.

sc0002

Finalmente el encargado de generar el release, segun la planificcion o roadmap de la aplicacion se da el momento de fusionar todas las funcionalidades liberadas y que existan en QA ya probadas y liberadas. Esta construccion debiese ser limpia debido a que las funcionalidades no son dependientes unas de otras, eso es la idea que se transmitió al principio.

Con lo cual se tiene mas o menos lo siguiente

sc0003

Comprendiendo la necesidad del versionamiento

miércoles, marzo 27th, 2013

En muchos momentos he tenido que hacer entender a gente no informática que existe la necesidad de versionar lo que hacemos como proyecto debido a que de un punto al siguiente existen avances, y por ende modificaciones al original. Por lo tanto un ‘artefacto’ evoluciona a través del tiempo para perfeccionarse y llegar a ver la luz como el requerimiento que fue solicitado.

El problema me ocurre también con gente que si es informática, o sea, tampoco entienden porque existe esta necesidad y ven que es sólo una pérdida de tiempo. Aquí va una manito…

La situación

En general el desarrollador crea una version un archivo de código fuente de desarrollo, que luego debe ser probada por otros para asegurar la calidad (QA, de Quality Assurance) y ellos a su vez dan el paso a producción, algo más o menos así(perdon el dibujo a mano, pero carezco de tiempo, y me es más rápido así):

IMG_0009

Ahora bien, existen distintos tipos de modificaciones dentro de desarrollo: nuevos desarrollos, optimizaciones, correcciones de errores, etc. Todos atacan alguna funcionalidad específica. Lo que hay que tener claro es que el desarrollador programa una funcionalidad y una funcionalidad puede estar compuesta de más de un requerimiento que para el caso de la funcionalidad son indivisibles. Algo que se puede representar asi:

sc0001

Hay que tener cuidado en definir entonces los requerimientos y funcionalidades, en el primer caso no todo es indivisible, ya que 2 requerimientos pueden ser muy cercanos lo que no necesariamente los hace inidivisibles, quizas los puede hacer dependientes pero no indivisible, por ejemplo para calcular un bono de reconocimiento en Chile (un instrumento financiero) es necesario calcular la UF, el calculo de la UF es un requerimiento del cuan el calculo del bono depende, pero el calculo de la UF puede ser vista de forma independiente del calculo del bono.

Entonces, cuando un desarrollador termina una funcionalidad, recien entonces esa funcionalidad puede ‘pasarse’ a QA para que la revise. Este ‘pasarse’ implica pasar todos los archivos de codigo, scripts y configuraciones necesarias para la correcta ejecucion de la funcionalidad. QA lo revisa, lo acepta o lo rechaza, si lo acepta la funcionalidad, o sea, todos los archivos y configuraciones necesarias quedan a la espera de ser fusionadas con la version de produccion para generar un release productivo.

Si lo rechaza es otro cuento, debido a que la funcionalidad se ‘saca’ de la version de QA y no pasara al release, es aqui donde se debe poseer un proceso adecuado para que no se ‘ensucien’ las liberaciones de las funcionalidades junto con otras, este control es el que debe ser cuidadoso. Es aqui donde aparece el control de versiones y el proceso de versionamiento de software.

(Continuará…)

¿Porqué SOA?

viernes, enero 4th, 2013

Yo creo que SOA más que una evolución natural de las TI fue una necesidad. Muchos alumnos me preguntan más de una vez porque las empresas tienen distintos sistemas para lo mismo, bases de datos de clientes no consolidadas, cosas en donde la teoría nos indica que esta mal pensado o mal construido.

La verdad es que los negocios se mueven por si solos, y obligan a que la tecnología se adapte. O sea, muchas veces cuando una multinacional llega a un pais elige a una o mas empresas para comprar, cada una de las cuales tiene lineamientos TI distintos, lo que implica que luego de la compra hay que proveer recursos para fusionar bases de datos, eliminar productos por el licenciamiento, etc.

SOA aqui llega como ayuda para que todas estas integraciones puedan provocarse, para TI el argumento debe ir por

Reuso. O sea, crear nuevos procesos de forma rápida.
Composición. La capacidad de alterar un proceso de negocio de forma rapida y rentable.
La capacidad de cambiar un sistema incrementalmente. Cambiar de proveedores, extender servicios, modificar proveedores y consumidores de servicios.
La capacidad de construir un sistema incrementalmente. Esta es una de las bondades de SOA.

Pero quiero ir más alla, creo que convencer a TI no es lo díficil, sino que en un plano gerencial, responder a la pregunta ¿porque SOA? no tiene los mismos argumentos, pero si la misma raíz.

Reducción de costos en el desarrollo de sistemas. Si la empresa se orienta a los servicios una de las primeras cosas que debe definir son los datos empresariales, obligando a la empresa a conocerse a si misma. Lo que provoca un estudio de los procesos de negocio. Teniendo esto como base, la inserción de un nuevo sistema será con un menor costo, ya que los procesos serán conocidos y las estructuras también

Reducción del ‘Time to market’. El reuso de servicios empresariales, además de la reutilización de las entidades empresariales (o datos de empresa) reducen el tiempo de desarrollo de un nuevo sistema, debido a que este se adhiere a las normativas creadas, pero además reutiliza servicios se negocio o procesos de negocio, logrando una sinergía de sistemas.

Procesos de negocio adaptable a cambios. Uno de los aplicativos muy ligados a SOA son los BPM (Bussiness Process Modeler), para quienes hemos trabajado con estas herramientas, la posibilidad de tener un repositorio de servicios granular posibilita la construcción de procesos de negocio de forma rápida es más cercana cuando existe una implantación de SOA bien manejada. Además de una creación rápida, las modificaciones son tanto más rapidas que permite una mejor adaptación a los negocios.

Mejora en la experiencia del Cliente. El tener mejores procesos, poder tener la capacidad de ofrecer servicios multicanal, debido a la reutilización tecnológica, cae a través del tiempo en una mejor percepción de los clientes a los cuales está focalizado el servicio.

Ahora bien, para implantar SOA debes seguir ciertos pasos. No esperes pasar de un día para otro a SOA si no existen definiciones de negocio claras, creo que el primer paso de una empresa es conocerse a sí misma (en cuanto a datos y procesos) antes de querer hacer algo.

Generar un Certificate Singing Request (CSR)

miércoles, diciembre 19th, 2012

Previo a generar un certificado para instalar en los servidores ypara algunas empresas certificadoras se debe generar el Certificate Signing Request lo que significa que se genera la parte privada de la llave que guardarás recelosamente, más la parte pública que es la que se distribuye. Esto se puede hacer con openssl de la siguiente forma

openssl req -new -nodes -keyout myserver.key -out server.csr -newkey rsa:2048

Te preguntará

Country Name (2 letter code) [US]: CL
State or Province Name (full name) []: Santiago
Locality Name (eg, city) []: Santiago
Organization Name (eg, company) []: Nombre de la compañía
Organizational Unit Name (eg, section) []: Departamento que lo requiere
Common Name (eg, YOUR name) []: seguro.servidor.cl
Email Address []:

Adicionalmente puede solicitarte dos campos más que son opcionales. Con esto se genera un .key y un archivo .csr, el .key debe ser guardado, el CSR es el que se le transmite a la entidad certificadora.