viernes, 31 de julio de 2009

Oracle prosigue su estrategia de adquisición de compañías

Fuente: eweekeurope.com
Le toca el turno a la firma GoldenGate Software, especializada en tecnología de integración de datos en tiempo real. Las dos llevaban trabajando juntas desde hace 10 años.

Le toca el turno a la firma GoldenGate Software, especializada en tecnología de integración de datos en tiempo real. Las dos llevaban trabajando juntas desde hace 10 años.

Oracle acaba de anunciar una nueva adquisición que se une a las recientes de Sun Microsystems y Virtual Iron.

En esta ocasión se trata de la compañía GoldenGate Software, cuya especialidad es el desarrollo de tecnología de integración de datos en tiempo real. Efectivamente, Oracle y GoldenGate llevaban 10 años trabajando muy de cerca y muchos de los productos de la segunda ya están integrados con Oracle Database, Oracle Fusion Middleware y otras aplicaciones del desarrollador de bases de datos.

El objetivo de esta adquisición, tal y como asegura Oracle, es permitir que los datos se puedan mover entre sistemas heterogéneos en tiempo real sin tener que parar los procesos en ningún momento. Además, también esperan incrementar la inteligencia de negocio (BI), así como mejorar la replicación y reducir las tareas de mantenimiento.

De esta forma, se podrían llevar a cabo transiciones de gran volumen, como es el caso de la banca online, compras, operaciones con seguros… sin necesidad de interrumpir el servicio a los clientes.

“La necesidad de mejorar el rendimiento operativo en entornos globales 24x7 hace que sea necesaria la integración de los datos para soportar en tiempo real las operaciones”, señala Hasan Rizvi, vicepresidente de desarrollo de Oracle Fusion Middleware
.


Cómo hacer un export de forma remota en Oracle10g con DATAPUMP

Un elemento importante en el proceso de generación de un respaldo ó importación de datos, con los nuevas herramientas de DATAPUMP, es el directorio de "DUMP", definido a nivel de la base de datos. Por tanto, para que el directorio sea creado a nivel de la instancia de base de datos, es necesario que el directorio ó sistema de archivos, sea presentado por parte del S.O.
No podemos hacer un respaldo a un equipo remoto, si:
  1. El sistema de archivos no ha sido montado en nuestro servidor local, ó
  2. Si el servidor remoto, no cuenta con un Oracle Server instalado y una instancia de base de datos corriendo para la versión Oracle10g ó superior.
Si el sistema de archivos es montado, ya sea en windows como carpeta compartida, o en UNIX/LINUX por NFS, samba, etc, es como que si existiera en el servidor local, por tanto, yo puedo definir el directorio sin problema alguno desde la base de datos.
Si por el contrario, tenemos dos servidores de base de datos y en ambos tenemos Oracle Server release 10g o superior con al menos una instancia corriendo, podemos definir un directorio de DUMP en la instancia del servidor con espacio físico libre en disco y exportar los datos de una instancia remota, a través de la utilización de un dblink creado desde el servidor de origen al servidor de la instancia del servidor local, en donde deseo guardar el archivo producto del DUMP.
Ejemplo: expdp respaldo/respaldo directory=EXPDMP dumpfile=prueba_respaldo.dmp tables=scott.t1 network_link=admin.lab1.co.cr
Explicación: En este caso, me conecto con un usuario a la instancia del servidor en donde tengo espacio físico disponible. Indico el directorio de DATAPUMP definido en mi servidor actual, le indico el nombre del archivo de DMP de PUMP, le estoy pasando el nombre de la tabla que deseo exportar, que para este caso, es la tabla T1, del esquema SCOTT y le indico con el nuevo parámetro "NETWORK_LINK", de dónde tiene que traerse la tabla.
Este es el ejemplo desarrollado en laboratorio, para que lo puedan "PARSEAR"

Servidor 2

[oracle@serv_lab2 respaldos]$ mkdir DUMPDIR
[oracle@serv_lab2 respaldos]$ cd DUMPDIR
[oracle@serv_lab2 DUMPDIR]$ pwd
/respaldos/DUMPDIR
[oracle@serv_lab2 DUMPDIR]$ mkdir lab2
[oracle@serv_lab2 DUMPDIR]$ mkdir admin
[oracle@serv_lab2 DUMPDIR]$ cd lab2
[oracle@serv_lab2 lab2]$ pwd
/respaldos/DUMPDIR/lab2
[oracle@serv_lab2 lab2]$ ORACLE_SID=lab22
[oracle@serv_lab2 lab2]$ export ORACLE_SID

[oracle@serv_lab2 lab2]$ ORACLE_SID=admin2
[oracle@serv_lab2 lab2]$ export ORACLE_SID

[oracle@serv_lab2 lab2]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jul 31 09:21:42 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> connect / as sysdba
Connected.
SQL> create directory EXPDMP as '/respaldos/DUMPDIR/admin';

Directory created.

SQL> grant read,write on directory EXPDMP to respaldo;

Grant succeeded.

SQL> exit

Disconnected from Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option
[oracle@serv_lab2 lab2]$ ORACLE_SID=lab22
[oracle@serv_lab2 lab2]$ export ORACLE_SID
[oracle@serv_lab2 lab2]$ sqlplus scott/tiger

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jul 31 09:25:11 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option

SQL> desc t1
Name Null? Type
----------------------------------------- -------- ----------------------------
NO_DOCU NOT NULL VARCHAR2(12)
NO_LINEA NOT NULL NUMBER(6)

[oracle@serv_lab2 lab2]$ expdp respaldo/respaldo directory=EXPDMP dumpfile=prueba_respaldo.dmp tables=scott.t1 network_link=admin.lab1.co.cr

Export: Release 10.2.0.4.0 - 64bit Production on Friday, 31 July, 2009 9:28:10

Copyright (c) 2003, 2007, Oracle. All rights reserved.

Connected to: Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option
Starting "RESPALDO"."SYS_EXPORT_TABLE_01": respaldo/******** directory=EXPDMP dumpfile=prueba_respaldo.dmp

tables=cemaconaf.t1 network_link=admin.lab1.co.cr
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 128 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "SCOTT"."T1" 5.132 KB 21 rows
Master table "RESPALDO"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for RESPALDO.SYS_EXPORT_TABLE_01 is:
/respaldos/DUMPDIR/lab2/prueba_respaldo.dmp
Job "RESPALDO"."SYS_EXPORT_TABLE_01" successfully completed at 09:29:51

[oracle@serv_lab2 lab2]$


[oracle@serv_lab2 lab2]$
[oracle@serv_lab2 lab2]$ ORACLE_SID=lab22
[oracle@serv_lab2 lab2]$ export ORACLE_SID
[oracle@serv_lab2 lab2]$ sqlplus scott/tigger

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jul 31 09:34:38 2009

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option

SQL> desc t1
Name Null? Type
----------------------------------------- -------- ----------------------------
NO_DOCU NOT NULL VARCHAR2(12)
NO_LINEA NOT NULL NUMBER(6)

SQL> select count(*) from t1;

COUNT(*)
----------
1011

SQL> drop table t1;

Table dropped.

SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option

[oracle@serv_lab2 lab2]$ pwd
/respaldos/DUMPDIR/lab2

[oracle@serv_lab2 lab2]$ ls -la
total 92
drwxr-xr-x 2 oracle oinstall 4096 Jul 31 09:28 .
drwxr-xr-x 4 oracle oinstall 4096 Jul 31 09:19 ..
-rw-rw-r-- 1 oracle oinstall 1084 Jul 31 09:29 export.log
-rw-rw---- 1 oracle oinstall 73728 Jul 31 09:29 prueba_respaldo.dmp
-rw-r----- 1 oracle oinstall 700 Jul 31 09:25 sqlnet.log

[oracle@serv_lab2 lab2]$ impdp respaldo/respaldo directory=EXPDMP dumpfile=prueba_respaldo.dmp

Import: Release 10.2.0.4.0 - 64bit Production on Friday, 31 July, 2009 9:35:33
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option
Master table "RESPALDO"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "RESPALDO"."SYS_IMPORT_FULL_01": respaldo/******** directory=EXPDMP dumpfile=prueba_respaldo.dmp
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."T1" 5.132 KB 21 rows
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "RESPALDO"."SYS_IMPORT_FULL_01" successfully completed at 09:35:37

Servidor 1

[oracle@serv_lab1 lab1]$ ORACLE_SID=lab11
[oracle@serv_lab1 lab1]$ export ORACLE_SID
[oracle@serv_lab1 lab1]$ sqlplus scott/tiger

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jul 31 09:35:48 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option

SQL> desc t1
Name Null? Type
----------------------------------------- -------- ----------------------------
NO_FISICO VARCHAR2(12)

SQL> select count(*) from t1;

COUNT(*)
----------
21

SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option

Devuelta en el servidor nodo 2
[oracle@serv_lab2 lab2]$ pwd
/respaldos/DUMPDIR/lab2
[oracle@serv_lab2 lab2]$


>[oracle@serv_lab2 lab2]$ ORACLE_SID=lab22
[oracle@serv_lab2 lab2]$ export ORACLE_SID
[oracle@serv_lab2 lab2]$ sqlplus scott/tiger

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jul 31 09:35:48 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option

SQL> desc t1
Name Null? Type
----------------------------------------- -------- ----------------------------
NO_FISICO VARCHAR2(12)

SQL> select count(*) from t1;

COUNT(*)
----------
21

SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
With the Real Application Clusters option

miércoles, 29 de julio de 2009

Diferencia entre Vistas del Diccionario de la base de datos y las Vistas Dinámicas de Rendimiento

En oracle tenemos dos tipos de vistas:
  1. Vistas del diccionario de la base de datos
  2. Vistas dinámicas de rendimiento ( performance )
Todas las vistas del diccionario de la base de datos inician con el prefijo DBA_, USER_ ó ALL_.

La diferencia entre ellas es la siguiente:
  • DBA_ Vistas en dónde se puede obtener información para todos los objetos de la base de datos.
  • ALL_ Vistas con información para todos los objectos de un usuario ó esquema específico ó objetos sobre los cuáles el usuario tiene privilegios otorgados.
  • USER_ Vistas con la información de todos los objetos que le pertenecen a un usuario ó esquema

Las diferencias entre las vistas de datos del diccionario y las vistas dinámicas es:

  • Las vistas del diccionario, usualmente tienen nombre en plural ( DBA_TABLES ) y las vistas dinámicas en singular ( V$DATAFILE).
  • Las vistas del diccionario, estan únicamente disponbles cuando la base de datos esta abierta, algunas V$ dinámicas pueden estar disponibles cuando la base de datos no esta totalmente abierta.
  • La data en las vistas del diccionario de la base de datos, esta usualmente en "MAYUSCULA", mientras en las vistas dinámicas esta usualmente en "minúscula".
  • La data de las vistas del diccionario de la base de datos, es estática y no es limpiada cuando la base de datos es reiniciada.
  • La data de las vistas dinámicas es limpiada despues de reiniciar la base de datos.

Ejemplos vistas del diccionario de la base de datos

  • DBA_TABLES
  • DBA_TABLESPACES
  • DBA_USERS

Ejemplos de vistas dinámicas

  • V$VERSION
  • V$OPTION
  • V$DATABASE


Como determinar el tipo de dato de una columna en una tabla, sin hacer uso del DESC

Este ejemplo, puede ser utilizado para adaptar una función que devuelva el tipo de dato almacenado en una columna de una tabla específica.
La consulta fue publicada en el foro de la Comunidad Oracle Hispana, así que les remito la respuesta a todos ustedes:

Foro: http://comunidadoraclehispana.ning.com/forum/topics/como-saber-si-un-dato-es

Cómo saber si un dato es número, letra, fecha ?
Publicado por Ivan Dario Guerrero Martinez el julio 27, 2009 a las 5:00pm en Tecnologias Oracle


Fuente:http://stackoverflow.com/questions/1087161/oracle-identify-data-type

DECLARE
c NUMBER;
d NUMBER;
col_cnt INTEGER;
f BOOLEAN;
rec_tab DBMS_SQL.DESC_TAB;
col_num NUMBER;
PROCEDURE print_rec(rec in DBMS_SQL.DESC_REC) IS
BEGIN
DBMS_OUTPUT.NEW_LINE;
DBMS_OUTPUT.PUT_LINE('col_type = '
rec.col_type);
DBMS_OUTPUT.PUT_LINE('col_maxlen = '
rec.col_max_len);
DBMS_OUTPUT.PUT_LINE('col_name = '
rec.col_name);
DBMS_OUTPUT.PUT_LINE('col_name_len = '
rec.col_name_len);
DBMS_OUTPUT.PUT_LINE('col_schema_name = '
rec.col_schema_name);
DBMS_OUTPUT.PUT_LINE('col_schema_name_len = '
rec.col_schema_name_len);
DBMS_OUTPUT.PUT_LINE('col_precision = '
rec.col_precision);
DBMS_OUTPUT.PUT_LINE('col_scale = '
rec.col_scale);
DBMS_OUTPUT.PUT('col_null_ok = ');
IF (rec.col_null_ok) THEN
DBMS_OUTPUT.PUT_LINE('true');
ELSE
DBMS_OUTPUT.PUT_LINE('false');
END IF;
END;
BEGIN
c := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(c, 'SELECT * FROM RD_ENLACES', DBMS_SQL.NATIVE);

d := DBMS_SQL.EXECUTE(c);

DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);

/*
* Following loop could simply be for j in 1..col_cnt loop.
* Here we are simply illustrating some of the PL/SQL table
* features.
*/
col_num := rec_tab.first;
IF (col_num IS NOT NULL) THEN
LOOP
print_rec(rec_tab(col_num));
col_num := rec_tab.next(col_num);
EXIT WHEN (col_num IS NULL);
END LOOP;
END IF;

DBMS_SQL.CLOSE_CURSOR(c);
END;
/

create view vw_test as
select 1 an_integer, 'abc' a_string, sysdate a_date from dual;

SQL> set linesize 80
SQL> desc rd_enlaces
Name Null? Type
----------------------------------------- -------- ----------------
CODIGO NOT NULL VARCHAR2(5)
ORDEN NOT NULL NUMBER(2)
DESCRIPCION NOT NULL VARCHAR2(30)
DB_LINK NOT NULL VARCHAR2(80)
IND_OFICINA NOT NULL VARCHAR2(1)
IND_ACTIVO NOT NULL VARCHAR2(1)

SQL> @0
col_type = 1
col_maxlen = 5
col_name = CODIGO
col_name_len = 6
col_schema_name =
col_schema_name_len = 0
col_precision = 0
col_scale = 0
col_null_ok = false
col_type = 2
col_maxlen = 22
col_name = ORDEN
col_name_len = 5
col_schema_name =
col_schema_name_len = 0
col_precision = 2
col_scale = 0
col_null_ok = false
col_type = 1
col_maxlen = 30
col_name = DESCRIPCION
col_name_len = 11
col_schema_name =
col_schema_name_len = 0
col_precision = 0
col_scale = 0
col_null_ok = false
col_type = 1
col_maxlen = 80
col_name = DB_LINK
col_name_len = 7
col_schema_name =
col_schema_name_len = 0
col_precision = 0
col_scale = 0
col_null_ok = false
col_type = 1
col_maxlen = 1
col_name = IND_OFICINA
col_name_len = 11
col_schema_name =
col_schema_name_len = 0
col_precision = 0
col_scale = 0
col_null_ok = false
col_type = 1
col_maxlen = 1
col_name = IND_ACTIVO
col_name_len = 10
col_schema_name =
col_schema_name_len = 0
col_precision = 0
col_scale = 0
col_null_ok = false

PL/SQL procedure successfully completed.

SQL> select * from vw_test;

NUMBER,STRING,FECHA)

-----------------------
1 abc 29-JUL-09

martes, 28 de julio de 2009

Nuevas características de la claúsula SAMPLE en SQL Oracle10g ó superior

La claúsula SAMPLE, permite que la consulta devuelva un limitado número de bloques que componen la tabla o un porcentaje de los registros totales de la tabla.
SQL> select * from v$version;

BANNER
-----------------------------------------------------------------------------------------
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production


SQL> select count(*) from arinmeh;

COUNT(*)
----------
7067200

Consulta del 50% de registros en la tabla.

SQL> select count(*) from arinmeh sample(50);

COUNT(*)
----------
3535153

Consulta del 25% de los bloques que forman la tabla.

SQL> select count(*) from arinmeh sample block(25);

COUNT(*)
----------
1760533

Oracle Latinoamérica- Demo Opción Avanzada de Seguridad Cifrado de Datos Oracle 11g


http://www.oracle.com/technology/global/lad-es/products/database/oracle11g/demo/index.html

Conceptos Networking

Como reparar ORA-00607 ORA-00600 [4194],[35]

Referencia: Nota 39283.1

Este error indica que el tablespace UNDO se encuentra corrupto.
Síntomas:
  1. La aplicación empiece a generar errores como el descrito a continuación, en la imagen adjunta.
  2. El alert de la instancia, registra el mismo error, con los argumentos indicados.
  3. Rendimiento de la base de datos, se ve comprometido.

Solucción:

  1. Crear un nuevo tablespace undo.
  2. Switchear el tablespace undo en memoria para ser utilizado de facto. ( alter system set undo_tablespace=''nombre_nuevo_tablespace" scope=both; )
  3. Borrar el tablespace anterior.

Lo más leído en el mes de Julio 2009

Top 5 del mes de julio 2009

http://oracledbacr.blogspot.com/2009/07/instalacion-de-webutil-para-oracleas.html
http://oracledbacr.blogspot.com/2009/06/instalando-oracle-application-server.html
http://oracledbacr.blogspot.com/2009/04/creando-export-de-oracle-comprimido-en.html
http://oracledbacr.blogspot.com/2009/07/el-poderoso-allowresetlogscorruptiontru.html
http://oracledbacr.blogspot.com/2009/07/tablas-con-problemas-de-lentitud-la.html

No dejes de leer las demás publicaciones.

lunes, 27 de julio de 2009

Grid Computing @ Oracle OpenWorld

Oracle ACE Director Discusses Cost Savings with Oracle Database 11g

Testing Oracle 10g RAC Scalability

Quest Software

Errores comunes en la progración de Oracle PL/SQL

Presentación realizada por Quest Software

Adquisición de Conformia Redwood Shores

Oracle Corporation, ha adquirido los derechos de propiedad intelectual de Conformia Software.

El software PPLM de Conformia, tiene una serie de características importantes, para manejar farmacias, así como administrar el desarrollo y manejo de la producción, a través de sus componentes en las empresas del área Bio-Químicas y Farmacéuticas.
Oracle planea integrar el producto de Conformia, dentro de una solucción y ofrecerla al mercado meta, con integración a las aplicaciones actuales de Oracle y de terceros.

Esta combinación permitirá a las compañías de Productos Farmacéuticos y Biotecnologías, acelerar la innovación, la administración de objetivos y mejorar su productividad.

Conceptos: Qué significa: Buffer hit ratio ?

El buffer hit ratio, representa el porcentaje de bloques solicitados, que han sido satisfechos en el cache sin requerir I/O físico.


Un bajo porcentaje de aciertos en el buffer cache, generalmente trae consigo síntomas de lentitud en la base de datos. Leer los datos en memoria puede ser de 1/10000 más rápido que hacerlo a disco.


De Oracle 10g en adelante: La administración del buffer cache, así como de otras estructuras de memoria del SGA ( System Global Area ), pueden ser administradas en forma automática por el motor de la base de datos. Si el parámetro de inicialización "db_cache_advice", esta seteado al valor "ON", el motor ajustará de forma dinámica los tamaños de las áreas del SGA, según sea requerido por la instancia. Otra forma de verificar que la opción de auto administración de SGA esta activa, es verificando que el valor del parámetro "db_cache_size", sea "0" .

Si no conoce cuales son los requerimientos de tamaño de buffer cache y necesita configurar lo más adecuadamente su servidor, el mantener en funcionamiento esta característa de administración automática, puede ser dar buenos resultados.


domingo, 26 de julio de 2009

El poderoso _ALLOW_RESETLOGS_CORRUPTION=TRUE

Aplica para: Oracle Server - Version: 8.1.7.4 to 10.2.0.4

Basado en: RECOVER A DATAFILE WITH MISSING ARCHIVELOGS
Doc ID: 418476.1
Type: PROBLEM
Modified Date: 03-JUN-2009


Síntoma: ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: 'c:\ORACLE\ORADATA\SYSTEM01.DBF'

Cuál puede ser el escenario más desastrozo que puede usted enfrentar.?
Su servidor de base de datos sufre la pérdida repentida de unos de los discos duros. El servidor tiene un arreglo 0+1, ó peor, no existe arreglo de discos.
Después de darse cuenta que su disco no sirve, llama a su soportista de hardware y le solicita reparar el daño.
Cuando el equipo está arriba nuevamente, hace un repaso de su instalación y el inventario le indica, que perdió, el motor de la base de datos. Los datafiles de la base de datos estaban dichosamente en otro disco duro. Instala el motor de la base de datos nuevamente, configura los nuevos servicios y a la hora de levantar la base de datos, le indica que la base de datos esta inconsistente y que requiere realizar una recuperación de uno ó más datafiles.

Por motivos especiales, usted no tiene la base de datos en modo archive. Toma la decisión de recuperar desde uno de los respaldos en frío que realiza todos los días. Sorpresa, el respaldo en frío no existe, revisa el histórico en disco y se da cuenta que el respaldo más reciente, es de hace 1 mes y medio. Revisa la cinta de respaldos y sí, efectivamente, el respaldo tampoco existe en cintas.

Revisa la ubicación de los "dmps", y "Ups!!!", no tenemos "exports" de la base de datos.
Al intentar realizar un "recovery database", da como resultado, que no puede abrir los 1 ó mas datafiles de un tablespaces de datos, el tablespace temporal y el datafile de "SYSTEM", requiere recuperación.
NO HAY RESPALDOS DISPONIBLES.
Qué podemos hacer.?

A pesar del panorama tan poco positivo, les cuento, que logré recuperar una base de datos, en estas condiciones.
  • Los tablespaces de índices, no eran tan críticos, por tanto, lo más fácil, eran borrarlos para poder continuar con la recuperación.
  • El tablespace temporal, no hay problema. En todo caso se crea otro tablespace temporal y listo.
  • Esta es la parte interesante del problema. Los datafiles de datos, fueron revisados con el utilitario "DBV", y ninguno presentaba problemas, incluyendo el datafile de SYSTEM. Sin embargo, al darle "startup", me indica que el datafile de SYSTEM, requiere recuperación, porque se encuentra inconsistente y me pide, un archivo de archivelog, para poder realizar la recuperación. La base de datos queda en estado montada, pero no abierta. La base de datos, les recuerdo, no está en modo ARCHIVE. Intento varias opciones encontradas en "metalink.oracle.com", sin embargo, ninguna funciona. Una nota me indica que debo, recuperar el datafile de un respaldo consistente en frío. - No hay respaldos en frío -. Apoyado en la nota 418476.1, de cómo realizar una recuperación de un datafile con pérdida de archivelogs, hago lo siguiente:
  • Bajo la base de datos con "shutdown abort".
  • Monto la base de datos "startup mount"
  • Hago un respaldo del controlfile de la base de datos.
  • Edito el archivo generado del respaldo del controlfile y dejo la opción de "Create controlfile" con la opción de resetlogs.
  • Creó un archivo de parámetros de tipo pfile del SPFILE actual de la instancia.
  • Se agrega la línea: _allow_resetlogs_corruption=TRUE
  • Recreó el archivo SPFILE de la instancia con el contenido del nuevo archivo pfile.
  • Bajo la base de datos y la vuelvo a montar
  • Ejecuto el archivo creado para recreación de los controlfiles con la opción de resetlogs.
  • Ejecuto "recover database", si el resultado es satisfactorio, procedo a ejecutar "alter database open"
  • La ejecución del comando "alter database open", puede llevar su tiempo en concluir. Puede ser que no concluya satisfactoriamente. Si falla, baje la base de datos con "shutdown abort", monte la base de datos y vuelva a ejecutar "recover database" y luego "alter database open".
  • Cuando el resultado del "alter database open", sea satisfactorio, proceda a crear un "dmp" de la base de datos. Baje de manera consistente la base de datos "shutdown immediate" y genere un respaldo en frío de todos los datafiles.
  • Cuando haga el dmp, puede ser que le indique con no existe el tablespace temporal. Proceda a crear un nuevo tablespace temporal y definalo como default.

Como resultado de este procedimiento, el recover, recuperó los datafiles de los tablespaces con índices dañados y la base de datos quedó consistente.

No olviden leer detenidamente la nota a la que hago referencia para el parámetro "_ALLOW_RESETLOGS_CORRUPTION". Lo peor que le puede suceder, es que no le funcioné. De todos modos, la única salida con respuesta certificada en metalink, es que proceda a recrear la base de datos, desde cero.

A mi me sirvió, espero que a ustedes les pueda ayudar. Sin embargo, tomen las medidas necesarias, para evitar este tipo de escenario.

  1. Verifique que sus respaldos diarios estan funcionando correctamente.
  2. Verifique que los respaldos a cinta, son funcionales.
  3. Configure su base de datos en modo archive
  4. No olvide, validar que sus respaldos funcionan. Haga periódicamente, recuperación de la base de datos en un servidor de pruebas, con los archivos respaldados en sus cintas.

viernes, 24 de julio de 2009

Para aquellos que no conocen el significado de "PURA VIDA", para un "TICO" - Costarricense -

Yo he utilizado en varias mensajes para finalizar la conversación, o para saludar, el "Pura Vida" y en una conversación reciente con don Fernando Martin, creador de la red Comunidad Oracle Hispana, me dí cuenta, que no conocía de esta expresión tan popular en mi país.
Para nosotros, el "Pura Vida", resume en dos palabras, nuestro estado de ánimo, agradecimiento, buenas vibraciones, etc.
Es parte de nuestro día a día. No se si se pueda comparar con otras frases tan conocidas, como el "Orale" de nuestros hermanos Méxicanos, el "Conchale" de los Venezolanos, el "Che boludo" de los Argentinos, etc.
Un tico se reconoce por esa frase y el dársela a alguién, es un gesto de buena voluntad, de agradecimiento profundo y de deseos que tu vida, sea lo máximo.
Que tengan un buen fin de semana y que estén Pura Vida !!!
Nota adicional:
En un diario local, en una publicación del año 2007, me encontré, el origen de esta frase y como fue que llegó a nuestro país en la décadas de los 50's.

Fernando Gutiérrez Coto
Ni el “pura vida”
Corresponsal de La Nación
Tan popular, hasta el grado que nos distingue en otros países, la frase “pura vida” no es de origen costarricense; o sea, no es autóctona.
A escribir sobre el tema nos motivó el artículo del abogado Guillermo Barrantes Vega (Foro, 27 /11/07) donde expone con buen argumento que el vocablo “maje”, muy usual en el decir de nuestros jóvenes y no tan jóvenes, no es propio de nuestro país, sino de México.

De Clavillazo .
Y resulta que también el “pura vida” nos viene de allá, y esa aseveración la baso en que desde la década de 1950, especialmente en los cines de pueblo (en mi caso, el Teatro” Guzmán en Cachí), el cómico mexicano Antonio Espino (1910-1993), conocido con el mote artístico de Clavillazo , utilizaba como muletilla el “pura vida” en todas sus películas, que fueron numerosas.

Así, a mi criterio, esa frase la adoptaron y amplificaron las nuevas generaciones costarricenses.

Al contrario de maje, “pura vida”, es más edificante. Es más, el prestigioso escritor y cinéfilo mexicano Carlos Monsiváis, en su obra Rostros del cine mexicano (1999), señala como frase célebre de Clavillazo el “pura vida”.
Y bajo esa exclamación, también don Antonio Espino filmó una película en 1955, dirigida por Gilberto Martínez Solares.
Vino al país. Por cierto, Clavillazo estuvo en Costa Rica, no sé si la primera o la última vez, en 1973, filmando como coprotagonista de la actriz y cantante Lucha Villa y del también cómico Adalberto Martínez ( Resortes ), la película La marchanta.

Algunas de las principales escenas se rodaron en locaciones en San José y Heredia, y al año siguiente se proyectaba en el país. Se ocuparon extras y músicos nacionales, entre ellos el cartaginés Eustaquio Leiva, cantante de mariachi, que todavía a sus 70 y pico de años sigue con su trío cantando a los enamorados.
En fin, creo que el maje, escrito por el octogenario escritor mexicano Carlos Fuentes en La región más transparente y el “pura vida” de Clavillazo son muestra de la gran influencia mexicana en nuestro país, especialmente por el cine de aquella nación.

Cultural General Informática SQL ANSI

Dónde podemos hallar las guías rápidas de instalación en plataformas certificadas para Oracle 11g?

Si andas buscando y buscando, donde encontrar las distintas guías rápidas de instalación en plataformas certificadas por Oracle para la instalación de Oracle 11g Release 1, sigue el siguiente link:
http://www.oracle.com/pls/db111/portal.portal_db

Hagan click en la opción "Installing and Upgrading"

jueves, 23 de julio de 2009

Oracle 11g, nombramiento de tablas

e-Learning, la revolución del aprendizaje “just-in-time”

Cada vez son más los adeptos al estudio y la capacitación a través de medios electrónicos desde cualquier lugar y hora
El e-Learning no es nada nuevo; millones de personas en el mundo lo conocen, aunque muchas de ellas todavía no sepan realmente cómo funciona o qué tanto se adecúa a sus necesidades. Lo que sí es cierto es que cada año crecen las cifras de inversión e implementación de este medio de aprendizaje en miles de empresas y universidades de todo el planeta, que han descubierto los beneficios ofrecidos por el estudio y la capacitación a través de medios electrónicos y de herramientas colaborativas, en un mundo que necesita cada vez más tiempo y flexibilidad y en el que muchos piden, literalmente, la posibilidad de estudiar o trabajar desde cualquier lugar y a cualquier hora.

Nota completa en: http://www.tendencias21.net/e-Learning,-la-revolucion-del-aprendizaje-just-in-time_a3515.html

El factor "PARSEO" en una instrucción SQL

Muchas veces nos preguntamos, si nuestras sentencias SQL estan bien escritas.
Uno de los factores más importantes en la ejecución de un SQL en nuestra base de datos, es el "PARSEO".
Cuando queremos ejecutar una sentencia en SQL, la base de datos verifica entre otras cosas:
  1. Nuestro usuario tiene privilegios en la base de datos para realizar la consulta
  2. La sentencia SQL tiene una sintáxis correcta
  3. Genera o busca un explain plan que cumpla con los requirimientos para ejecutar nuestra sentencia
  4. Ejecuta la sentencia
  5. Genera un FETCH de datos - Opcional-

Del punto 1 al 3 es lo que conocemos como PARSEO y este puede consumir muchas veces más del 90% del tiempo de ejecución de una sentencia en la base de datos.

Veamos el siguiente ejemplo, para introducirnos en el tema. Ambas sentencias producen lo mismo, la diferencia esta en como se parsea la instrucción.

En este caso el ejemplo 1, consume un 90% más de tiempo de ejecución que el ejemplo 2.


INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION
--------------- ---------------- -----------------

alpha2 racdb2.laboratorio.co.cr 10.2.0.4.0

SQL> create table t(x number, y varchar2(1));

Table created.


Ejemplo 1

SQL> set timing on
SQL> begin
2 for i in 1 .. 100000
3 loop
4 execute immediate
5 'insert into t(x,y)
6 values (' i',''x'')';
7 end loop;
8 end;
9 /

PL/SQL procedure successfully completed.

Elapsed: 00:00:27.94

SQL> truncate table t;

Table truncated.

Elapsed: 00:00:00.41

Ejemplo 2

SQL> begin
2 for i in 1 .. 100000
3 loop
4 execute immediate
5 'insert into t(x,y)
6 values (:i,''x'')'
7 using i;
8 end loop;
9 end;
10 /

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.80

miércoles, 22 de julio de 2009

Minimizar Riesgos de Cambio con Real Application Testing

Conocimientos de RDBMS ORACLE

Diferencias en manejo de Passwords entre versiones 10g y 11g de Oracle Database

Una diferencia importante que se da a partir de la versión 11g, es que de ahora en adelante podemos habilitar el manejo de sensibilidad de mayúsculas y minúsculas en las claves de usuario de la base de datos.
Hasta la versión 10g, no importaba si se digitaba una clave en mayúscula o minúscula, ya que la base de datos no maneja dicho control.

SQL> select * from v$version;
BANNER

----------------------------------------------------------
Oracle Database 10g Release 10.2.0.4.0 - 64bit
ProductionPL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0
Production TNS for Linux: Version 10.2.0.4.0 -
Production NLSRTL Version 10.2.0.4.0 - Production

SQL> create user prueba identified by manager;
User created.
SQL> grant create session to prueba;
Grant succeeded.
SQL> connect
prueba/MANAGER@alpha
Connected.
SQL> connect prueba/manager@alpha
Connected.
SQL>
A partir de 11g se cuenta con el parámetro de inicialización SEC_CASE_SENSITIVE_LOGON, cuyo valor puede ser TRUE ó FALSE, para guardar compatibilidad con las versiones previas.
Sin embargo, hay que tener en cuenta, que en 11g cuando modificas o creas un nuevo usuario, las claves son sensitivas de facto.
Para los usuarios con privilegios SYSDBA y SYSOPER, oracle mantiene el uso del archivo de password en el servidor. Se puede activas o desactivar esta función aplicando:
  • orapwd file=orapw entries=10 ignorecase= n y

Para verificar la versión de claves utilizada, la tabla dba_users, incluye una nueva columna "PASSWORD_VERSIONS", la cual indica para cada usuario, la versión de password utilizada.

Esta característica llena un gran vacío que existía en la seguridad a nivel de políticas de passwords.

Al fin, los auditores de sistemas, no nos molestaran más.

Para ampliar este concepto, puedes consultar: http://download.oracle.com/docs/cd/B28359_01/network.111/b28531/toc.htm

Montar un sistema de archivos de Windows en Linux en 5 segundos

Con el usuario root del sistema operativo Linux ejecuta la siguiente instrucción:

mount -t smbfs -o username=,password=<12345> //172.20.3.100/db_backup /oracle/respaldo_ext

Donde:
  • //172.20.3.100/db_backup -- dirección IP del equipo Windows y el directorio compartido en el sistema operatvio
    /oracle/respaldo_ext -- directorio local del servidor o equipo Linux donde queremos montar el sistema de archivos compartido de Windows

lunes, 20 de julio de 2009

Tablas con problemas de lentitud a la hora de ser consultadas

Comunidad Oracle Hispana
Comentario de Jorge Aquino
"Hola a todos.Mi siguiente pregunta es que tengo una tabla a la cual se le realizan muchas transacciones por lo que a veces las personas que solamente requieren realizar consultas se le alenta mucho, como puedo realizar para que se mejore el performance de dicha tabla.Ya le he hecho varios index pero de todas maneras sigue estando lenta.gracias por los comentarios."

Bueno dices en tu mensaje, que tienes una tabla que sufre muchas transacciones y que a la hora de consultar, se hace muy lenta la consulta en sí misma. Te digo, que podrías tal vez, tener muchos objetos con este mismo problema.

Veamos:

Partamos del hecho que sobre un objeto podemos tener consultas, deletes, udpates ó inserts de registros o tuplas, como lo quieran llamar.
La lentitud en la consulta, puede deberse a alguno de los siguientes factores:
  1. Problemas de fragmentación en la tabla
  2. Falta de índices que satisfagan la consulta
  3. Problemas de disponibilidad de recursos de hardware ( CPU, memoria, I/O )
  4. Problemas de concurrencia de datos
  5. Problemas de programación

Analicemos las opciones:

Problemas de fragmentación: Si la tabla es pequeña ( menos de 500000 registros ) y hace poco fue creada y no tiene muchos borrados sobre ella, es posible que este no sea el problema. Si fuese lo contrario, sería recomendable, que recrearlas el objeto.

Falta de índices: Me dices que ya hiciste varios índices, pero esto no ayudo en nada. Importante: si tu base de datos es 10g ó superior, el optimizador de consultas trabaja basado en Costo y no en Regla. Podrías tener algunos índices superflúos. Con la generación del "explain plan" de la consulta, podrías verificar el parceo que esta realizando el optimizador de consultas. Si el resultado es un FTS ( Full Table Scan ), los índices no estan sirviendo de nada.

Problema de Recursos: Dependiendo de tu sistema operativo, tienes varias herramientas para verificar la utilización del CPU, memoria y discos duros. Es normal, que el comportamiento del CPU sea alto durante períodos cortos, pero no es normal que la constante sea siempre al 100% de utilización. Para las áreas de PGA de los usuarios, es necesario contar con memoria RAM disponible en el servidor, si el porcentaje de memoria es poca, podrías tener algunos problemas en este punto y el equipo podría estar constantemente haciendo cambios de contexto y generando mucho swaping, esta situación aumentaría considerable el I/O del equipo y el rendimiento del mismo se vendría al suelo.

Problemas de concurrencia de datos: Los objetos estan quedando bloqueados por las transacciones que se estan llevando sobre los registros de la tabla. Recuerda que Oracle, realiza los bloqueos en forma automática a nivel de bloque, por tanto, si tenemos mucha actividad sobre un objecto específico y la densidad de registros por bloque es muy alta, puede darse, que se generen constantes bloqueos a nivel de tabla.

Para evitar que se produzca esta situación, es necesario que manejes el tema de concurrencia.

En las tablas e índices de la base de datos, existe un parámetro a nivel de almacenamiento, con el nombre de "initrans". Este parámetro tiene como valor de facto 1 para tablas y 2 para los índices. Esto quiere decir, que si una sesión esta haciendo un borrado, actualización o inserción de un registro o parte del registro en un bloque de la base de datos, otro usuario no podrá hacer esta misma actividad, con otros registros que se encuentren en ese mismo bloque, aún cuando los registros no esten sufriendo modificaciones. Si un usuario realiza una consulta sobre todos o algunos de los campos de un (os) registro (s) de la tabla, podría adquirir un bloqueo compartido sobre el objeto, siempre y cuando la lectura del registro pueda hacerse de manera consistente.

Veamos un ejemplo, si el bloque de la base de datos es de 8K, y el registro de una tabla mide 128 bytes y los parámetros de "pctused" y "pctfree", no se modificaron, en el objeto creado, podríamos utilizar hasta aprx. el 90% de los 8K, cuando se inserten nuevos registros, siempre y cuando el porcentaje de utilización sea por debajo del 40% del bloque previo al inicio de la operación del insert. ( Los valores de estos parámetros son 40 y 10 respectivamente ). Si tengo un 90% de los 8K para utilizar y mi registros mide 128 bytes, quiere decir que en cada bloque puedo llegar a tener como máximo 60 registros. Si tengo mucha gente trabajando sobre la tabla, puede ser que muchos usuarios requieran registros que estan en la mismo bloque, ya que la densidad ( población de registros del bloque ) es muy alta. Esto podría provocar constantemente bloqueos exclusivos sobre el bloque, evitando así, que otros usuarios puedan consultar o realizar modificaciones o borrados sobre los registros restantes.
Para evitar este problema, es necesario cambiar el "initrans" de la tabla y de los índices asociadas a la misma.
Con las siguientes instrucciones:
  • "alter table . initrans <> y
  • "alter index . initrans <>,

puedes modificar el nivel de concurrencia sobre los objetos. Hay que tener mucho cuidado con los valores que se otorguen. Valores muy altos, pueden causar contención a nivel del bloque, dando como resultado, problemas de rendimiento.

Ejemplo: alter table scott.emp initrans 10;

Yo por lo general en tablas con alto nivel de concurrencia y mucha población, suelo otorgar un valor de "initrans" para la tabla de 10 y un valor de 20 en el "initrans" para los índices. Mi regla es, el índice con el doble del valor de la tabla - siguiendo el patrón del valor de facto-.

Esta solucción, me ha dado excelentes cuando la he aplicado a objetos de alto nivel transaccional, como tablas de autorizaciones para sistemas de tarjetas de crédito, encabezado y detalle de tablas para registro de transacciones en puntos de venta, inventarios, contabilidad, etc.

Cuando vayan a realizar el cambio de parámetro, es necesario verificar previamente, que nadie este en ese momento utilizando los objetos, ya que la base de datos, requiere realizar un bloqueo exclusivo sobre los objetos.

Problemas de programación: El último punto pero no menos importante, es la calidad del código fuente que estemos utilizando. Si existe en el código instrucciones tales como "select for update", puede provocar bloqueos excesivos sobre la tabla. Aquí es neceario verificar, si realmente es necesario bloquear los registros, a la hora de realizar la consulta.

Si es una pantalla en dónde se puede consultar y modificar datos, es probable que funcione de esa manera.

Aquí habría que cambiar los hábitos de como se usa la consulta en sí. Evitar consultas con patrones, sería sumamente necesario. Por ejemplo: %PAIS%. Lo otro, sería necesario, que el usuario no se quede mucho tiempo en la pantalla de consulta/modificación, para evitar el bloque por tiempo excesivo.

Si logras encontrar en el alert de la base de datos, el mensaje: ORA-00060: deadlock detected while waiting for resource, la causa de tus problemas podría ser cualquiera de las dos últimas opciones.

CopyLeft- Copyrigth. Saber distinguir y saber respetar


Tal vez ya algunos hallan, logrado ver en mi blog, que me idéntifico con el lema de CopyLeft, que en el significado más simple, implica ir contrario a Copyright, pero cumpliendo algunas reglas fundamentales.
"Dicen por ahí, no hagas a otros lo que no quieras que te hagan a ti.", los pilares del CopyLeft, se fundamentan en esta regla. Si alguién produce algo y lo desea compartir con los demás, lo mínimo que puede hacer el que hace uso de la creación de la persona fuente, es mantener el origen de la fuente y agregar el comentario: "Modificado ó adaptado por: "

En el Derecho anglosajón se utiliza la noción de copyright (traducido literalmente como 'derecho de copia') que -por lo general- comprende la parte patrimonial de los derechos de autor (derechos patrimoniales).

Copyleft (por definición en oposición a copyright) comprende a un grupo de derechos de autor caracterizados por eliminar las restricciones de distribución o modificación impuestas por el copyright, con la condición de que el trabajo derivado se mantenga con el mismo régimen de derechos de autor que el original.


Bajo tales licencias pueden protegerse una gran diversidad de obras, tales como programas informáticos, arte, cultura y ciencia, es decir prácticamente casi cualquier tipo de producción creativa.

Existen muchos criterios encontrados sobre este tema, incluso hay algunos escritores como "Joost Smiers", en su libro "Imagine... No Copyright" el cuál afirma:
"Desde una perspectiva cultural podemos preguntarnos si está justificado reconocer a personas individuales los derechos de propiedad sobre las expresiones. ¿ Por qué? "
..
"La propiedad coincide con el derecho exclusivo y monopolista sobre el uso de una expresión. Ese derecho tal vez se atenúe, por ejemplo, cuando se trata de fines educativos; no obstante, el propietario tiene mucho poder para excluir a los otros del uso de una manifestación artística determinada. La consecuencia es que así se privatiza una parte sustancial de nuestra comunicación humana."

Los sistemas operativos abiertos, tienen notas que aplican criterios parecidos a CopyLeft, de igual manera que el software libre.

Nuestro conocimiento, es extraído de los libros, folletos, manuales, comunicados y otras fuentes, generados por una empresa que se llama "Oracle Corporation" y que legalmente tiene registrado todos los derechos sobre sus públicaciones. Este conocimiento no puede ser regulado por ley, porque implicaría como bien lo dice Smiers, una regulación de nuestra libertad

De esta empresa, directamente dependen un poco más de 80000 personas y en forma indirecta, la cantidad de gentes involucradas, les aseguro es mucho mayor.

Oracle me ha dado de comer durante los últimos 18 años, sin ser empleado directo. En consecuencia, estoy agradecido con el trabajo y esfuerzo de la gente que en forma directa, esta involucrada con el concepto.

Me parece desleal desde cualquier punto de vista, tratar en este blog de temas de "Piratería", si deseo ser reconocido y como un blog serio, avocado a difundir conocimiento y camarería.

El simple hecho de encontrarnos un comentario, por ejemplo: como bajar los manuales de cursos, presentaciones de workshops, etc, quita veracidad al contenido de las aportaciones, que con tanto esfuerzo y dedicación realizó, sabiendo de antemano, que este tipo de publicaciones no son gratis.

A nadie le gustaría que le quiten una idea, que podría haber sido, el producto del esfuerzo, de muchos años.
Ciertamente, el conocimiento es universal y no puede ser limitado. Pero respetemos, lo que no nos pertenece a derecho. Por eso, aquí nunca encontrarás información que trate sobre dichos temas, aunque te parezca "mojigato".

El futuro de OpenSolaris en las manos de Oracle

Comentario: Sobre el futuro de OpenSolaris de Sun.

Aun no se concreta la adquisición de Sun por parte de Oracle, pero ya se pueden ver algunas actitudes que podrían indicar la linea a seguir una vez que Oracle tome el control.

Cuando el sospechoso de tal adquisición era IBM, una de las dudas que se planteaba era qué iba a suceder en el área de los sistemas operativos, en donde habrían productos que competirían entre sí (Solaris, AIX y Linux). Ahora que se trata de Oracle, si bien no existe una competencia tan directa como un sistema Unix propio de la compañía, quedan dudas respecto a qué pasará con OpenSolaris considerando larga historia que Oracle tiene con Linux.

Artículo completo en:

Oracle celebra el primer Oracle Virtual Partner Kickoff Global

A fin de capacitar aún más a su comunidad de socios de negocios de todo el mundo, Oracle anunció el primer Oracle Virtual Partner Kickoff, un evento online que brinda información y estrategias para socios de negocios a fin de planificar y colaborar con Oracle, de manera exitosa, para el próximo año fiscal.
Por primera vez, los socios de negocios de todo el mundo tendrán acceso a la mensajería de producto, presentaciones y transmisiones en la Web ofrecidas en el inicio de la campaña de ventas interna de Oracle, y obtendrán la información clave de las iniciativas estratégicas de los socios de negocios diseñadas para ayudarlos a generar más ingresos para sus negocios a través de la especialización y monetización de las adquisiciones de Oracle.
Los socios de negocios también tendrán acceso directo a las estrategias y mensajes clave de ventas, ofrecidos por los ejecutivos de Oracle, entre ellos Charles Phillips, Safra Catz y Judson Althoff.

Podrán también escuchar a los ejecutivos más importantes de desarrollo de productos, como Aplicaciones, Middleware y Bases de datos sobre las áreas estratégicas de Oracle, incluidas Cloud Computing (Computación en Nube), Open Source (Código Abierto) y más.

Además, los principales ejecutivos regionales de Alianzas y Canales ofrecerán a los socios de negocios las estrategias específicas que los ayudarán en sus regiones a colaborar con Oracle en el año fiscal 2010.

“Oracle ha invertido regularmente en programas de especialización a fin de que nuestros socios aprendan, crezcan y se destaquen.
En el 2010, continuaremos con esta inversión y ayudaremos a los socios de negocios a pasar a niveles nuevos de especialización, lo que les permite ganar experiencia y conocimiento de manera más fácil en los productos recientemente adquiridos por Oracle, lo cual hace que puedan ampliar sus propias carteras de servicios y productos”, Sandra Vaz, vicepresidente de Alianzas y Canales de Oracle para América Latina.

Todos los socios de negocios registrados de Oracle estarán habilitados a participar del evento virtual que tendrá lugar el 7 de julio de 2009 utilizando su autenticación y clave de Oracle PartnerNetwork.

Todo el contenido estará disponible en Oracle PartnerNetwork durante varios trimestres posteriores al evento.
“El éxito de nuestros socios de negocios es nuestro éxito,” dijo Judson Althoff, vicepresidente de grupo de Alianzas y Canales Globales, Oracle.
“Este evento simboliza un nuevo nivel de transparencia entre Oracle y nuestra amplia comunidad de socios de negocios globales conformada por más de 20.000 integrantes”.

Añadió, “en el plano internacional, la actividad comercial de los socios representa más del 40% de nuestros ingresos.
El hecho de brindar a nuestros socios de negocios la misma información con la que cuentan nuestros equipos de ventas ayuda a alinear nuestras estrategias y esfuerzos de ventas. En definitiva, esto produciría más valor para nuestros clientes finales.”

Crear una opción en el Menú de Linux para llamar al Forms o Reports Jdeveloper

Estas haciendo una migración de Forms y Reports de Oracle de ambiente MS-WINDOWS a una aplicación de tres capas con OracleAS Forms y Reports Services, en sistema operativo Linux y necesitas crear una opción rápida de acceso al aplicativo de Jdeveloper Forms o Reports.?
La migración de plataforma de "D.O.S. Gráfico " a Linux, requiere que recompiles librerías, formas y reportes en el nuevo sistema operativo. Para esto necesitas conocer cuál es el ejecutable que debes llamar de jdeveloper 10g, para completar estas tareas.
Vamos a crear una opción de menú en linux, para que en la opción de menú de "Applications", en "Programming", te aparezca el acceso al Jdeveloper.

Primero que todo con el usuario root vamos a crear el archivo jdeveloper.desktop, esto lo puede hacer en el directorio casa del usuario oracle.

El archivo debe contener las siguientes entradas:

--- jdeveloper.desktop archivo --
[Desktop Entry]
Name=Oracle Jdeveloper
Comment= Ambiente gráfico de trabajo JDEVELOPER
Icon=/opt/product/jdeveloper/xdk/doc/java/xsql/images/jdeveloper.gif
Exec=/home/oracle/jdev10g.sh
Terminal=false
Type=Application
Encoding=UTF-8


Los tabs "Name", "Comment" son descripciones que puedes escoger a gusto.
El tab de "Icon", ubica una imagen que identifique a la herramienta para la versión que este utilizando.
El tab "Exec", describe el archivo de tipo shell ( procesamiento por lotes para los usuarios de MS-Windows ) que ejecutará la herramienta, con la definición de las respectivas variables de ambiente.
Los tab "Terminal" y "Type" son obligatorios. El tab "Encoding", es para el set de caracteres que vamos a utilizar.
Ahora definamos el archivos que vamos a utilizar para llamar la aplicación.

Jdev10g.sh
------------ script --------------

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

ORACLE_SID=admin
export ORACLE_SID
PATH=$PATH:$HOME/bin
ORACLE_BASE=/opt/product
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/jdeveloper
export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/forms/mesg:$HOME/bin:$PATH
export PATH
TMPDIR=/tmp
TMP=/tmp
export TMPDIR TMP
export PATH
unset USERNAME
TERM=vt220
export TERM
PATH_APP=/aplic5
export PATH_APP
FORMS_PATH=$ORACLE_HOME/forms:$PATH_APP/apartados:$PATH_APP/apartados/fuentes:$PATH_APP/aplic/comun/libs:$PATH_APP/comun/libs
export FORMS_PATH
LD_LIBRARY_PATH=$PATH_APP/aplic/comun/libs:$PATH_APP/libs:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jdk/jre/lib/i386/server:$ORACLE_HOME/jdk/jre/lib/i386/native_threads:$ORACLE_HOME/jdk/jre/lib/i386:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
if echo $LANG /bin/grep -i '\.utf.*8' > /dev/null
then
export LANG=`echo $LANG /bin/sed 's#\.[uU][tT][fF].*8.*##'`
fi
/opt/product/jdeveloper/bin/frmbld.sh


------ Fin de script -----
Para que el script funcione, debes modificar las rutas en donde fue instalada la herramienta de jdeveloper. En la definición de LD_LIBRARY_PATH, debes incluir, la ruta de las librerías que estan asociadas a los "FORMS", con los cuales vas a trabajar.
Para crear la opción para el Reports Jdeveloper, cambia las descripciones en el archivo jdeveloper.desktop y en lugar de llamar a "frmbld.sh", hazlo a "rwbuilder.sh".

miércoles, 15 de julio de 2009

Ejecutando root.sh en LINUX despues de instalar Clusterware Software genera error PROT-1 ORCCONFIG no puede ser inicializado

Al finalizar la instalación del software de clusterware, tanto en el nodo desde donde ejecutas el runInstaller, así como en el ó los nodos remotos, se debe ejecutar en forma individual y en orden, -no en paralelo-, el script root.sh en cada nodo en una pantalla terminal - con el usuario root- .

Este proceso puede dar como resultado el error PROT-1 ORCCONFIG no puede ser inicializado, el cuál se debe a un problema con el formato de las áreas de voting ó de cluster registry.

Para soluccionar el problema, procede a formatear ambas áreas nuevamente y vuelve a ejecutar la instalación del producto.

Esta vez, una vez concluída la instalación y posteriormente con la ejecución del script root.sh no dará ningún error. Se iniciará la configuración de servicios para el init.d, logrando observar como se agregan cada uno de los servicios para el nodo, para el proceso background de clusterware.
Importante: Antes de ejecutar la instalación del software de clusterware, cree una liga símbólica al interpretador del shell de la siguiente manera: ln -s /usr/bin/sh /usr/local/bin/ssh.
Si usted no realizó el paso anterior antes de hacer la instalación de software procesa a detener los servicios de clusterware con el comando: crsctl stop crs y reiniciarlo con crsctl start crs.

Error en link de componentes cuando se instala el ClusterWare Software

Una vez que tienes las áreas de voting y cluster registry definidas, se procede a instalar el software del Clusterware.
Tienes las variables de ambiente configuradas según las guías de instalación, sin embargo, a la hora de realizar el link de los componentes del software, este falla con múltiples errores, sin causa aparente.


Consejo: Redefine la variable de PATH, incluyendo de primero la ruta "/usr/bin: .."

Resultado: La instalación del Clusterware termina sin errores.

lunes, 13 de julio de 2009

Limpiando Alertas desplegadas en el Oracle Database Control 10g

Tal y como lo dice un artículo de databasejournal el intentar limpiar las alertas que se despliegan en el Database Control de nuestras bases de datos Oracle 10g, puede ser una de las experiencias más frustrantes.

Si mi base de datos muestra un poco más de 120 alertas y debo ingresar a cada una de ellas, para limpiar la notificación de la alerta respectiva, perfectamente, podría gastar un poco más de 2 horas en esta tarea.

El siguiente paso, le permite purgar ( limpiar ) la totalidad ó parte de las alertas mostradas en Database Control de la base de datos.

Para poder tener acceso a las alertas, es necesario conectarnos con el usuario SYSMAN de la base de datos.

SQL> connect sysman/oracle@orcl
Connected.

El objeto MGMT_CURRENT_SEVERITY, es donde se almacenan todas las alertas de notificación del sistema de monitoreo automático de la base de datos.

SQL> desc mgmt_current_severity
Name
-------------------------
TARGET_GUID
METRIC_GUID
COLLECTION_TIMESTAMP
LOAD_TIMESTAMP
SEVERITY_CODE
SEVERITY_TYPE
SEVERITY_GUID
ANNOTATED_FLAG
KEY_VALUE
MESSAGE
MESSAGE_NLSID
MESSAGE_PARAMS
ACTION_MESSAGE
ACTION_NLSID
ACTION_MESSAGE_PARAMS
ADVISORY_ID

De este objecto, los campos más relevantes son:

  • El advisory_id, identificador del consejero que notifica el evento.

  • El message, mensaje desplegado en nuestra pantalla del browser, con la descripción del mensaje

  • El metric_guid, identificador para tipo de clasificación de mensaje generado. Los mensajes son agrupados de acuerdo a un grupo de métricas definidas.

Si quisieramos conocer la cantidad de eventos por tipo de notificación, podríamos realizar la siguiente consulta en la base de datos.

SQL> select count(*), metric_guid from mgmt_current_severity
2 group by metric_guid;

COUNT(*) METRIC_GUID
---------- --------------------------------
2 1EA69E018E163E3E323609D334EE8E20
4 2448AD7604076832840D5B18E562B9C2
1 8B2817E630D4445E454F5487FB8B8C19
117 AC73A2336A028A587865B6C18021889D
1 C733EA1CFA96377F492528E305462C9D
1 D6438569B496BC9205481E8A70F92F1E
1 F0618F81F9BB09B4767ECFF97F465BF7
2 F87A9D0AF478AE0C2084273063AECA60


8 rows selected.


Ahora si quisieramos limpiar todas los eventos registrados para un tipo de consejero específico, podríamos realizarlo de la siguiente manera:

SQL> begin
2 delete from mgmt_current_severity
3 where metric_guid='AC73A2336A028A587865B6C18021889D';
4 end;
5 /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.


Si consultamos nuevamente la tabla, obtendríamos el siguiente resultado:
SQL> select count(*), metric_guid from mgmt_current_severity
2 group by metric_guid;

COUNT(*) METRIC_GUID
---------- --------------------------------
2 1EA69E018E163E3E323609D334EE8E20
1 8B2817E630D4445E454F5487FB8B8C19
1 C733EA1CFA96377F492528E305462C9D
1 D6438569B496BC9205481E8A70F92F1E
1 F0618F81F9BB09B4767ECFF97F465BF7
2 F87A9D0AF478AE0C2084273063AECA60

6 rows selected.


Si deseamos borrar todo el historial de notificaciones:

SQL> begin
2 delete from mgmt_current_severity;
3 end;
4 /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL>

Ahora la pantalla principal de Database Control, se podría observar de la siguiente manera:


El documento original lo pueden ver completamente en:
http://www.databasejournal.com/features/oracle/article.php/3694541/Clearing-Alerts-in-Enterprise-Manager.htm

Instalación de WebUtil para OracleAS 10g Linux RH 5.2 ES

Instalación de WebUtil para OracleAS 10g
LINUX Red Hat 5.2 Enterprise Server

Los siguientes son los pasos para llevar a cabo la configuración de Webutil en un ambiente Linux RH 5.2ES. Puede ser utilizado como guía para instalación en otros sabores de Linux.

Pre-requisitos


1. Descargar los siguientes archivos:
Webutil_106.zip
http://www.oracle.com/technology/software/products/forms/index.html
Jacob_18.zip http://prdownloads.sourceforge.net/jacob-project/jacob_18.zip

Los dos archivos deben se desempacados en un directorio temporal. Se debe hacer con el usuario “oracle”. Todas las tareas de aquí en adelante deben ser llevadas a cabo con el usuario "oracle".

2. La carpeta webutil debe ser creada en la ruta $ORACLE_OAS/forms.
3. Copiar el archivo frmwebutil.jar del directorio java creado como producto del webutil_106.zip al directorio $ORACLE_OAS/forms/java
4. Copiar los archivos webutil.pll y webutil.olb ubicados en la raíz del directorio webutil_106.zip a $ORACLE_OAS/forms

5. Crear el usuario Webutil
create user webutil identified by webutil default tablespace users quota unlimited on users;
grant create session to webutil;
grant create public synonym to webutil;
grant create procedure to webutil;
6. Ejecutar el archivo create_webutil_db.sql, ubicado en la raíz del directorio webutil_106, con el usuario webutil.
7. Crear un respaldo del directorio $ORACLE_OAS/forms/server.
8. Copiar el contenido del directorio “server”, de la carpeta webutil_106 al directorio $ORACLE_OAS/forms/server.
9. Copiar los archivos jacob.dll y jacob.jar a las rutas $ORACLE_OAS/forms y $ORACLE_OAS/forms/java
10. Crear el directorio $ORACLE_OAS/forms/webutil
11. Copiar del directorio webutil_106, los archivos
· d2kwut60.dll
· jacob.dll
· JNIsharedstubs.dll
12. Verificar que el archivo webutil.cfg exista en el directorio $ORACLE_OAS/forms/server con al menos el siguiente contenido:

logging.file=
logging.enabled=FALSE
logging.errorsonly=FALSE
logging.connections=FALSE
install.syslib.0.7.1=jacob.dll942081.0true
install.syslib.0.9.1=JNIsharedstubs.dll655821.0true
install.syslib.0.9.2=d2kwut60.dll1925121.0true

13. Copiar jacob.jar al directorio $ORACLE_OAS/forms/java
14. Copiar del directorio webutil_106/java al directorio $ORACLE_OAS/forms/java los scripts

  • forms_base_ie.js
  • forms_ie.js

15. Copiar webutil.olb, webutil.pll, WU_TEST_106.fmb al directorio $ORACLE_OAS/forms
16. Copiar los archivos webutilbase.htm, webutiljini.htm, webutiljpi.htm al directorio $ORACLE_OAS/forms/server
17. En el archivo formsweb.cfg, debe crearse la sección [webutil]

[webutil]
WebUtilArchive=frmwebutil.jar,jacob.jar
WebUtilLogging=off
WebUtilLoggingDetail=normal
WebUtilErrorMode=Alert
WebUtilDispatchMonitorInterval=5
WebUtilTrustInternal=true
WebUtilMaxTransferSize=16384
baseHTMLjinitiator=//Z/comun/libs/webutil/webutiljini.htm
baseHTMLjpi=webutiljpi.htm
archive_jini=frmall_jinit.jar,frmwebutil.jar,jacob.jar
archive=frmall.jar
lookAndFeel=oracle
baseHTML=webutilbase.htm

18. Compilar la librería webutil.pll

frmcmp.sh MODULE=$ORACLE_OAS/forms/webutil.pll USERID=webutil/webutil@ MODULE_TYPE=LIBRARY OUTPUT_FILE=$ORACLE_HOME/forms/webutil.plx

Se debe tener cuidado, la librería webutil.plx debe quedar compilada en el directorio indicado.
19. Compilar la forma WU_TEST_106.fmb

frmcmp.sh MODULE=$ORACLE_OAS/forms/WU_TEST_106.fmb USERID=webutil/webutil@ MODULE_TYPE=FORM OUTPUT_FILE=$ORACLE_HOME/forms/WU_TEST_106.fmx

La forma debe compilar sin errores.

20. Probar la funcionalidad del WEBUTIL
Dirección ejemplo:

http://host:7778/forms/frmservlet?form=WU_TEST_106.fmx
Dar click en el botón “GET CLIENT INFO” y verificar la información desplegada.

21. Para cada sección del aplicativo en el archivo formsweb.cfg deben agregarse las siguientes líneas:
[aplicacion1]
workingDirectory=/aplicacion1/bin
baseHTMLjinitiator=/aplicacion1/comun/libs/webutil/webutiljini.htm
WebUtilArchive=frmwebutil.jar,jacob.jar
archive_jini=frmall_jinit.jar,frmwebutil.jar,jacob.jar,icons.jar,iconos.jar
imagebase=codebase

miércoles, 8 de julio de 2009

Configuración de OracleAs Forms y Reports Services para Mozilla FireFox

En la fase de implementación que estamos, se nos ocurrió la grandiosa idea de utilizar clientes de linux ( Ubuntu, Fedora, Mandriva ), para "deployar" las formas depositadas en nuestro servidor de aplicaciones.

La primera barrera a sortear ha sido, que la versión de Mozilla FireFox, para las últimas versiones de estos sabores de LINUX, no funciona con el plugin de JRE 1.4, que automáticamente, es dirijido a nuestro navegador cuando ingresamos a la aplicación en el servidor OracleAS Forms y Reports Services (OracleAS FRS). El FireFox, no reconoce al plugin presentado por el servidor de aplicaciones, como válido. Cuando revisamos los plugins del navegador, es posible, que podamos observar el plugin de JRE 1.6 ya instalado y aún así no funciona.

Si no tenemos instalado JRE 1.6 y lo instalamos en nuestra estación de trabajo LINUX, por ejemplo; sigue de "necio" el OracleAS FRS, queriendo instalar la versión JRE 1.4, que no se deja instalar.

Adaptando un documento encontrado en el blog "LEARN DISCOVERER BLOG" , modifiqué el archivo de configuración en el servidor de aplicaciones para el archivo "formsweb.cfg" en $ORACLE_HOME/forms/server/, en las siguientes líneas:


Las líneas en rojo, son los nuevos valores para hacer compatible al FireFox 3.0 con el OracleAS FRS.
..
# Parameter related to the version of the Java Plugin
# Configuracion plugin JAVA para Firefox 3.0
# Ronald Vargas, TI 26 de Junio de 2009
# jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA
jpi_classid=clsid:CAFEEFAC-0016-0000-0022-ABCDEFABCDEF
# Parameter related to the version of the Java Plugin
jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i
586.cab#Version=1,4,2,06
# Parameter related to the version of the Java Plugin
# jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06
jpi_mimetype=application/x-java-applet;jpi-version=1.6.0_06
# EM config parameter
# Set this to "1" to enable Enterprise Manager to track Forms processes
em_mode=0

...

Luego procedemos a reiniciar los servicios con "opmnctl stop all" y "opmnctl start all".

Ingresamos en nuestro browser y "Abracadabra", ahora se despliegan sin dificultad las formas y los reportes en el FireFox 3.0 en Linux.

Esta tarea tiene importancia, ya que revisando la información de navegadores utilizados en los accesos a mi blog, me he encontrado una creciente utilización de FireFox como browser de facto. Saquen ustedes mismos sus propias conclusiones.