domingo, 22 de abril de 2012

Recuperación controlador de dominio - Windows 2003 Server

Muchos pensaran que a estas alturas hablar del sistema operativo Windows 2003 Server es cosa del pasado, ya que poco a poco aumenta la cobertura del Windows 2008, sin embargo pasaran algunos años mas para que las empresas realicen esta migración.

Centrémonos entonces en como recuperar el servidor de dominio principal (maestro de operaciones) en caso de que este sufra algún daño. Para los que no saben es INDISPENSABLE que en el dominio exista por lo menos 1 un servidor que sirva de contingencia (controlador de dominio secundario).


martes, 17 de abril de 2012

Juicio Oracle Google


En algunas ocasiones el mundo de la tecnología es tan vertiginoso, que a veces se nos escapan noticias, detalles, avances, en fin. Yo por ejemplo no recordaba lo del juicio de Oracle vs Google, la cual es la noticia mas importante esta semana a nivel mundial. Quien lo diria, dos grandes de la historia tecnológica enfrentados en situaciones legales, claro que cuando hay dinero, mucho dinero de por medio, pues esto no debe sorprender.


lunes, 16 de abril de 2012

Características de un Datawarehouse

En Internet existe demasiada teoría acerca de Datamarts y Datawarehouse, lo que resulta a veces complejo entender toda esta información para llevarla a la práctica. A continuación, enunciaré algunas características de un Datawarehouse, lo cual ayudará a mejorar los conocimientos para aquellos que no tienen un concepto claro sobre este tema. Cabe recalcar que el buen diseño de un Datawarehouse, garantiza el funcionamiento de un proyecto con Business Inteligence.

Un Datawarehouse, como su nombre lo indica, es una bodega de datos en la cual se almacena información con el fin de realizar consultas, reportes y análisis. Estos contienen datos históricos, derivados de datos transaccionales. 

Existen bases de datos, que por ejemplo guardan información diariamente acerca de las ventas de las compañias, si verificamos las tablas involucradas en el proceso, encontramos informacion de varios años atrás, esta información se puede llevar al Datawarehouse, y dejar por ejemplo solo un año de información en la BD transaccional, de esta manera, las consultas en las tablas de ventas funcionarán mas rápido.

Un datawarehouse se debe construir de manera desnormalizada, esto se debe a la cantidad de datos que posee. Es decir, que las tablas que lo componen no se encuentran bajo el esquema entidad relación, claro esta que esto no quiere decir que no se utilizan llaves foráneas ni llaves primarias.

Para dejar mas claro esta parte veamos un ejemplo:


La anterior imagen muestra un clasico diseño E-R Entidad Relación, pero en la construcción de un datawarehouse, se debe usar el siguiente diseño:


El anterior diseño hace parte de algo que se llama diagrama copo de nieve, que al igual que el diagrama de estrella, son principales diagramas o estrategias que se utilizan en la construcción de cubos en un datawarehouse, y que es eso de cubos? pues un cubo es el conjunto de tablas que componen un datawarehouse, en cuanto a los componentes de un cubo, encontramos dos tipos: dimensiones y hechos. 

Cuando hablamos de dimensiones, nos referimos a estructuras que componen una o mas jerarquias que categorizan los datos. La tabla de productos anterior es un ejemplo de dimension, si quisieramos agregarle mas jerarquias podriamos incluir por ejemplo el proveedor.

La tabla de hechos, es la tabla principal donde convergen todas las dimensiones del cubo, a continuacion vemos un ejemplo básico de un cubo.



Como se puede apreciar en la anterior imagen, las dimensiones tienen un campo que es llave primaria y a su vez se relacionan a través de una llave foránea con la tabla de hechos, pero la tabla de hechos no tiene llaves primarias.

En Oracle, la construcción del cubo se realiza con la herramienta Design Center. Hasta ahora en mis proyectos solo he utilizado una tabla de hechos, aunque he visto proyectos donde dicen que han requerido mas de una. 


sábado, 14 de abril de 2012

La tabla de tiempo en un DataWarehouse

La dimension o tabla del tiempo, permite que el analisis que realizamos en las gráficas o indicadores que construimos con las herramientas de Oracle BI (Oracle Business Intelligence - Inteligencia de negocios) se pueda realizar en función de: hora, dias, meses, años, trimestres, etc.

Para construir por cuenta propia esta dimension seria una tarea algo engorrosa, es por eso que Oracle permite adicionar una Dimesion del tiempo al momento de construir el Datawarehouse por medio de la herramienta Design Center.


La tabla que se crea a partir del asistente, cuenta con muchos campos, no debemos confundirnos con esto, ya que podemos utilizar solo los campos que en verdad nos puede servir en la aplicación. Esa discriminación de los campos se puede realizar al momento de llenar la tabla (ya que esta se crea vacia), o al momento de construir el repositorio por medio del ADMINISTRATION BI TOOL, se pueden retirar los campos o columnas que quedaron vacias o que no necesitamos. Lo mas lógico es llenar esta dimension antes de empezar a insertar datos en el cubo que creamos.

Les dejo entonces un script sencillo en PL/SQL que permite llenar la dimension del tiempo:


Declare

FechaFin date;
Fecha      date;

Begin

/*Se inicializan las varibles dependiento desde y hasta que año se desea llenar
la tabla TIEMPO*/

Fecha    := to_date('2010-01-01','yyyy-MM-dd');
FechaFin := to_date('2013-12-31','yyyy-MM-dd');


WHILE Fecha < FechaFin LOOP

     DBMS_OUTPUT.PUT_LINE('Mes: ' || TO_CHAR(Fecha,'YYYYMMDD') );

     INSERT INTO TiempoQ(DIMENSION_KEY, DAY_ID, DAY, DAY_DESCRIPTION, DAY_NAME,           MONTH_OF_YEAR,
     CALENDAR_YEAR_ID, CALENDAR_MONTH_NAME, CALENDAR_MONTH_DESCRIPTION)
     SELECT
     TO_CHAR(Fecha,'YYYYMMDD'),
     TO_CHAR(Fecha,'D'),
     fecha,
     TO_CHAR(Fecha,'DY'),
     TO_CHAR(Fecha,'DY'),
     TO_CHAR(Fecha,'MM'),    
     TO_CHAR(Fecha,'YYYY'),
     TO_CHAR(Fecha,'MONTH'),
     TO_CHAR(Fecha,'YYYY-MM')
     FROM DUAL;

     SELECT Fecha+1 into Fecha from dual;
   
End loop;

End;


Si te gustó este articulo, te invitamos a que veas la publicidad al lado derecho del blog y que des clic sobre ella, te lo agradecemos.
 




martes, 24 de enero de 2012

CACHE EN ORACLE BUSINESS INTELLIGENCE

Actualización automatica del Dashboard o simplemente inhabilitar la cache.

Que tiene que ver una cosa con la otra?

Es simple, luego de crear el DataMart (Design Center), configurar el repositorio con el Administration Tool de BI, y crear cuadros de mandos y visualizarlos en pantalla por medio de las herramientas Dashboard y Answers. Cuando insertaba, actualizaba o eliminaba registros en las tablas del DataMart, la información, y en general los cuadros de mandos no se actualizaban a menos que reiniciara el servicio de OracleBI Server o realizara cambios manuales en el repositorio.
Para evitar caer en esta confusión, se debe modificar la opción de la cache del repositorio, la cual se encuentra en el archivo NQSConfig.INI


Realizar el cambio, reiniciar el servicio y listo.

martes, 10 de enero de 2012

Fallo al conectar al Centro de Control (Warehouse Builder)

RTC-5260 and RTC-5301 error in Oracle Warehouse Builder (OWB) :


El centro de control que se ejecuta desde el Design Center, es requerido para poder desplegar nuestro repositorio. Cuando aparece el mensaje error RTC-5260 y RTC-5301, significa que el servicio no esta disponible, es por eso que en una sesión de SQLPlus logueado con el usuario dueño del repositorio, en mi caso por ejemplo: OWBREPOS_OWNER (Oracle BI 10g), se debe ejecutar el siguiente comando:

@c:\oracle\bise1\owb\owb\rtp\sql\start_service.sql
Hay que tener en cuenta la ruta de instalación del Oracle BI.

Si aparece algún error enla ejecución del comando haciendo alusión a la zona horaria:
..
ORA-01882: timezone region

Se debe proceder a editar el archivo Run_Service.bat, ubicado en la ruta: C:\oracle\bise1\owb\owb\bin\win32

En este archivo se encuentra la siguiente linea:
%JAVAPATH%\jre\bin\javaw.exe %JVM_OPTIONS% -DORACLE_HOME="%RTHOME%"-DOCM_HOME="%RTHOME%" -DOCM_ORACLE_HOME="%RTHOME%" -classpath %RTHOME%\owb\bin\admin\;%RTHOME%\owb\bin\admin\launcher.jar -DOWB_HOME=%OWB_HOME% -DJDK_HOME=%JDK_HOME% -DORA_HOME=%ORA_HOME% -DOEM_HOME=%OEM_HOME% -DIAS_HOME=%IAS_HOME% Launcher %RTHOME%\owb\bin\admin\owb.classpath oracle.wh.runtime.platform.service.Service %STARTUP_TYPE% %NODEID% %RTUSER% %HOST% %PORT% %SERVICE%

Se debe agregar entonces lo siguiente: -Duser.timezone="+05:30"

Finalmente la linea debe quedar:

%JAVAPATH%\jre\bin\javaw.exe %JVM_OPTIONS% -DORACLE_HOME="%RTHOME%"
-Duser.timezone="+05:30" -DOCM_HOME="%RTHOME%" -DOCM_ORACLE_HOME="%RTHOME%" -classpath %RTHOME%\owb\bin\admin\;%RTHOME%\owb\bin\admin\launcher.jar -DOWB_HOME=%OWB_HOME% -DJDK_HOME=%JDK_HOME% -DORA_HOME=%ORA_HOME% -DOEM_HOME=%OEM_HOME% -DIAS_HOME=%IAS_HOME% Launcher %RTHOME%\owb\bin\admin\owb.classpath oracle.wh.runtime.platform.service.Service %STARTUP_TYPE% %NODEID% %RTUSER% %HOST% %PORT% %SERVICE%

Se guardan los cambios, y se ejecuta nuevamente el comando para iniciar el servicio.

Si todo salió bien, debe salir Available.



martes, 24 de mayo de 2011

Ejemplo Compilador de Números Romanos

Aquí les dejo un sencillo convertidor de números romanos a decimal, ejecuta y muestra el proceso de análisis que normalmente un compilador realiza, como es el análisis léxico, semántico, etc.

No olviden colocar el código entre las etiquetas SCRIPT y adicional crear el formulario con los campos apropiados:



 

domingo, 21 de noviembre de 2010

Problema en el arranque del LDAP en Zimbra

Zimbra LDAP problem - Unable to determine enabled services from ldap.

Que tal amanecer con este problema, teniendo en cuenta que nuestro server resuelve bien los DNS, y ha venido trabajando sin ningún contratiempo?:

[zimbra@mail ~]$ zmcontrol start
Host mail.dominio.com
Starting ldap...Done.
Unable to determine enabled services from ldap.
Enabled services read from cache. Service list may be inaccurate.
Starting logger...Done.
Starting mailbox...Done.
Starting antispam...Done.
Starting antivirus...Done.
Starting snmp...Done.
Starting spell...Done.
Starting mta...Done.
Starting stats...Done.


El Zimbra es un excelente servidor de correo, es muy estable y por eso mismo puede ser tan critico que aparezca un error, más precisamente cuando el servicio de correo es indispensable en cualquier empresa.
Sin el servicio LDAP el correo no funciona. Se presentaran una serie de problemas con el envio y recepción de mensajes principalmente.

Para solucionar esto, no se tiene en la mayoria de los casos que actualizar la versión del Zimbra ni mucho menos el sistema operativo, bueno no por el momento.

Lo primero que hay que hacer es verificar que la carpeta donde está instalado el zimbra, pertenezca tanto a ese mismo usuario como al grupo de ese usuario.

Si ejecutando un ls -l, este arroja que la carpeta no cuenta con estos dueños, realizar los cambios con el comando: chown -R zimbra:zimbra /opt/zimbra

Luego de esto, aplicar el siguiente comando como usuario Root (en la carpeta Bin del Zimbra), para que se aplican los permisos en los módulos del Zimbra:

./opt/zimbra/libexec/zmfixperms -verbose


Adicional, los certificados de autenticación del Zimbra se deben renovar cada x tiempo. Se ejecutan los siguientes comandos, si no sube el LDAP, luego de reiniciar los servicios con: zmcontrol stop && zmcontrol start, con el usuario Zimbra claro esta.

1. zmcertmgr createca -new
2. zmcertmgr createcrt -new -days 365
3. zmcertmgr deploycrt self
4. zmcertmgr viewdeployedcrt


Esta última parte es mas compleja, asi que si quieres echar un vistazo, este es el enlace: http://www.zimbra.com/forums/users/18629-zimbra-ldap-problem-unable-determine-enabled-services-ldap-3.html

Por lo pronto, el resultado final fue este:

[zimbra@mail ~]$ zmcontrol start
Host mail.dominio.com
Starting ldap...Done.
Starting logger...Done.
Starting mailbox...Done.
Starting antispam...Done.
Starting antivirus...Done.
Starting snmp...Done.
Starting spell...Done.
Starting mta...Done.
Starting stats...Done.


sábado, 24 de julio de 2010

Instalando Oracle 11gR1 en Ubuntu

Installing Oracle 11gR1 on Ubuntu

Bueno, después de mucho tiempo estar metido en otros asuntos ajenos a Linux, quité mi Debian, por Ubuntu. Me cansé de tener problemas con drivers en cada actualizacion del sistema, a lo mejor era culpa mia, pero no tengo el suficiente tiempo para solucionar ese tipo de inconvenientes, hasta el momento todo ha salido muy bien con ubuntu y mas con el Ubuntu Software Center (utiliza apt), de lo mejor!

La tarea ahora era instalar Oracle, en mi Debian no tuve éxito, hubo algunos conflictos con librerias. Aquí fue mas sencillo, solo seguí algunas cosas de este articulo:
http://www.pythian.com/news/1355/installing-oracle-11gr1-on-ubuntu-810-intrepid-ibex/

En el articulo se indican los pasos para instalar la version R1 del Oracle11g en Ubuntu 8.10, aunque yo lo hice con 11gR2 sobre ubuntu 10.04 Desktop.

Recuerden deshabilitar el control de XWindows con el comando xhost +, de esa manera, no tendrán problemas al arrancar el RunInstaller de Oracle desde la consola.

De todas maneras dejo un resumen del articulo, indicando lo que se debe hacer antes de correr el RunInstaller, por si el autor lo elimina:

apt-get install gcc make binutils gawk x11-utils
rpm alien ksh lsb-rpm


root@ibex:~# cd /bin
root@ibex:/bin# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2008-11-02 21:33 /bin/sh -> dash
root@ibex:/bin# ln -sf /bin/bash /bin/sh
root@ibex:/bin# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2008-11-02 22:34 /bin/sh -> bash
root@ibex:/bin#

root@ibex:/bin# cd
root@ibex:~# pwd
/root
root@ibex:~# addgroup oinstall
Adding group `oinstall' (GID 1001) ...
Done.
root@ibex:~# addgroup dba
Adding group `dba' (GID 1002) ...
Done.
root@ibex:~# addgroup nobody
Adding group `nobody' (GID 1003) ...
Done.
root@ibex:~# usermod -g nobody nobody
root@ibex:~# useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oracle
root@ibex:~# mkdir /home/oracle
root@ibex:~# chown -R oracle:dba /home/oracle
root@ibex:~# ln -s /usr/bin/awk /bin/awk
root@ibex:~# ln -s /usr/bin/rpm /bin/rpm
root@ibex:~# ln -s /usr/bin/basename /bin/basename
root@ibex:~# mkdir /etc/rc.d
root@ibex:~# for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done
root@ibex:~# mkdir -p /u01/app/oracle
root@ibex:~# chown -R oracle:dba /u01
root@ibex:~#

Realizar cambios en: /etc/sysctl.conf:
root@ibex:~# cd /etc
root@ibex:/etc# cp sysctl.conf sysctl.conf.original

Editarlo y agregar:

fs.file-max = 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144


Luego, se modifica: /etc/security/limits.conf:

root@ibex:/etc# cd /etc/security/
root@ibex:/etc/security# cp limits.conf limits.conf.original

Se agrega también:

oracle soft nproc 2047
oracle hard nproc 16383
oracle soft nofile 1023
oracle hard nofile 65535


El ultimo, es: /etc/pam.d/login:

root@ibex:/etc/security# cd /etc/pam.d
root@ibex:/etc/pam.d# cp login login.original

Agregar:

session required /lib/security/pam_limits.so
session required pam_limits.so