Escolar Documentos
Profissional Documentos
Cultura Documentos
Depois da configurao feita, criei uma conexo a partir de outra mquina da rede, com o
SQL Developer, da Oracle, e um drive java, comprovadamente funcional e muito elogiado. Queria
ter certeza de que o SQL Express estava funcionando na rede, antes de prosseguir, pois caso no
conseguisse conectar depois de configurar o HR, poderia pelo menos ter certeza de que no era
nem um problema de rede, nem de porta do SQL Server Express.
Na primeira tentativa de conexo, no funcionou. Na segunda tambm no e nenhuma
mais da em diante, de forma nenhuma. Revisei vrias e vrias vezes a conexo, nmero de
porta, protocolos, e nada. Na mquina local funcionava bem, por usar o agente do prprio banco,
e no uma porta.
Para encurtar, o problema era justamente a porta configurada. No sei o motivo, e francamente,
no procurei saber. No sei se um bug, ou se existe ainda alguma configurao adicional
necessria, mas mesmo seguindo as indicaes de posts e documentao, a porta indicada no
funciona.
Voc ver nas imagens abaixo. A documentao diz que devemos:
- Acessar o protocolo TCP/IP dos servios de rede do SQL Server;
- Encontrar o endereo que nos interessa disponibilizar. No meu caso, o 10.0.1.7, ip do meu
servidor interno;
- Voc deve mudar o valor da propriedade TCP Dynamic Ports, e deixar vazio. Nem mesmo
com zero. Limpar o campo;
- Na propriedade TCP Port, informar a porta que voc quer disponibilizar. Neste caso, 1433;
Simplesmente no funciona. Eu consegui resolver e acessar via rede, atravs da porta
indicada em outro ponto da configurao, mais abaixo, na mesma lista de endereos. Existe no
final desta lista um endereo chamado IPAll, que traz um outro nmero de porta dinmica. Com
este nmero, consegui acessar via rede, sem problemas.
Segue a sequencia de imagens:
Eu poderia ter feito outros testes, mas como no meu objetivo principal, e teoricamente, na
verso Full" do SQL Server este problema no deve existir, ento, segui em frente.
O objetivo principal neste caso, ser acessar uma tabela existente, no SQL Server, e manipular
seus dados, atravs de um Database link, criado no ambiente Apex, no Banco Oracle, como se
fosse uma tabela local.
Abaixo, veremos a tabela criada para testes e alguns dados existentes na mesma.
O banco de dados que iremos acessar, tem o incrivelmente criativo nome de Teste, uma tabela
chamada Estados, que possui 5 registros.
O Wizard do Windows que cria este DSN muito prtico e intuitivo, mas existem opes que voc
precisa escolher de determinada forma, ou mesmo decidir entrar em determinada tela, para
garantir que a configurao ser feita da maneira necessria. Entre as configuraes, temos:
- Na segunda tela do Wizard, aps a escolha do nome da fonte de dados, escolher a forma de
autenticao do prprio SQL Server, e no a do Windows. Ou seja, usaremos o usurio sa
padro, e a senha determinada para ele no momento da instalao;
- Logo abaixo do boto de rdio de escolha da forma de autenticao, temos um outro boto,
chamado Configurao do Cliente. Precisamos clicar neste boto, para podermos fazer
escolhas diferentes do padro na tela que se abrir em seguida;
- Normalmente, a opo que vem marcada por default nesta tela Pipes Nomeados. Voc deve
escolher TCP/IP;
- Por mais estranho que parea, deixe marcada a opo Determinar porta dinmicamente, a
direita desta tela. Lembre-se, que neste caso, ns iremos nos conectar com a fonte de dados,
atravs de um nome, e no de uma porta. Ento, melhor deixar o prprio sistema usar a porta
que ele considerar adequada. O caso que relatei, no incio deste texto, era para conectar
atravs de outro software, e no do HR da Oracle;
- Nas prximas telas, a nica coisa que alterei, foi o banco de dados padro, que j deixei como
Teste;
Deste ponto em diante, o que precisamos fazer exige um editor de texto simples, de sua escolha,
e o uso do prompt de comando do Windows, em modo administrador. Em modo simples, teremos
problemas.
Para configurar o HR e fazer com que acesse a fonte de dados ODBC que acabamos de criar,
precisamos trabalhar com basicamente 3 arquivos, em locais diferentes, reiniciar um servio da
Oracle e iniciar outro. E isso tudo. Mas temos pegadinhas
Para facilitar nossa vida, a Oracle disponibiliza junto com a instalao, alguns arquivos de
exemplo, com a extenso .sample acrescentada, deixando clara a sua funo.
O primeiro local que precisamos acessar, :
C:\oraclexe\app\oracle\product\11.2.0\server\hs\admin
Nesta pasta, temos os arquivos .sample necessrios que nos serviro de base, e um arquivo que
servir para inicializar o servio, ou melhor, o listener que criaremos.
Os arquivos modificados, no ficaro nesta pasta, com exceo de um, que o inicializador do
listener. Os outros dois arquivos, devem ser movidos, depois de alterados, para a seguinte pasta,
que realmente levada em conta na configurao dos servios Oracle:
C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN
Vamos ento a primeira pasta: C:\oraclexe\app\oracle\product\11.2.0\server\hs\ADMIN
Nesta pasta, temos os vrios arquivos de exemplo, e um em especial, que deve ser renomeado, e
permanecer nesta mesma pasta. o arquivo initdg4odbc.ora.sample, que deve ser renomeado
para init<nomedodsn>.ora, alm de editado. No nosso exemplo, ele passar a se chamar
initmssconn.ora, e seu contedo interno ficar assim:
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = mssconn
HS_FDS_TRACE_LEVEL = OFF
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>
As linhas que mudam so:
HS_FDS_CONNECT_INFO = mssconn
Onde mssconn o nome do nosso DSN recm criado.
HS_FDS_TRACE_LEVEL = OFF
E aqui deve estar como OFF. Seja l o valor que tiver no arquivo de exemplo, mude para OFF.
O prximo arquivo que vamos alterar, o listener.ora.sample. copie para listener.ora apenas, para
preservar o arquivo de exemplo. O contedo dele deve ficar assim:
SID_LIST_LISTENER_MSSCONN =
(SID_LIST =
(SID_DESC =
(SID_NAME = mssconn)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = dg4odbc)
)
)
LISTENER_MSSCONN =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = PNPKEY))
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-6QTHL5D)(PORT = 1522))
)
)
Foi ento que, depois de inmeras tentativas, e j quase desistindo, me deparei com uma
resposta de um post, dentre tantas, onde a pessoa relatava justamente este problema. Foi quando
algum comentou que os servios default do banco Oracle, no precisam de arquivo de
configurao, e que teoricamente, se eliminssemos aqueles arquivos, o banco de dados
continuaria funcionado da mesma forma. Se isso fosse verdade, ento, poderamos substituir
completamente os arquivos da pasta pelos arquivos do nosso listener, e no teramos problemas.
Primeiro, fiz um teste. Mudei o nome dos arquivos e das extenses, e reiniciei o banco, j me
preparando para o pior. Surpresa! Tudo funcionando normalmente. Ento a informao estava
correta. No entendi o motivo de ter estes arquivos neste local. Aparenta ser uma contiuao dos
exemplos, como se na primeira pasta ficassem os arquivos de exemplo originais, e nesta ltima,
os arquivos de exemplo modificados, em seu formato final, mas ainda sem funo.
Deixando de lado as suposies, modifiquei o ltimo arquivo, o tnsnames.ora, que ficou assim:
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-6QTHL5D)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
LISTENER_MSSCONN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-6QTHL5D)(PORT = 1522))
(CONNECT_DATA =
(SID = mssconn)
)
(HS = OK)
)
Agora, com tudo configurado, precisamos reiniciar o servio de listener do Oracle, e iniciar o
nosso listener. Abra uma janela de linha de comando do windows, em modo administrador, e
vamos l. Digite os seguintes comandos:
- lsnrctl reload (para reiniciar os servio de listener)
- lsnrctl start listener_mssconn (para iniciar o nosso listener)
Tudo estando configurado corretamente, voc ver uma srie de linhas de diagnstico,
indicando que est tudo ok. Podemos ver novamente este resultado, com o seguinte comando:
lsnrctl status listener_mssconn
O resultado deve ser este:
Este comando confirma o nome do listener, informa a quanto tempo est funcionando, bem como
o arquivo de configurao que est sendo usado (C:
\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora), o servidor, protocolo e
porta. Tudo ok.
Tambm podemos fazer outro teste para ter certeza de que a conexo possvel, antes de
partirmos para o Apex. Digite o comando:
tnsping listener_mssconn 5
O resultado dever ser este:
O comando tenta conectar a fonte de dados, envia 5 pings, mede o tempo e informa o resultado.
Tudo ok tambm.
Voc pode ainda fazer testes e criar um database link diretamente usando o utilitrio de linha de
comando sqlplus, mas vamos direto ao Apex para abreviarmos o processo.
Antes de poder criar o Database link, voc deve dar a permisso ao schema, ou nome do
workspace onde voc pretende cria-lo, com o comando grant, utilizando o sqlplus, conectado
como sysdba. Assim:
grant create database link to <nome_do_workspace_apex>;
J no ambiente do Apex, na aba SQL Workshop, em Object Browser, voc pode usar um
Wizard e criar um Database link para utilizar nos reports e forms do seu aplicativo. Mas
francamente, o wizard traz algumas opes a mais, que no consegui utilizar da maneira correta.
Assim, preferi usar um comando direto, na aba SQL Commands, do SQL Workshop. O comando
este, muito simples:
CREATE DATABASE LINK MSSERVER50" CONNECT TO SA" IDENTIFIED BY SENHA"
USING listener_mssconn;
O resultado a criao de um Database link, com o nome MSSERVER50, que voc pode usar
em qualquer query sql da em diante. Usando o nosso banco de dados de exemplo do SQL
Server, uma consula a tabela estados, ficaria assim:
SELECT * FROM estados@msserver50;
Abaixo, as telas finais da configurao:
Depois de criar um Interactive Report no Apex, usar como fonte de dados um SQL Query, no
formato do exemplo.
O resultado final, ser um relatrio e formulrio usando a tabela estados do SQL Server como se
fosse uma tabela nativa do Oracle.