Enlaces de Base de Datos en Oracle Apex 5.0

Muchas veces nos puede pasar que tenemos nuestra aplicación en una base de datos Oracle y necesitamos acceder a otra base de datos Oracle en forma remota para acceder a ciertos datos que se encuentran en la base de datos remota y poder trabajarlo en nuestra aplicación APEX de manera local. Y en otras oportunidades puede que necesitemos desde nuestra aplicación Apex acceder a datos de otra base de datos que no es Oracle.

Hoy vamos a ver dos escenarios diferentes, por un lado cómo crear un Enlace de Base de Datos en Oracle Application Express y mostrar los datos remotos de otra base de datos Oracle XE y el segundo escenario, cómo crear un Enlace de Base de Datos desde una base de datos Oracle XE a otra base de datos MySQL.

Escenario 1 – Crear Enlace de Base de Datos de Oracle XE a Oracle XE Remota

Tengo instalada en mi PC local una base de datos Oracle 11g XE con Oracle Application Express  5.0.1 (PC1)

Y por otro lado tengo una máquina virtual en Hyper-V con Windows 7 Enterprise SP1 de 32-bit y Apex 5.0 (PC2)

PC2 – Máquina Virtual

 Ingresamos a una ventana de comandos CMD

C:\> sqlplus /nolog

Ingresamos las credenciales del usuario System para verificar que esquemas tenemos disponibles.

En mi caso dispongo de los siguientes esquemas:

SQL> select username from dba_users;

USERNAME

------------------------------

DEMO

DEMO_APEX

CURSO_APEX

APEX_050000

HR

ANONYMOUS

XDB

FLOWS_FILES

APEX_040000

CTXSYS

MDSYS

SYSTEM

SYS

APEX_PUBLIC_USER

XS$NULL

OUTLN

Vamos a trabajar con el esquema CURSO_APEX

Ingresamos al esquema

SQL> connect miusuario/mipassword@SID

SQL> connect curso_apex/cursoapex@xe

Para conocer las tablas disponibles del usuario curso_apex

SQL> select table_name from user_tables;

TABLE_NAME

------------------------------

DEPT

EMP

DEMO_TAGS

DEMO_TAGS_TYPE_SUM

DEMO_TAGS_SUM

DEMO_CUSTOMERS

DEMO_ORDERS

DEMO_PRODUCT_INFO

DEMO_ORDER_ITEMS

DEMO_STATES

DEMO_CONSTRAINT_LOOKUP

APEX$_ACL

APEX$_WS_WEBPG_SECTIONS

APEX$_WS_ROWS

APEX$_WS_HISTORY

APEX$_WS_NOTES

APEX$_WS_LINKS

APEX$_WS_TAGS

APEX$_WS_FILES

APEX$_WS_WEBPG_SECTION_HISTORY

APEX$TEAM_DEV_FILES

EDU_DEPARTAMENTOS

EDU_PAISES

EDU_ALUMNOS

EDU_PROFESORES

EDU_CURSOS

EDU_MATRICULAS

EDU_MATRICULA_CURSOS

HTMLDB_PLAN_TABLE

EBA_UT_CHART_PROJECTS

EBA_UT_CHART_TASKS

DEMO_CALENDARIO

EBA_DEMO_CAL_PROJECTS

MIS_CURSOS


34 rows selected.

Vamos a usar la tabla EDU_DEPARTAMENTOS para nuestro ejemplo.

SQL> select depto_id c1, nombre c2 from edu_departamentos;

   ID Departamento

----- ------------------------------

    1 Sistemas Informáticos

    2 Negocios

    3 Diseño Gráfico

    4 Arte Plástica

    5 Idiomas

Para ingresar a Oracle Apex desde la PC2 ingresamos la URL http://localhost:8080/apex en el navegador.

Nota: Verificar qué puerto se utilizó cuando se realizó la instalación de Apex.

Luego ingresamos nuestras credenciales para acceder a la página de inicio de Apex.

Para crear el Enlace de Base de Datos en APEX desde la PC1, necesitamos conocer los siguientes datos de la máquina remota (PC2):

  • Nombre del esquema al que queremos acceder
  • La contraseña
  • La IP de su máquina remota o el nombre del host
  • EL puerto donde escucha la base de datos
  • El SID de la base de datos

PC1 – Local

Ingresamos las credenciales de inicio de sesión para ingresar a la página de inicio de APEX.

Antes de crear el Enlace de Base de Datos necesitamos darle permisos de creación de enlace de base de datos a nuestro usuario, en mi caso mi usuario es CLARTECH.

Abrimos una ventana de CMD y abrimos el SQLPlus con las credenciales de sysdba

C:\Users\Clarisa>sqlplus /nolog

SQL> connect sys as sysdba

Enter password:

Connected.

SQL>

SQL> grant create database link to clartech;

Grant succeeded.

PC1 – Crear Enlace de Base de Datos en Apex

Ingresamos a la página de inicio de Apex, hacemos clic en el módulo del Taller de SQL y luego hacemos clic en el módulo Explorador de Objetos

En la esquina superior derecha hacemos clic en el signo + para crear un “Enlace de Base de Datos” (dblink) y se abre el asistente, e ingresamos los siguientes datos y hacemos clic en el botón siguiente:

 

Nombre del esquema al que queremos acceder: curso_apex

La contraseña: cursoapex

La IP de su máquina remota o el nombre del host: Win7Apex5

EL puerto donde escucha la base de datos: 1521

El SID de la base de datos: XE

Nota: Si el password tiene mayúsculas y minúsculas tener en cuenta de que este encerrado entre comillas dobles para que se guarde correctamente.

En la pantalla de confirmación, hacemos clic en el botón Crear Enlace de Base de Datos.

Podemos probar el Enlace de Base de Datos recién creado haciendo clic en el botón Probar y luego hacemos clic en el botón Terminar y nos muestra que el enlace funciona correctamente.

Consultar datos a base de datos remota desde el Taller SQL

Desde la PC1 ingresamos al Taller de SQL y consultamos la tabla EDU_DEPARTAMENTOS de la PC2

Select * from [esquema].[nombre_tabla]@[dblink]

Select * from curso_apex.edu_departamentos@pruebadblink

Crear una vista en Oracle Apex

Desde el Explorador de Objetos en el Taller SQL creamos una vista a partir de la siguiente consulta:

select * from curso_apex.edu_departametos@pruebadblink

Crear Informe Interactivo de la Vista

Para mostrar los datos de la tabla remota utilizamos la vista recién creada y de ese modo tenemos acceso a los datos remotos.

Escenario 2 – Crear Enlace de Base de Datos desde Oracle XE a MySQL

Máquina virtual con Windows 7 Enterprise SP1 de 32-bit

Base de Datos Oracle 11g XE

Oracle Apex 5.0

Base de Datos MySQL5.6

Máquina Virtual

Abrimos una ventana de comandos CMD y realizamos las siguientes operaciones:

### Conectarse a MySQL ###

C:\Users\Admin>mysql -u root -p

Enter password: **********

### Crear Base de Datos demomysql ###

mysql> create database demomysql;

Query OK, 1 row affected (0.00 sec)

### Llamar a la base de datos ###

mysql> use demomysql

Database changed

### Crear Usuario demo ###

mysql> create user 'demo'@'localhost' identified by 'demo123';

Query OK, 0 rows affected (0.00 sec)

### Conceder permisos al usuario ###

mysql> GRANT ALL PRIVILEGES ON *.* TO 'demo'@'localhost' WITH GRANT OPTION;

Query OK, 0 rows affected (0.00 sec)

### Crear Tabla demo ###

mysql> create table demo

    -> (indiceid int unsigned not null auto_increment primary key,

    -> col1 char (40) not null,

    -> col2 char (20) not null,

    -> col3 char (10) not null,

    -> col4 char (20) not null,

    -> col5 char (15) not null);

Query OK, 0 rows affected (0.16 sec)

### Mostrar la Tabla demo ###

mysql> show tables;

+---------------------+

| Tables_in_demomysql |

+---------------------+

| demo                |

+---------------------+

1 row in set (0.00 sec)

### Describir la tabla demo ###

mysql> describe demo;

+----------+------------------+------+-----+---------+----------------+

| Field    | Type             | Null | Key | Default | Extra          |

+----------+------------------+------+-----+---------+----------------+

| indiceid | int(10) unsigned | NO   | PRI | NULL    | auto_increment |

| col1     | char(40)         | NO   |     | NULL    |                |

| col2     | char(20)         | NO   |     | NULL    |                |

| col3     | char(10)         | NO   |     | NULL    |                |

| col4     | char(20)         | NO   |     | NULL    |                |

| col5     | char(15)         | NO   |     | NULL    |                |

+----------+------------------+------+-----+---------+----------------+

6 rows in set (0.03 sec)

### ingresar un registro a la tabla demo ###

mysql> INSERT INTO demo

    ->      (col1, col2, col3, col4, col5)

    ->      VALUES

    ->      ("dato1", "dato2", "dato3","dato4","dato5");

Query OK, 1 row affected (0.04 sec)

### Mostrar la tabla demo con datos ###

mysql> select * from demo;

+----------+-------+-------+-------+-------+-------+

| indiceid | col1  | col2  | col3  | col4  | col5  |

+----------+-------+-------+-------+-------+-------+

|        1 | dato1 | dato2 | dato3 | dato4 | dato5 |

+----------+-------+-------+-------+-------+-------+

1 row in set (0.00 sec)

Crear ODBC para la conexión

Cada sistema operativo tiene su propia ruta de localización de los archivos.

En Windows 7 Enterprise se encuentra:

Inicio – Panel de Control

—> Sistema y Seguridad

—> Herramientas Administrativas

—> Orígenes de datos (ODBC)

Hacemos doble clic sobre Orígenes de datos (ODBC) para abrir la ventana emergente y en la ficha DNS de Sistema vamos a agregar un nuevo ODBC.

 Y hacemos clic en Finish y se abre otra ventana modal para ingresar los siguientes datos de conexión:

Nombre de Enlace de Base de Datos: mysql

Conectar a Esquema: demo

Contraseña: demo123

IP o Nombre de Host Remoto: localhost

Puerto de Host Remoto: 1521

Identificado por: SID

SID o Nombre de Servicio: mysql

Hacemos clic en OK para cerrar las ventanas.

Crear archivo ODBC

Desde el explorador de archivos nos dirigimos a nuestro ORACLE_HOME

C:\oraclexe\app\oracle\product\11.2.0\server

Necesitamos crear un archivo dentro de la carpeta hs/admin, para ello hacemos una copia del archivo initdg4odbc.ora y le cambiamos el nombre a initmysql.ora ya que el nombre se define como initSID.ora.

Abrimos el archivo para editarlo

Cambiamos esto:

HS_FDS_CONNECT_INFO = <odbc data_source_name>

HS_FDS_TRACE_LEVEL = <trace_level>

Por esto:

HS_FDS_CONNECT_INFO = mysql

HS_FDS_TRACE_LEVEL = 0

Guardamos los cambios y cerramos el archivo.

Cambios en archivos tnsnames.ora y listener.ora

Volvemos al ORACLE_HOME

C:\oraclexe\app\oracle\product\11.2.0\server

Necesitamos realizar unos cambios en los archivos del tnsnames.ora y listener.ora

Para ello vamos a la carpeta network/ADMIN

Abrimos el listener.ora y agregamos una entrada dentro de la primera sección en SID_LIST_LISTENER

(SID_DESC =

      (SID_NAME = mysql)

      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)

      (PROGRAM = dg4odbc)

    )

Abrimos el archivo tnsnames.ora y agregamos lo siguiente:

MYSQL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    (CONNECT_DATA =

      (SID = mysql)

    )

      (HS = OK)

    )

Como hemos hecho cambios en el listener debemos parar el servicio y reiniciarlo.

Para ello abrimos una ventana de CMD y llamamos al listener con el comando lsnrctl y luego paramos el servicio con el comando:

LSNRCTL> stop

Y lo reiniciamos con el comando:

LSNRCTL> start

Conceder permisos al usuario de Apex para crear Enlaces de Base de Datos

Desde una ventana de comandos ingresamos al SQLPlus

C:\>sqlplus /nolog

SQL> connect sys as sysdba

Enter password:

Connected

SQL> grant create database link to curso_apex;

Grant succeeded.

SQL>

Crear Enlaces de Base de Datos en Oracle APEX

SQL> conn curso_apex/cursoapex@xe

Connected.

SQL> show user

USER is "CURSO_APEX"

SQL> create database link mysqldblink connect to "demo" identified by "demo123" using 'mysql';

Database link created.

Ingresamos a Apex y abrimos el Taller de SQL, hacemos clic en el Explorador de Objetos y luego en Enlaces de Base de Datos y podemos ver el objeto recién creado:

Crear una Vista desde Apex de la tabla demomysql

Ingresamos al Taller de SQL e ingresamos la siguiente sentencia:

create view demo_mysql as select * from demo@mysqldblink

Creamos un Informe Clásico para mostrar los datos de la vista recién creada.

De este modo hemos podido mostrar datos que se encuentran almacenados en una tabla de la base de datos MySQL.

Conclusión

En este artículo hemos aprendido:

  • A crear un dblink desde una base de datos Oracle XE a otra base de datos remota Oracle XE instalada en una máquina virtual.
  • A crear un dblink desde una base de datos Oracle XE a otra base de datos MySQL.
  • A crear un Origen de Datos (ODBC)
  • A crear el archivo initmysql.ora
  • A editar los archivos tnsnames.ora y listener.ora

Comments

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Suscríbete a nuestro boletín de novedades!

Únete a nuestra lista de correo para recibir las últimas novedades de tecnologías Oracle, cursos onlines, webinars, conferencias y artículos técnicos sobre el desarrollo de aplicaciones web usando Oracle Application Express, directamente en tu email!

Consentimiento

You have Successfully Subscribed!