Enlaces de Base de Datos en Oracle Apex 5.0 - Oracle Wiki - Oracle - Toad World

Enlaces de Base de Datos en Oracle Apex 5.0

Oracle Community

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
 
 
 
 
 
 
2838 2 /
Follow / 13 Jul 2016 at 7:35pm

Hola Ing. Clarisa, al crear mi dblink me surge un error que dice:

"Error Testing Database Link.

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor"

¿Que podría ser?

¿Puedo editar mi dblink? o debo crear otro

Estoy usando el escenario 1. De antemano gracias por la ayuda

Follow / 5 Nov 2016 at 4:46pm

Perdona esneldyc se me perdio esta pregunta, lo pudiste resolver? Saludos