viernes, 6 de enero de 2012

Tamaño de la Base de Datos Oracle

¿Cómo determinar el tamaño de una base de datos Oracle?

A  menudo nos hacen la pregunta de ¿cuál es el tamaño de nuestra base de datos? 
Podríamos decir cuál es el tamaño de los datos, pero considero que una respuesta más amplia sería  que el tamaño debería estar suministrado por nuestros tablespaces (incluyendo los temporales) más nuestros redolog y si la base de datos se encuentra en modo archivelog entonces agregar el tamaño de los directorios que almacenan los archivelogs.

Esta pequeña consulta responde a esta pregunta, de tamaño total de la base de datos, además de aportar alguna información sobre la utilización de los tablespaces.

Tamaño Total Base de Datos

SELECT sum(total) + sum(logs) +  sum(dir_archivelog) TamanoBDD
  FROM  (
  -- Espacio Libre Tablespaces
  select g.tablespace_name TS,
               ROUND(sum(g.bytes) / 1024 / 1024, 2) libre,
               0 total,
               0 logs,
               0 dir_archivelog
          from dba_free_space g
         group by g.tablespace_name
        union all
   --Espacio Total  Tablespaces   
        select f.tablespace_name,
               0,
               ROUND(sum(f.bytes) / 1024 / 1024, 2),
               0,
               0
          from dba_data_files f
         group by f.tablespace_name
        union all
   --Espacio de Tablespaces Temporales    
        SELECT v.TABLESPACE_NAME,
               free_blocks * 8192 / 1024 / 1024 libre,
               round(sum(bytes) / 1024 / 1024, 2) total,
               0,
               0
          FROM v$sort_segment v
          left outer join dba_temp_files t
            on v.TABLESPACE_NAME = t.tablespace_name
         group by v.TABLESPACE_NAME, free_blocks
        union all
  --Espacio de los Redologs     
        select 'REDOLOGS', 0, 0, round(sum(bytes) / 1024 / 1024, 2), 0
          from v$log
        union all
--Espacio del directorio que almacena los Archivelogs
        select 'DIR ARCHIVELOGS',
               0,
               0,
               0,
               to_number(substr(Display_value,
                                1,
                                INSTRC(Display_value, 'G', 1) - 1))
          from v$parameter
         where name = 'db_recovery_file_dest_size')

Con Informacion de uso de Los Tablespaces 
 
SELECT ts nombre_tablespace,
       sum(libre) Espacio_Libre,
       sum(total) Espacio_Total,
       sum(total) - sum(libre) Espacio_usado,
       sum(logs) Espacio_redoLogs,
       sum(dir_archivelog) Espacio_dir_archivelog
 FROM      (
  -- Espacio Libre Tablespace
  select g.tablespace_name TS,
               ROUND(sum(g.bytes) / 1024 / 1024, 2) libre,
               0 total,
               0 logs,
               0 dir_archivelog
          from dba_free_space g
         group by g.tablespace_name
        union all
   --Espacio Total   Tablespace
        select f.tablespace_name,
               0,
               ROUND(sum(f.bytes) / 1024 / 1024, 2),
               0,
               0
          from dba_data_files f
         group by f.tablespace_name
        union all
   --Espacio de Tablespaces Temporales    
        SELECT v.TABLESPACE_NAME,
               free_blocks * 8192 / 1024 / 1024 libre,
               round(sum(bytes) / 1024 / 1024, 2) total,
               0,
               0
          FROM v$sort_segment v
          left outer join dba_temp_files t
            on v.TABLESPACE_NAME = t.tablespace_name
         group by v.TABLESPACE_NAME, free_blocks
        union all
  --Espacio de los Redologs     
        select 'REDOLOGS', 0, 0, round(sum(bytes) / 1024 / 1024, 2), 0
          from v$log
        union all
--Espacio del directorio que almacena los Archivelogs
        select 'DIR ARCHIVELOGS',
               0,
               0,
               0,
               to_number(substr(Display_value,
                                1,
                                INSTRC(Display_value, 'G', 1) - 1))
          from v$parameter
         where name = 'db_recovery_file_dest_size')
 group by ts

Si necesitas mas información histórica acerca del uso de los tablespace, te recomiendo usar las vistas dba_hist_tablespace_stat y dba_hist_tbspc_space_usage que proporciona el AWR

lunes, 2 de enero de 2012

ORA-31634: Job Already Exists - El Trabajo ya existe

Export: Release 10.2.0.3.0
Connected to: Oracle Database 10g Enterprise Edition Release ORA-31634: job already exists
ORA-31664: unable to construct unique job name when defaulted

Este error ocurre generalmente cuando existen trabajos huérfanos de datapump que no se han limpiado de la base de datos

¿Cómo saber donde están esos trabajos?
en la vista dba_datapump_jobs se pueden visualizar (no usar las vistas gv$datapump_job que muestra los trabajos que actualmente están corriendo)

SELECT *  FROM dba_datapump_jobs
WHERE job_name NOT LIKE 'BIN$%'
AND STATE = 'NOT RUNNING'

martes, 13 de diciembre de 2011

Oracle Dead Connection Detection

Oracle Dead Connection Detection (ODCD) es una característica implementada a partir de  SQL *Net 2.1 detecta cuando  una conexión TCP ha terminado inesperadamente liberando los recursos asociados a esta.                                                                    Cuando una conexión es establecida, el SQL*NET lee el archivo de parámetros sqlnet.ora, ubicado en la ruta  $ORACLE_HOME/network/admin , este archivo debe contener el parámetro SQLNET.EXPIRE_TIME que especifica el intervalo de tiempo en minutos, para enviar un paquete de verificación  a las conexiones cliente y/o servidor establecidas y saber si aun siguen activas

cuando el tiempo expira, SQL*NEt del lado del servidor, envía un Paquete de prueba al cliente si el cliente tiene la conexión activa, la prueba se descarta y el temporizador es reiniciado. si el cliente ha terminado anormalmente, el servidor recibe un error del envió del paquete  y el SQL*Net envía una señal al sistema operativo para que libere los recursos asociados a esa conexióny al proceso PMON para que realice la limpieza del proceso y los recursos en la Base de datos.

martes, 23 de agosto de 2011

Error ORA-01843: Not a Valid Month

Al tratar de realizar un import de un esquema

c:\>  imp system/prueba@prueba  file=prueba.dmp  log=prueba.log fromuser=scott touser=tiger
Recibimos el error
IMP-00017: following statement failed with ORACLE error 1843:
" ALTER TABLE "TABLA1" MODIFY ("FECHA" DEFAULT '01-01-2009' )"

IMP-00003: ORACLE error 1843 encountered
ORA-01843: not a valid month

Este error ocurre generalmente por que tenemos configurado el NLS_DATE_FORMAT diferente a como esta la tabla.

Para solucionarlo simplemente configuramos las variables (para sistemas unix)
export NLS_DATE_FORMAT=DD-MM-RRRR
export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

Si estamos en un sistema operativo windows debemos modificar estas entradas en el regedit :)

miércoles, 6 de julio de 2011

Iniciar y Detener Bases de Datos Oracle Automáticamente

Lo primero que debemos hacer si queremos iniciar y detener nuestras bases de datos Oracle automáticamente es modificar el archivo oratab, en éste archivo se almacena la información de las bases de datos instaladas además de indicar si las instancias deben iniciar automáticamente.


Editar el archivo oratab
editamos el archivo oratab con usuario root
vi  /etc/oratab
editamos la linea TEST:/oracle/app/oracle/10.2.0/db:N y la cambiamos a Y
TEST:/oracle/app/oracle/10.2.0/db:Y

martes, 28 de junio de 2011

Restaurar Base de Datos Master en SQL Server 2000

Mover bases de datos entre servidores en SQL SERVER es generalmente sencillo, pero cuando se trata de la base de datos Master, es un poco más complejo. Aquí va un ejemplo de cómo restaurar la base de datos master en otro servidor.

Vamos a asumir que el SQL SERVER 2000 ya esta instalado en la nueva máquina, y tiene los mismos service packs a nivel de base de datos de la maquina original, ahora seguiremos estos pasos:

1. En la nueva máquina vamos a detener los servicios del SQL SERVER 2000
net stop MSSQLServer

2. Iniciar  el servicio SQL SERVER en modo single-user
sqlservr -c -m

viernes, 13 de mayo de 2011

Matar sesiones de un usuario

En Oracle existen varias formas de Matar una sesión de usuario, Aquí va  un ejemplo de un procedimiento que puede hacerlo, sirve para versiones  10g y  anteriores, recibe como parametro el usuario a cancelar y elimina todas las sesiones

 CREATE OR REPLACE PROCEDURE Matar_una_sesion ( Usuario in varchar2)  AS
Sesion  varchar2(20);
Serial  varchar2(20);
Cursor_Sql integer;
Retorno integer;
Comando VARCHAR2(100);

viernes, 1 de abril de 2011

Error en Listener "The listener supports no services "

Hace poco estabamos realizando una instalación de Oracle 11g y cambiamos el puerto del listener, configuramos el listener.ora el tnsnames.ora pero aún asi no funcionaba.

Entrada en el tnsnames.ora
TEST11G =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =TEST)(PORT = 1523)))
    (CONNECT_DATA =
     (SERVICE_NAME = TEST11G)))


Entrada del listener.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = TEST)(PORT = 1523))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1523))
    )
  )
ADR_BASE_LISTENER = /oracle/app/oracle


domingo, 20 de marzo de 2011

Recuperar Base de Datos Oracle Sin Backup

Esta nota pretende mostrar un ejemplo de cómo recuperar una base de datos cuando no tenemos un backup y por ejemplo perdemos un disco ó tenemos un datafile corrupto; tal vez no logremos recuperar la información del disco, pero podremos poner de nuevo la base de datos en uso, aunque sin algún(os) tablespace(s).

Cuando encontramos una base de datos abajo e intentamos darle startup nos encontraremos con algo como:

SQL> startup
ORACLE instance started.

viernes, 4 de marzo de 2011

Cambiando El Puerto de Listener

Las bases de datos Oracle trabajan por defecto por el Puerto 1521 , si quieres que no sea tan obvio para alguien hallar tu base de datos, puedes probar cambiando el puerto del listener, he aquí un ejemplo.

En la ruta
/oracle/app/oracle/10.2.0/db/network/admin
Hallamos el archivo de configuración del listener, llamado listener.ora
allí cambiamos el numero del puerto al que queremos.

LISTENER_TEST =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = TEST1)(PORT = 4543))
    )
 )


Luego en nuestra base de datos debemos cambiar el parametro local_listener
sqlplus / as sysdba
SQL>  show parameter local_listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string

jueves, 17 de febrero de 2011

Migrando desde Sql Server 2005 Hacia Oracle

Algunos hemos tenido la necesidad de migrar desde Bases de datos de SQL Server hacia Oracle,  cuando son tablas sencillas, bastaría un DTS pero en esquemas más complejos esta opción no es viable, Oracle ha ampliado su herramienta de Oracle SQL developer para incorporar esta  funcionalidad.
Aquí va un pequeño Ejemplo con la base de datos de Sql Server AdventureWorks :).

El primer paso es descargar el sql developer de la página de oracle http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

Luego vamos a necesitar un driver JDBC para SQL Server, lo podemos descargar de la pagina  http://sourceforge.net/projects/jtds/files/jtds/1.2.5/

Despues de abrir el SQL Developer vamos a la opción Preferences del menu Tools

lunes, 7 de febrero de 2011

Instalando Oracle 11g R2 en ASM en HP-UX

En dias pasados, vimos como instalar el  ASM 11g R2 ahora sobre este ASM, realizaremos la instalación de la base de datos Oracle 11g R2. 

De nuevo asumimos que el usuario Oracle y los grupos DBA y Oinstall se encuentran creados y con sus respectivos permisos

PREREQUISITOS

Memoria

-- Requisitos Minimos de Memoria: Al menos 1 Gb de RAM
-- Requisitos de memoria swap
  • Entre 1024 MB and 2048 MB 1.5 del tamaño de la memoria RAM
  • Entre 2049 MB and 8192 MB Igual al tamañao de la memoria RAMMas de 
  • 8192 MB 0.75 del tamaño de la memoria RAM
Parches de Sistema Operativo
PHSS_35979: s700_800 11.23 linker + fdp cumulative patch
PHSS_35978: s700_800 11.23 ac++ runtime (ia: a.06.14, pa: a.03.76)
PHCO_35524: s700_800 11.23 lvm commands patch
PHKL_35478: s700_800 11.23 shmget(2) cumulative patch
PHCO_36673: s700_800 11.23 libc cumulative patch
PHKL_35029: s700_800 11.23 ksleep cumulative patch For HPIA 11.31:
PHKL_35900: 11.31 evacd performance, kvaddr leak panic
PHKL_36248: 11.31 esctl cumulative patch
PHKL_36249: 11.31 esdisk cumulative patch
PHKL_35936: 11.31 call to read(2) or write(2) may incorrectly return -1

miércoles, 19 de enero de 2011

Implementando Oracle Virtual Private Database

Virtual Private Database (VPD) es una de las funcionalidades que nos brinda Oracle Enterprise Edition  para poder realizar restricciones a nivel de filas esto también se podría realizar con vistas o variables de contexto, pero es mucho más simple con VPD. Aquí va un ejemplo de cómo podemos realizarla





**** Nos conectamos como usuarios Sys
C:\>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jan 13 13:04:06 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Release 10.2.0.1.0 - Production

sábado, 8 de enero de 2011

Instalando Oracle ASM 11g R2 en HP-UX

En versiones anteriores, el ASM hacia parte del instalador de la base de datos, a partir de Oracle 11g R2, el ASM(Automatic Storage Management)  hace parte de Oracle Grid Infrastructure, así que si queremos que nuestra base de datos use ASM, debemos instalar Oracle Grid Infrastructure antes de instalar la base de datos.aquí va una guia de como hacerlo para un servidor standalone.


PREREQUISITOS
Memoria
-- Requisitos Minimos de Memoria : 4Gigas  Para ver la memoria en HP-UX
 /usr/contrib/bin/machinfo | grep -i Memory
-- Requisitos Minimos de Memoria Swap : 4Gigas Para ver la memoria swap en HP-UX
/usr/sbin/swapinfo –a

Parches de Sistema Operativo
HP-UX 11iV3 patch Bundle Sep/ 2008 (B.11.31.0809.326a) tal vez lo encuentres como PHKL_40682
PHCO_40381 11.31 Disk Owner Patch
PHKL_38038 vm cumulative patch
PHKL_38938 11.31 SCSI cumulative I/O patch
PHKL_39351 Scheduler patch : post wait hang
PHSS_36354 11.31 assembler patch
PHSS_37042 11.31 hppac (packed decimal)
PHSS_37959 Libcl patch for alternate stack issue fix (QXCR1000818011)
PHSS_39094 11.31 linker + fdp cumulative patch
PHSS_39100 11.31 Math Library Cumulative Patch
PHSS_39102 11.31 Integrity Unwind
PHSS_38141 11.31 aC++ Runtime+

Creación de Links
# cd /usr/lib
# ln -s libX11.3 libX11.sl
# ln -s libXIE.2 libXIE.sl
# ln -s libXext.3 libXext.sl
# ln -s libXhp11.3 libXhp11.sl
# ln -s libXi.3 libXi.sl
# ln -s libXm.4 libXm.sl
# ln -s libXp.2 libXp.sl
# ln -s libXt.3 libXt.sl
# ln -s libXtst.2 libXtst.sl++

Creamos el Oracle Home para la instalación
/oracle/app/oracle/product/11.2.0/grid
Configuramos los discos fisicos para el ASM
Para asegurarnos que los discos estan disponibles, ingresamos a la carpeta /dev/rdisk como usuario root y con la instrucción 
/usr/sbin/ioscan -fun -C disk podemos verlo
y cambiamos los permisos sobre los discos que usaremos

 



Instalador
Iniciamos el Instalador para un servidor standalone

La redundancia sera externa, por que sera manejada por Hardware con un RAID 10, así que no necesitamos que el ASM lo haga



Eligiendo en ORACLE_BASE y el ORACLE_HOME
 
Con esto hemos finalizado la instalacion del ASM :)


jueves, 6 de enero de 2011

Instalando Web Logic 10.32 en HP-UX

Instalando Web Logic 10.32 en HP-UX 11.31
Lo primero son los prerequisitos de sistema operativo 
Prerequisitos

Parches de Sistema Operativo
PHKL_35900:11.31 evacd performance, kvaddr leak panic
PHKL_36248:11.31 esctl cumulative patch
PHKL_36249:11.31 esdisk cumulative patch
PHKL_35936:11.31 call to read(2) or write(2) may incorrectly return -l
PHSS_36354
PHSS_37042
PHSS_37959
PHSS_39100
PHSS_39102
PHCO_40381

Para verificar utilice la opción como usuario root
Swlist –l patch |grep PHCO_40381


Crear links 
En  /usr/lib como root










Parametros de Kernel
Para verificar utilice la opción como usuario root
kcweb


ksi_alloc_max (nproc*8)
executable_stack 0
max_thread_proc 1024
maxdsiz 1073741824 (1 GB)
maxdsiz_64bit 2147483648 (2 GB)
maxssiz 134217728 (128 MB)
maxssiz_64bit 1073741824 (1 GB)
maxuprc ((nproc*9)/10)
msgmap (msgtql+2)
msgmni (nproc)
msgseg 32767
msgtql (nproc)
ncsize (ninode+1024)
ncsize (ninode+1024)
nfile (15*nproc+2048)
nflocks (nproc)
ninode (8*nproc+2048)
nkthread (((nproc*7)/4)+16)

Comprobando la version de JAVA 

cd /opt/java6/bin
./java -version
java version "1.6.0.01"
Java(TM) SE Runtime Environment (build 1.6.0.01-jinteg_06_jun_2008_13_24-b00)
Java HotSpot(TM) Server VM (build 1.6.0.01 jinteg:06.07.08-04:50 IA64, mixed mode)

 
Creamos el directorio home
/oracle/app/oracle/product/wl_10.32

Exportar la Variable del JAVA_HOME
export JAVA_HOME=/opt/java6/jre

Asumimos que el usurario Oracle y los grupos ya estan creados, tambien 
que tenemos suficiente memoria y espacio en disco y en  carpeta temporal.

Iniciando la instalación en entorno grafico
$JAVA_HOME/bin/java -d64 -jar wls1032_generic.jar





Sin actualizaciones de seguridad



















Al final podemos continuar el instalador si queremos crear o actualizar  el dominio :)

martes, 28 de diciembre de 2010

Backup Automático en Sql Server Express

El sql server express es una herramienta muy útil, desafortunadamente no cuenta con el sql server agent, asi que ¿como hacer para programar los backups automáticos?
 Lo haremos utilizando El programador de tareas de windows y el OSQL

1. Lo primero sera crear un dispositivo de backup para nuestra base de datos de prueba.


2.Lo segundo crear el script para realizar el backup a través de la utilidad OSQL (Object Structured Query Language), este script lo ponemos en un archivo con extension  .bat
 Osql -S Nombre_Servidor -U Login(p.ejemplo sa)  -P clave -Q "backup database Prueba to BKP_Pruebas WITH INIT,NOUNLOAD"

3.Finalmente ponemos en el programador de tareas de windows. :)




lunes, 27 de diciembre de 2010

Autonomous Transaction


Es una funcionalidad del PL/SQL en la cual un subprograma puede actuar independientepemente de la transacción que lo contiene.




Miremos como funciona con este ejemplo ....

CREATE TABLE tabla1 (campo int);
CREATE TABLE tabla2 (campo int);
CREATE SEQUENCE secuencia_s ;


/* Este es un trigger normal de inserción, si la transaccion se deshace,
se deshace la insercion en la tabla2 */

CREATE OR REPLACE TRIGGER pa_trigger
AFTER INSERT ON tabla1 FOR EACH ROW
DECLARE
 i PLS_INTEGER;
BEGIN
  select secuencia_s.nextval into i from dual;
  INSERT INTO tabla2
  VALUES
  (i);
END;
 

INSERT INTO tabla1 VALUES (1);
SELECT COUNT(*) FROM tabla1;
count(*)
1
SELECT COUNT(*) FROM tabla2;
count(*)
1
Rollback;
SELECT COUNT(*) FROM tabla1;
count(*)
0
SELECT COUNT(*) FROM tabla2;
count(*)
0


Ahora miremoslo con la transacción autónoma

CREATE OR REPLACE TRIGGER PA_trigger
AFTER INSERT ON tabla1 FOR EACH ROW
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
 i PLS_INTEGER;
BEGIN
  select secuencia_s.nextval into i from dual;
  INSERT INTO tabla2
  VALUES
  (i);
  COMMIT;
END;

/*Realizamos la inserción */
 INSERT INTO tabla1 VALUES (1);
SELECT COUNT(*) FROM tabla1;
count(*)
1
SELECT COUNT(*) FROM tabla2;
count(*)
1

/* si deshacemos la transacción  de la tabla1 */
Rollback;
SELECT COUNT(*) FROM tabla1;
count(*)
0


/* la transacción de la tabla2 quedara confirmada, Es ideal para  manejar logs */
SELECT COUNT(*) FROM tabla2;
count(*)
1

jueves, 16 de diciembre de 2010

Controlando el Acceso a los Datos A través de Vistas

A veces necesitamos controlar el acceso a los datos por columnas o filas, esto se puede realizar fácilmente a través de Vistas. 
En este caso asumiremos que no podemos crear la vista con el dueño del esquema,crearemos  dos usuarios, uno llamado us_consulta que contendrá una  vista del esquema scott y otro llamado us_con_clerk que tendrá solo permisos sobre la vista.

C:\oraclexe>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 15 13:38:44 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

--- Creamos los dos usuarios ---
SQL> create user us_consulta identified by  consulta;
User created.
SQL> create user us_cons_clerk identified by consulta;
User created.

--- Asignamos Permisos ---
SQL> grant create session to us_consulta;
Grant succeeded.
SQL> grant create view to us_consulta,us_cons_clerk ;
Grant succeeded.   

--- Le damos permiso sobre la tabla emp al usuario us_consulta
--- ES muy importante otorgar el permiso con with grant option
--- Para que el usuario us_consulta pueda otorgar el permiso sobre la vista
--- a Otros usuarios
c:\> scott/tiger
SQL> grant select on emp to us_consulta with grant option;
Grant succeeded.

--- Creamos la vista, filtrada por donde necesitamos
SQL> connect us_consulta/consulta
Connected.
SQL> create view VW_CLERK as select * from scott.emp where job='CLERK';
View created.
-- Asignamos permiso
SQL> grant select on vw_clerk to us_cons_clerk;
Grant succeeded.

--- Ya el usuario tiene permiso sobre los datos pero filtrados
SQL> connect us_cons_clerk/consulta
Connected.
SQL> select empno, ename, job, hiredate, sal
  2  from us_consulta.vw_clerk;

     EMPNO ENAME      JOB       HIREDATE         SAL
---------- ---------- --------- --------- ----------
      7369 SMITH      CLERK     17-DEC-80        800
      7876 ADAMS      CLERK     23-MAY-87       1100
      7900 JAMES      CLERK     03-DEC-81        950
      7934 MILLER     CLERK     23-JAN-82       1300

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