sábado, 27 de noviembre de 2010

Acucobol + Oracle

Aún en esta época nos encontramos con instalaciones de Cobol, que soportan ambientes de producción, es por eso que me he visto en la necesidad de conectar oracle con Acucobol, para quienes tengan esta misma necesidad, aquí va una ayuda.

1. Lo primero es que debemos contar con un driver para Acucobol , Microfocus ofrece uno muy interesante. (http://www.microfocus.com/products/micro-focus-developer/extend/acu4GL.aspx)

Una vez instalado el driver configuramos el Oracle Heterogeneos Services que es una tecnología ofrecida por Oracle para conectar bases de datos no-Oracle, así que no solo permite conectar ambientes cobol, también nos sirve para SQL server, Excel, Access etc.

2.Crear  el ODBC  con el Drriver AcuODBC Drivers, especificando donde se encuentran los datos y los archivos XFD



3.Modificar el listener .ora que se encuentra en la ruta C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN  , agregar la entrada del ODBC
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = ACUODBC)
      (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
      (PROGRAM = hsodbc)
    )

    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = Pruebas)(PORT = 1522))
    )
  )
DEFAULT_SERVICE_LISTENER = (XE)

4.Adicionar en el Tnsnames.ora la entrada del acucobol, el SID= el nombre del ODBC creado en el punto 1 
 
Acucobol=
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=TCP)(HOST=Pruebas)(PORT=1522))
    (CONNECT_DATA=(SID=Acucobol))
    (HS=OK)
  )

5.Crear el archivo init.ora en la ruta C:\oraclexe\app\oracle\product\10.2.0\server\hs\admin, el archivo debe llamase init + NomODBC  + .ora relacionado en el punto uno (initAcucobol.ora), puede tomar el archivo de ejemplo inithsodbc.ora y modificar el nombre y las entradas.


# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent.
# HS init parameters
HS_FDS_CONNECT_INFO = Acucobol
HS_FDS_TRACE_LEVEL = OFF
# Environment variables required for the non-Oracle system
#set <envvar>=<value>

En la variable HS_FDS_CONNECT_INFO  debe colorcase el nombre del ODBC creado en el punto 1.

6.Ya estamos listos para probar nuestro servicio de acucobol, bajamos el  listener

C:\oraclexe\app\oracle\product\10.2.0\server\BIN>lsnrctl stop
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
The command completed successfully

7.Subimos el listener y debemos ver la entrada que creamos con el nombre ACUCOBOL
C:\oraclexe\app\oracle\product\10.2.0\server\BIN>lsnrctl start
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Starting tnslsnr: please wait...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
System parameter file is C:\oraclexe\app\oracle\product\10.2.0\server\network\ad
min\listener.ora
Log messages written to C:\oraclexe\app\oracle\product\10.2.0\server\network\log
\listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR
_XEipc)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Pruebas)(PORT=1522)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias                       LISTENER
Version                   TNSLSNR for 32-bit Windows: Version 10.2.0.1.0
Start Date               17-NOV
Uptime                    0 days 0 hr. 0 min. 2 sec
Trace Level              off
Security                   ON: Local OS Authentication
SNMP                      OFF
Default Service         XE
Listener Parameter File  C:\oraclexe\app\oracle\product\10.2.0\server\network\a
dmin\listener.ora
Listener Log File        C:\oraclexe\app\oracle\product\10.2.0\server\network\l
og\listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR_XEipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Pruebas)(PORT=1522)))
Services Summary...
Service "ACUCOBOL" has 1 instance(s).
  Instance "ACUCOBOL", status UNKNOWN, has 1 handler(s) for this service...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

8.Ingresamos como un usuario y creamos el data base link

C:\oraclexe>sqlplus pruebas/pruebas@XE
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Nov 27 12:01:30 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> create database link Acucobol using 'Acucobol';
Database link created.

8.Ahora hacemos una prueba sencilla para usar el dblink creado
SQL> select count(*) from all_tables@Acucobol;
  COUNT(*)
----------
       135

Estamos listos para llamar a cualquier tabla del acuodbc que contenga una describicion XFD



viernes, 26 de noviembre de 2010

Cambiando Charater Set en Oracle XE

Hace unos días instale la base de datos XE, por defecto el character set es AL32UTF8, necesitaba uno diferente , el instalador no me deja cambiar los parametros, que hacer?

la solucion que encontre , fue muy sencilla

1. Instalar la Base de Datos XE
2. Borrar la Base de datos
3. Crear manualmente la Base de datos con el caracter que necesitaba

4. Crear paquetes, utilitarios y esquemas de
administracion y Listo!!




Crear Archivo de Pfile
Antes de borrar la base de datos debemos sacar una copia de los parametros del sistema
que necesitariamos mas adelante.

C:\oraclexe\app\oracle\product\10.2.0\server\bin\sqlplus / as sysdba
SQL> create pfile='c:\temp\pfilexe.ora' from spfile;
File created.
Borrar la Base de Datos

rem Ingresamos al Sql plus
C:\oraclexe\app\oracle\product\10.2.0\server\bin\sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Nov  2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
rem  Bajamos la base de datos
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
rem  Montamos la base de datos en modo exlusivo
SQL> startup mount exclusive
ORACLE instance started.
Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             209715444 bytes
Database Buffers          591396864 bytes
Redo Buffers                2904064 bytes
Database mounted.
SQL>alter system enable restricted session;
rem borramos la base de datos
SQL> drop database;
SQL> base de datos borrada;
SQL>Desconectadode Oracle Database

Crear Base de Datos Manual  con usuarios sys

C:\oraclexe\app\oracle\product\10.2.0\server\bin\sqlplus / as sysdba
SQL>startup nomount pfile='c:\temp\pfilexe.ora'
SQL>spool CreaBDD.log

SQL> create database XE
 character set "WE8ISO8859P1" 
 datafile
 'C:\oraclexe\oradata\tbs_SYSTEM_BD_01.dbf' size 340M
  autoextend on next 5M maxsize 5000M
  extent management local
 logfile
  group 1 ('C:\oraclexe\oradata\redo_DB_1.log') size 5M,
  group 2 ('C:\oraclexe\oradata\redo_DB_2.log') size 5M,
  group 3 ('C:\oraclexe\oradata\redo_DB_3.log') size 5M
 SYSAUX datafile 'C:\oraclexe\oradata\sysaux_DB_01.dbf'
        size 400M reuse autoextend ON NEXT  5M MAXsize UNLIMITED
 undo tablespace UNDO
 datafile 'C:\oraclexe\oradata\ts_UNDO_DB_01.dbf' size 90M
 default temporary tablespace TMP
 tempfile 'C:\oraclexe\oradata\ts_TMP_DB.dbf' size 20M
 extent management local uniform size 1M
 maxlogfiles    20
 maxlogmembers  5
 maxdatafiles   500
 maxinstances   2;

SQL>rem creación de catalogo, vistas, sinonimos de la Base de Datos
SQL>@C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catalog.sql

SQL>rem creación de catalogo de procedimientos almacenados,paquetes y utilitarios
SQL>@C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catproc.sql

SQL>rem creación de synonimos de diccionario de datos
SQL>@C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catdbsyn.sql
SQL>spool off;

crear el archivo spfile y subir la base de datos con el spfile
SQL>create spfile from pfile='c:\temp\pfilexe.ora';
SQL>shutdown immediate;
SQL>startup ;

Visual Basic 6.0 + Windows 7

Aunque este blog esta dedicado a las bases de datos, no podía dejar pasar este pequeño error con visual basic 6.0  en Windows 7.0 , cuando ejecutamos el programa. error "ActiveX component can't create object"


Este error  puede ocurrir por 2 razones
1. Faltan las dll asociadas al programa (recomendaría ejecutar los instaladores)

2. No se encuentra instalada la maquina virtual java de Microsoft para x86.


Cuando realices estas dos cosas muy probablemente tu error habrá desaparecido.


La maquina virtual de Microsoft la puedes encontrar en los instaladores de Visual Basic
si no, descárgala de aqui:

 Descargar MSJAVX86