Artigo SQL Magazine 66 - Usando Oracle Internet Directory no lugar de TNSNames.ora

Neste artigo, cobriremos a instalação e configuração básica para que possamos utilizá-lo no lugar do tradicional tnsnames.ora.

O OID – Oracle Internet Directory é um serviço de diretório LDAP (Nota DevMan 1) nativo que pode ser utilizado para fornecer um repositório centralizado para autenticação e registro de serviço de rede. Neste artigo, cobriremos a instalação e configuração básica para que possamos utilizá-lo no lugar do tradicional tnsnames.ora (Nota DevMan 2).

Nota: LDAP - Lightweight Directory Access Protocol

O LDAP, ou Lightweight Directory Access Protocol (Protocolo Leve de Acesso a Diretório) é um protocolo para consultar e modificar serviços de diretório sobre o protocolo TCP/IP.

Um diretório é um conjunto de objetos com atributos organizados de maneira lógica e hierárquica. O exemplo mais comum é um diretório de telefones, que consiste em uma série de nomes (de pessoas ou organizações) ordenados alfabeticamente, onde cada nome possui um endereço e número de telefone associado.

Uma árvore de diretório LDAP reflete também várias delimitações: geográfico, político e/ou organizacional, dependendo do modelo escolhido. Atualmente, implementações LDA tendem a utilizar DNS – Domain Name System – para estruturar o nível mais alto da hierarquia. Aprofundando-se na hierarquia, o diretório pode parecer entradas representando pessoas, unidades organizacionais, impressoras, grupos de pessoas ou qualquer outra coisa que represente uma entrada na árvore de diretório (ou múltiplas entradas).

Nota: tnsnames.ora

O arquivo tnsnames.ora é um arquivo de configuração que contém o mapeamento dos nomes de serviço de rede para os descritores de conexão. Este arquivo pode ser mantido de maneira centralizada ou localmente, para ser usada por todos os clients (metodologia centralizada) ou por clients individuais (metodologia local). O arquivo tnsnames.ora é encontrado, por padrão, em $ORACLE_HOME/network/admin em ambientes UNIX e ORACLE_HOME\network\admin em ambientes MS-Windows.

Conectando-se ao banco de dados

Temos algumas maneiras diferentes para efetuar a conexão ao banco de dados Oracle. Vejamos abaixo:

Agora imagine uma situação em que você tenha 50 bancos de dados ou até mais, como algumas companhias realmente tem, e que você tenha que manter o arquivo TNSNAMES.ORA sempre atualizado. Convenhamos que isso passa a ser uma tarefa um pouco complicada dependendo da maneira com que os clientes de banco de dados façam a conexão.

Repositório centralizado

A primeira ferramenta disponibilizada pela Oracle para a criação de um repositório centralizado para as entradas para os bancos de dados é o Oracle Names, porém é uma metodologia não mais suportada nas versões mais recentes do banco de dados Oracle, mas ainda assim algumas empresas ainda o utilizam.

Como mencionado, o OID é muito mais que apenas uma maneira centralizada de registrar as entradas para os bancos de dados, ele pode ser utilizado para autenticação de múltiplas aplicações e bancos de dados.

É importante que você conheça a estrutura LDAP, o que não é o foco deste artigo, manteremos o foco apenas em outra maneira de manter todas as estações cliente com a informação mais atualizada possível sobre o nosso ambiente e, é claro, queremos fazer isso da maneira mais simples possível.

Mas afinal, como é que isso vai funcionar se não mais utilizaremos o arquivo tnsnames.ora? Observe a Figura 1.

Figura 1. Estrutura do Servidor OID (OID Server)

Como podemos ver na Figura 1, quando uma conexão ao banco de dados é feita utilizando o SQL*Plus ou qualquer outra ferramenta no lado cliente, ele irá procurar pelo banco de dados no servidor OID e, caso encontre, o cliente receberá todas as informações necessárias para a conexão ao banco de dados em questão.

Com o TNSNAMES.ORA e o Oracle Names, é exatamente o que acontece, a diferença é que o arquivo tnsnames.ora precisa estar presente em cada estação cliente, ou apontar para uma pasta compartilhada na redel. O Oracle Names também faz a mesma coisa, porém não é mais suportado por não ter a mesma segurança e escalabilidade que o OID oferece.

Configurando o cliente para utilizar o OID

Para configurar uma estação cliente para utilizar o OID, precisamos na verdade configurar alguns arquivos:

A Listagem 1 apresenta um exemplo do conteúdo do arquivo SQLNET.ORA.

SQLNET.AUTHENTICATION_SERVICES = (NTS) NAMES.DIRECTORY_PATH = (LDAP,TNSNAMES) TRACE_LEVEL_CLIENT = SUPPORT trace_level_client = 16 trace_timestamp_client = true trace_unique_client = true trace_directory_client = c:\Temp\sql_client_trace
Listagem 1. Conteúdo do arquivo SQLNET.ORA

Como podemos ver na Listagem 1, o parâmetro NAMES.DIRECTORY_PATH é onde podemos definir quais os métodos que iremos utilizar. No nosso exemplo o primeiro método a ser utilizado é o LDAP e, caso ocorra algum problema, a conexão será direcionada para utilizar o TNSNAMES.ORA.

Vejamos agora, na Listagem 2, a configuração do segundo arquivo, o LDAP.ORA.

DIRECTORY_SERVERS = (oid01:389:636) DEFAULT_ADMIN_CONTEXT = "dc=dbabrain,dc=com" DIRECTORY_SERVER_TYPE = OID
Listagem 2. Conteúdo do arquivo LDAP.ORA

Analisando o conteúdo da Listagem 2, observamos os seguintes parâmetros:

Pronto, agora já temos toda a configuração do lado cliente completa. Agora o cliente já está habilitado a encontrar qualquer banco de dados que esteja configurado no servidor de diretórios.

Instalando o OID

Vamos iniciar a instalação do Oracle Internet Directory. Em primeiro lugar, é necessário fazer o download do Oracle Application Server 10g, o OID é parte integrante deste aplicativo.

Neste artigo, utilizamos a versão para Linux liberada em 4 CDs, o Oracle Application Server 10g Release 2 (10.1.2.0.2).

Antes de iniciar o processo de instalação, recomendo a leitura do guia de instalação para verificar as dependências do sistema operacional.

Recomendamos ainda que você use uma ferramenta fornecida pela própria Oracle para verificar todos os pré-requisitos antes que inicie a instalação de qualquer produto Oracle.

Bem, após ter executado com sucesso todas as configurações prévias, execute o arquivo runInstaller que pode ser encontrado no Disco 1.

A Figura 2 apresenta a primeira tela logo após executar o runInstaller. Apenas especifique o caminho que você deseja utilizar.

Figura 2. Especificando a localização de instalação

Agora, conforme Figura 3, devemos selecionar a segunda opção de instalação: Oracle Application Server Infrastructure.

Figura 3. Seleção do produto a ser instalado

Agora, na tela da Figura 4, devemos escolher Identity Management and Metadata Repository, que é exatamente onde um banco de dados 10.2.0.4.2 será criado para armazenar os dados de nosso diretório.

Figura 4. Seleção do tipo de instalação

Neste ponto, o Oracle irá verificar todas as dependências e, em caso de qualquer falha, pare a instalação e corrija o problema. Após tudo certo, reinicia a instalação (Figura 5).

Figura 5. Verificação das dependências

E, conforme Figura 6, será necessário que você tenha acesso ao usuário root.

Figura 6. Acesso ao usuário root necessário

Na próxima tela (Figura 7), você deverá escolher os componentes que deverão ser instalados. Selecione os componentes:

Figura 7. Selecionando opções de configuração

Em ciência da computação, proxy é um servidor que atende a requisições repassando os dados a outros servidores. Um usuário (cliente) conecta-se a um servidor proxy, requisitando algum serviço, como um arquivo, conexão, website, ou outro recurso disponível em outro servidor.

Um servidor proxy pode, opcionalmente, alterar a requisição do cliente ou a resposta do servidor e, algumas vezes, pode disponibilizar este recurso sem nem mesmo se conectar ao servidor especificado. Pode também atuar como um servidor que armazena dados em forma de cache em redes de computadores. São instalados em máquinas com ligações tipicamente superiores às dos clientes e com poder de armazenamento elevado.

Esses servidores têm uma série de usos, como filtrar conteúdo, providenciar anonimato, entre outros.

Um HTTP caching proxy, por exemplo, permite que o cliente requisite um documento na World Wide Web e o proxy procura pelo documento em seu cache. Se encontrado, o documento é retornado imediatamente. Caso contrário, o proxy busca o documento no servidor remoto, entrega-o ao cliente e salva uma cópia no seu cache. Isso permite uma diminuição na latência, já que o servidor proxy, e não o servidor original, é acessado, proporcionando ainda uma redução do uso de banda.

O próximo passo é escolher as portas que serão usadas para o LDAP. Em nosso caso, escolhemos a opção “automático”, como mostrado na Figura 8.

Figura 8. Especificando a configuração de portas

Defina o Namespace (Nota DevMan 4) onde todo o conteúdo será armazenado. O nome sugerido será baseado no seu nome de domínio (Domain Name – Nota DevMan 5). Em nosso caso, definimos um namespace como “dbabrain” e “com”, conforme mostra a Figura 9.

Figura 9. Especificando o Namespace

Em geral, um namespace é um “recipiente” abstrato que fornece um contexto para determinados itens (nomes, termos técnicos ou palavras) que mantém e permite que objetos contidos em diferentes namespaces possuam o mesmo nome.

Por definição, nomes em um namespace não podem conter mais de um significado, o que significa dizer que duas ou mais “coisas” não podem compartilhar o mesmo nome.

Um namespace também é conhecido como “contexto”, pois o significado de um nome pode mudar dependendo do namespace em que ele faça parte.

Nomes podem representar objetos ou mesmo conceitos. Como exemplo, podemos citar uma tabela e uma visão (view), que não podem ser criados com o mesmo nome no banco de dados Oracle, pois são dois objetos contidos no mesmo namespace. Já um índice pode ser criado com o mesmo nome de uma tabela, uma vez que são objetos de namespaces diferentes.

O DNS (Domain Name System - Sistema de Nomes de Domínios) é um sistema de gerenciamento de nomes hierárquico e distribuído operando segundo duas definições:

O sistema de distribuição de nomes de domínio foi introduzido em 1984 e com ele os nomes de hosts residentes em um banco de dados pode ser distribuído entre servidores múltiplos, diminuindo assim a carga em qualquer servidor que provê administração no sistema de nomeação de domínios. Ele baseia-se em nomes hierárquicos e permite a inscrição de vários dados digitados além do nome do host e seu IP. Em virtude do banco de dados de DNS ser distribuído, seu tamanho é ilimitado e o desempenho não degrada tanto quando se adiciona mais servidores nele.

Na próxima tela (Figura 10) defina o nome global e o SID para o banco de dados.

Figura 10. Definindo o nome do banco de dados

Será solicitado também (Figura 11) que você defina a senha para as contas administrativas.

Você pode escolher entre definir senhas diferentes para cada conta administrativa ou usar a mesma senha para todas estas contas, que foi a nossa escolha.

Figura 11. Definindo a senha para as contas administrativas

Um website para administração será implementado e para isso, devemos especificar o nome para a instância web e também a senha para o usuário administrador do IAS (IAS_ADMIN), que é outro usuário que veremos mais adiante. O nome deste usuário é ORCLADMIN. Veja, na Figura 12, que definimos o nome de nossa instância web como dbabrain_ias.

Figura 12. Definindo o nome da instância web e a senha o administrador do IAS

E finalmente é apresentada uma tela (Figura 13) contendo toda a configuração feita e os produtos que serão instalados. Basta clicar em “Install” e a instalação será iniciada.

Figura 13. Iniciando a instalação

Ao final do processo de instalação, será requisitado que você execute um script utilizando o usuário root. Após isso, a instalação estará completa.

Iniciando o servidor LDAP

Agora que já criamos nosso servidor LDAP e toda a sua infra-estrutura, primeiramente temos que iniciar o banco de dados e o listener, conforme Listagem 3.

$ export ORACLE_HOME=/oracle/OraHome_1 $ export ORACLE_SID=dbabrain $ lsnrctl start LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 21-APR-2009 16:59:29 Copyright (c) 1991, 2006, Oracle. All rights reserved. Starting /oracle/OraHome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 10.2.0.3.0 - Production System parameter file is /oracle/OraHome_1/network/admin/listener.ora Log messages written to /oracle/OraHome_1/network /log/listener.log Trace information written to /oracle/OraHome_1/network/trace/listener.trc Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=125.15.32.13)(PORT=1521))) Connecting to (ADDRESS=(PROTOCOL=TCP)(HOST=125.15.32.13)(PORT=1521)(QUEUESIZE=100)) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 10.2.0.3.0 - Production Start Date 21-APR-2009 16:59:29 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level support Security ON: Local OS Authentication SNMP OFF Listener Parameter File /oracle/OraHome_1/network/admin/listener.ora Listener Log File /oracle/OraHome_1/network/log/listener0.log Listener Trace File /oracle/OraHome_1/network/trace/listener0.trc Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=125.15.32.13)(PORT=1521))) Services Summary... Service "DBABRAIN" has 1 instance(s). Instance "DBABRAIN", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully $ sqlplus /nolog SQL*Plus: Release 10.2.0.3.0 - Production on Tue Apr 21 17:05:54 2009 Copyright (c) 1982, 2006, Oracle. All Rights Reserved. SQL> conn / as sysdba Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 197132288 bytes Fixed Size 1248044 bytes Variable Size 142607572 bytes Database Buffers 46137344 bytes Redo Buffers 7139328 bytes Database mounted. Database opened. SQL>
Listagem 3. Iniciando o banco de dados e o listener

Pronto, nosso banco de dados e listener já estão no ar. Agora vamos iniciar o servidor LDAP. Para isso, execute o script opmnctl, que pode ser localizado em $ORACLE_HOME/opmn/bin, conforme mostra a Listagem 4.

$ cd $ORACLE_HOME/opmn/bin $ -- Para iniciar o servidor LDAP $ ./opmnctl startall $ -- Para finalizar o servidor LDAP $ ./opmnctl stopall $ -- Para verificar o status do servidor LDAP $ ./opmnctl status
Listagem 4. Utilizando o script opmnctl e suas opções

Podemos também iniciar o servidor LDAP manualmente, sem a utilização do script.

Para isso, precisamos iniciar dois processos: oid monitor e oidldapd, conforme Listagem 5.

$ -- Iniciando o processo oid monitor $ oidmon connect=dbabrain start $ -- Iniciando o processo oidldapd $oidctl connect=dbabrain server=oid01 instance=1 configset=1 start
Listagem 5. Inciando o servidor LDAP manualmente

O parâmetro connect é usado para especificar o nome do banco de dados do OID. No nosso caso, dbabrain.

Podemos agora verificar se tudo está OK. Os comandos da Listagem 6 são usados para verificar se o OID está “escutando” as portas especificadas.

$ORACLE_HOME/bin/ldapbind -p 389 $ORACLE_HOME/bin/ldapbind -p 636 -U 1
Listagem 6. Verificando se o OID está “escutando” as portas especificadas

Caso não tenha utilizado as portas padrão, você pode verificar quais são essas portas no arquivo $ORACLE_HOME/install/portlist.ini

Criando os serviços e testando a conxão

Já temos o nosso OID em execução, podemos agora criar os serviços de banco de dados e testar a conexão.

Podemos fazer os testes de conexão de duas maneiras: através de ferramentas de linha de comando ou através de ferramentas gráficas.

Para iniciar a ferramenta gráfica, use o comando netmgr, ou você pode ainda utilizar qualquer ferramenta cliente que já possua o sqlnet.ora e o ldap.ora configurados.

A Figura 14 mostra a tela inicial do Net Manager.

Figura 14. Tela inicial do Net Manager

Clique em Directory e Service Naming, e então efetue o login (Figura 15).

A conta administrativa é cn=orcladmin e a senha é a mesma que você especificou durante o processo de instalação.

Figura 15. Efetuando o login no Net Manager

Após efetuar o login, você terá acesso à lista de entradas de bancos de dados disponíveis, no nosso caso, ainda nenhum.

Para adicionar uma nova entrada, é necessário apenas clicar no ícone “+” e preencher os campos que irão aparecendo. O primeiro campo é o Service Name, que é o nome do serviço ou do banco de dados. Iremos adicionar um banco de dados chamado TEST11G, cujo nome do servidor é DBABRAIN01 e a porta TCP/IP é a 1530. A Figura 16 mostra o processo.

Figura 16. Adicionando um banco de dados no Net Manager

Neste momento temos toda a configuração pronta. Após completar os passos mostrados na Figura 16, o seu Net Manager deverá parecer como o da Figura 17, porém com apenas as entradas que você configurou.

Figura 17. Bancos de dados adicionados ao Net Manager

Neste momento, qualquer cliente que tenha configurado o sqlnet.ora e ldap.ora, que apontem para o seu servidor OID já estão aptos a conectar-se ao banco de dados.

Podemos efetuar o teste através do utilitário TNSPING e conectando-se através do SQL*Plus. Vejamos o processo na Listagem 6. Utilizamos o cliente instalado em um notebook com sistema operacional Windows, inclusive para comprovar que não estamos efetuando a conexão diretamente de dentro do servidor.

-- Utilizando o TNSPING H:\>tnsping test11g TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 13-AUG-2 007 14:35:58 Copyright (c) 1997, 2005, Oracle. All rights reserved. Used parameter files: C:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora Used LDAP adapter to resolve the alias Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=dbabrain01)(PORT=1530))) (CONNECT_DATA=(SERVICE_NAME=test11g))) OK (0 msec) -- Conectando-se através do SQL*Plus H:\>sqlplus system@test11g SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 13 14:38:58 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved. Enter password: Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select instance_name, hostname from v$instance; INSTANCE_NAME HOST_NAME ---------------- ------------------------------ test dbabrain01
Listagem 6. Testando e efetuando a conexão

Se você chegou até aqui, perfeito. Agora você pode iniciar com a inserção de todos os seus bancos de dados no LDAP e parar de usar o tnsnames.ora.

Adicionando ou modificando uma entrada de banco de dados manualmente

Para adicionar ou modificar uma entrada de banco de dados no LDAP manualmente, utilize os comandos ldapadd e ldapmodify. Mas sinceramente, sugerimos que você se familiarize com a estrutura do OID antes de começar a utilizar estes comandos.

De qualquer forma, a Listagem 7 apresenta um exemplo de como adicionar uma entrada.

$ ldapadd -D "cn=orcladmin" -w 'password for oid' -h oid01 -p 389 -f 'filename'.ldif
Listagem 7. Adicionando uma entrada manualmente

Vejamos agora as opções utilizadas no comando da Listagem 7.

O arquivo .ldif deverá conter a entrada que você quer adicionar ao LDAP. A Listagem 8 mostra um exemplo.

dn: cn='db or service_name',cn=OracleContext,dc=dbabrain,dc=com objectclass: top objectclass: orclNetService cn: 'db or service name' orclnetdescstring: (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST='hostname') (PORT=1530)))(CONNECT_DATA=(SID='oracle SID')))
Listagem 8. Exemplo de conteúdo do arquivo .ldif

Vejamos agora, na Listagem 9, o exemplo para adicionarmos um banco de dados chamado PROD.

dn: cn=PROD,cn=OracleContext,dc=dbabrain,dc=com objectclass: top objectclass: orclNetService cn: PROD orclnetdescstring: (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=prodserver01)(PORT=1530)))(CONNECT_DATA=(SID=prod)))
Listagem 9. Conteúdo do arquivo .ldif para o banco de dados PROD

Consultando o repositório

Uma outra grande utilidade do LDAP é que podemos utilizar o repositório para efetuar consultas, como a apresentada na Listagem 10.

SELECT replace(C.RDN,'cn=','')||'='||CHR(10)||D.ATTRVAL FROM ods.CT_DN C, ods.ds_attrStore D WHERE C.ENTRYID = D.ENTRYID AND C.ENTRYID IN (SELECT ENTRYID FROM ODS.DS_ATTRSTORE WHERE ATTRVAL='orclNetService') AND D.ATTRNAME='orclnetdescstring' ORDER BY C.ENTRYID; test11g= (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbabrain01) (PORT=1530)))(CONNECT_DATA=(SERVICE_NAME=test11g)))
Listagem 10. Consultando o repositório

Como você pode ver, o resultado da consulta efetuada ao repositório LDAP é exatamente uma entrada para o banco de dados para o arquivo tnsnames.ora.

Você pode utilizar esta técnica para efetuar um backup da entrada para o banco de dados ou até mesmo para criar o próprio arquivo tnsnames.ora e deixá-lo como uma opção de uso em caso de falha do seu LDAP.

Conclusões

Como pudemos ver, a utilização do LDAP é uma opção bastante prática e de extremo benefício no tocante a administração de conexões ao banco de dados.

Imagine uma situação em que seja necessário alterar alguma informação de conexão de um banco de dados existente ou mesmo adicionar um novo banco de dados, o tradicional uso do tnsnames, na maioria das vezes, faz com que todas as estações de trabalho tenham que ser atualizadas.

A centralização deste serviço, além de facilitar muito a administração, se torna transparente aos usuários das aplicações.

Na verdade há muito mais a ser dito sobre o Oracle Internet Directory, mas com esta introdução feita neste artigo você já terá muito com o que “brincar” e também estará habilitado a tornar sua própria vida um pouco mais fácil com relação à administração do tns.


Saiu na DevMedia!
  • Série: React com Redux:
    Redux é uma biblioteca JavaScript criada pelo Facebook para resolver um problema inerente de aplicações front-end conforme elas crescem em tamanho e complexidade.

Saiba mais sobre Banco de Dados ;)

  • Guias de Banco de Dados:
    Aqui você encontra o Guia de estudo ideal para aprimorar seus conhecimentos nos principais Banco de Dados do mercado. Escolha o seu e bons estudos!

Artigos relacionados