Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andre Renato

[Resolvido] Oracle respondendo a dois IPs

Recommended Posts

Colegas DBAs,

 

Estou em um cenário em que vai ocorrer uma mudança de faixa de Ips na rede, mas enquanto é feita essa mudança vai ser necessário que o banco de dados responda por dois IPs diferentes.

 

Algum de vocês já precisou fazer isso alguma vez?

Qual foi o comportamento do Oracle?

 

[]s,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Andre,

 

Seguinte, tu consegue fazer o Oracle trabalhar com dois IPs diferentes sim, basta uma simples configuração no arquivo chamado LISTENER.ORA que se encontra no diretório %ORACLE_HOME/network/admin. Abaixo vou publicar um exemplo de um banco de dados que eu configurei a utilização de 3 IPs. Veja:

 

LISTENER =
  (DESCRIPTION_LIST =
	(DESCRIPTION =
  	(ADDRESS = (PROTOCOL = TCP)(HOST = 10.72.0.115)(PORT = 1521))
  	(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.2)(PORT = 1522))
  	(ADDRESS = (PROTOCOL = TCP)(HOST = afgbrosamsaf1)(PORT = 1523))
  	(ADDRESS = (PROTOCOL = TCP)(HOST = 10.72.12.12)(PORT = 1525))
	)
  )

SID_LIST_LISTENER =
  (SID_LIST =
	(SID_DESC =
  	(SDU=8192)
  	(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
  	(SID_NAME = rman)
	)
  )

E depois que realizei essa configuração, apenas subi o serviço do listener para a minha instância RMAN, e com isso, o servidor de banco de dados estava fornecendo o acesso via os 3 IPs e mais por hostname.

 

Porém, isso é apenas um serviço ouvinte, seus clientes precisam de uma configuração para cada IP. Ou seja.

 

Exemplo de configuração de TNSNAMES.ORA

 

rmancat.world =
  (DESCRIPTION =
	(ADDRESS_LIST =
    	(ADDRESS =
      	(PROTOCOL = TCP)
      	(Host = 10.72.0.115)
      	(Port = 1521)
    	)
	)
	(CONNECT_DATA = (SID = rman)
	)
  )

rmancat_dmz.world =
  (DESCRIPTION =
	(ADDRESS_LIST =
    	(ADDRESS =
      	(PROTOCOL = TCP)
      	(Host = 10.72.12.12)
      	(Port = 1525)
    	)
	)
	(CONNECT_DATA = (SID = rman)
	)
  )

rmancat_crossover.world =
  (DESCRIPTION =
	(ADDRESS_LIST =
    	(ADDRESS =
      	(PROTOCOL = TCP)
      	(Host = 10.10.10.2)
      	(Port = 1522)
    	)
	)
	(CONNECT_DATA = (SID = rman)
	)
  )

Tive que criar 3 alias no TNSNAMES para que possa redirecionar a aplicação para os IPs que eu preciso, conforme a sua necessidade. Isso é apenas um modo de realizar essa tarefa, existem diversos pontos francos e se pensar em LOAD BALANCE ou MIRROR, deverá usar configurações específicas de RAC (Real Application cluster) para LOAD BALANCE ou ALTA-DISPONIBILIDADE, e mirror, somente com configuração ao nivel de SO, por DNS Reverso, Wins, Arp, Roteador e etc...

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo,

 

Junto com o Analista de Infra aqui da empresa, efetuei alguns testes em nossa instância de Homologação.

Foi criado um novo IP e a única coisa que eu fiz foi adicionar uma string nova no TNSNAMES com o IP novo.

 

O LISTENER eu deixei como está a seguir:

 

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

)

 

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

 

Até agora funcionou normal.

Já o servidor de produção que precisa ser alterado, está assim:

 

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

)

 

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

 

 

Pelo que entendi, aqui seria interessante declarar o novo IP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, fiz um teste declarando os IPs, assim:

 

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

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

)

)

 

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = JACHML)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

)

 

Mas dos clientes não conectava, dando o erro:

ORA-28547:connection to server failed, probable Oracle Net admin error

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andre,

 

Na linha abaixo:

 

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

Altere a porta de 1521 para 1522 e depois faça a alteração no arquivo TNSNAMES.ORA

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentei isso, mas continuou o erro.

Bom, na hora de aplicar em produção vou tentar deixar igual (responder no listener.ora apenas pelo hostname da maquina) e alterar apenas no tnsnames.ora.

 

Será que isso pode gerar algum problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi do que o Rodrigo explicou precisa de duas portas para fazer a diferença, não ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode até ser... mas aqui no meu caso não deu certo isso.

Eu declarei os dois IPs diferentes no listener.ora e no tnsnames.ora.

Primeiro com as portas iguais... deu erro, depois com portas diferentes, deu o erro do mesmo jeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema original é qual, o servidor do Oracle tem dois IP´s ou existem dois servidores ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um servidor apenas.

 

Como vai ocorrer uma migração de firewall vai ser preciso mudar a faixa de IP desse servidor.

Enquanto ocorre a migração, vai ser necessário que o banco de dados responda por dois IPs, o velho e o novo.

 

Nesses casos acima foram testes feitos no nosso ambiente de homologação.

O IP antigo é o 192.168.0.7 e o novo é o 10.10.111.10.

 

Fiz exatamente da maneira que o Rodrigo explicou, mas deu o erro:

ORA-28547:connection to server failed, probable Oracle Net admin error.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok,

 

Só reforçando, quando se trabalha com range de IP's diferentes, o ideal é trabalhar com portas diferentes também.

 

Mas, vamos lá. Mostre como você configurou o seu LISTENER.ORA e como está o seu TNSNAMES.ora e vamos arrumar-lo.

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo,

 

Aconteceu o seguinte, fiz um esquema que funcionou... fixei no listener.ora o HOSTNAME do server ao invés do IP.

No tnsnames.ora não fiz nada.

 

Isso no servidor.... no client, eu inclui mais uma linha para o sid da instância com o IP novo.

E fazendo assim funcionou normal, pelo tnsping elas respondem normal cada uma com seu IP.

 

Não sei se isso foi a melhor forma de fazer... mas está funcionando (não sei até quando...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Andre,

 

Por isso que eu pedi para me mostrar como tu tinha montado o seu listener.ora e tnsnames.ora, poderia estar ocorrendo alguns conflitos. E quando o assunto é SQLNET, tem N outros fatores que podem influenciar, tais como:

 

  • Configuração de rede;
  • Wins (redes windows);
  • LDAP;
  • Políticas de AD;
  • Firewall;
  • DMZ;
  • E etc.
Na verdade, isso é bem chato mesmo de configurar no Oracle e o modo que configurou, se seguir o planejado não terá problemas e poderá trabalhar com os 2 IP's válidos, só não tente fazer LOAD BALANCE! rs rs

 

Mas bacana que funcionou. Isso aí. Parabéns.

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.