- This topic has 3 replies, 2 voices, and was last updated 7 years, 2 months ago by José Laurindo Chiappa.
-
AuthorPosts
-
4 de setembro de 2017 at 7:45 pm #108968airoospParticipant
Boa tarde pessoal,
Temos sistemas que ainda estão no banco 10g, e estamos fazendo testes no homologação 11g antes da migração.
O ambiente aqui é Windows.
Na carga de alguns sistemas, é executada a consulta abaixo para obter o IP do servidor:
select utl_inaddr.get_host_address from dual;
No 10g retorna o IP (IP4), mas no 11g retorna fe80::c104:80c4:6bee:b1fa%12 (que é o IPV6), certo?
No 11g é possível retornar o IP com a notação 172…..
Se alguém tiver alguma dica, agradeço.
Obrigado.
Airton
4 de setembro de 2017 at 10:46 pm #108970José Laurindo ChiappaModeratorPrimeiro, entenda que ipv4 E ipv6 são coisas ** completamente diferentes ** , eles NÃO SÃO simplesmente diferentes ‘formatos’m diferentes ‘notações’ do mesmo endereço, eles são endereços COMPLETAMENTE DIFERENTES, não faz sentido vc falar em converter/reformatar/refatorar um no outro….
A segunda coisa é que o UTL_INADDR só é capaz de retornar UM endereço, que é o default, então cfrme reportado na nota metalink “How to Get All IP Addresses of a Server With UTL_INADDR?” (Doc ID 1057772.1) Não Tem Como vc obter múltiplos endereços (o ipv4 E o ipv6 digamos) numa chamada só…Isso posto, respondendo : sim, esse endereço fe80::xxx.yyy.zzz é um IPv6, e via de regra ele é o default se estiver configurado, exemplo no meu banco 12c :
C:apporacle>sqlplus system/oracle
SQL*Plus: Release 12.2.0.1.0 Production
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Conectado a:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 – 64bit ProductionSQL> SELECT utl_inaddr.get_host_address FROM global_name;
GET_HOST_ADDRESS
fe80::ed48:523e:b114:464f%14
SQL> exit
Desconectado de Oracle Database 12c Standard Edition Release 12.2.0.1.0 – 64bit Production==> veja a minha config de rede :
C:apporacle>ipconfig
Configuração de IP do Windows
Adaptador Ethernet Ethernet 2:
Sufixo DNS específico de conexão. . . . . . :
Endereço IPv6 de link local . . . . . . . . : fe80::ed48:523e:b114:464f%14
Endereço IPv4. . . . . . . . . . . . . . . : 192.168.10.176
Máscara de Sub-rede . . . . . . . . . . . . : 255.255.255.0
Gateway Padrão. . . . . . . . . . . . . . . : 192.168.10.1Adaptador de túnel isatap.{BE1CB690-2389-49F8-B599-14E2DEBDC3B2}:
Estado da mídia. . . . . . . . . . . . . . : mídia desconectada
Sufixo DNS específico de conexão. . . . . . :C:apporacle>
==> Eu acredito então que pra obter informação de IP pelo database em casos que pode ser IPv6 o default do nic do servidor vc vai ter que OU executar a partir do banco um .BAT/shellscript que grave num arquivo-texto via tools de rede do Windows os IPs que vc tenha e depois leia/processe o arquivo gerado via UTL_FILE ou similar OU vc vai ter que apelar para Java ou C : tanto Java quanto C possuem comandos mais sofisticados de obtenção de dados do hardware e podem ser chamados de dentro do database… Mas é POR SUA CONTA< nada nativo pra isso existe afaik…
[]s
Chiappa
5 de setembro de 2017 at 1:05 am #108972airoospParticipantChiappa,
Pesquisando na internet, encontrei o código abaixo:
CREATE AND COMPILE JAVA SOURCE NAMED “JavaMyIpAddress” AS
package javamyipaddress;import java.lang.System.out;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;
import java.util.Enumeration;/**
*
* @web http://java-buddy.blogspot.com/
* ref: https://docs.oracle.com/javase/tutorial/networking/nifs/listing.html
*/
public class JavaMyIpAddress {public static void main(String args[]) throws SocketException { Enumeration nets = NetworkInterface.getNetworkInterfaces(); for (NetworkInterface netint : Collections.list(nets)) displayInterfaceInformation(netint); } static void displayInterfaceInformation(NetworkInterface netint) throws SocketException { out.printf("Display name: %sn", netint.getDisplayName()); out.printf("Name: %sn", netint.getName()); Enumeration inetAddresses = netint.getInetAddresses(); for (InetAddress inetAddress : Collections.list(inetAddresses)) { out.printf("InetAddress: %sn", inetAddress); } out.printf("n"); }
}
Na execução apareceu a mensagem abaixo:
ORA-29536: origem incorreta: Encountered “<" at line 18, column 21.
Was expecting one of:
";" …
"++" …
"–" …
"." …
"[" …
"(" …
":" …
…
“=” …
“*=” …
“/=” …
“%=” …
“+=” …
“-=” …
“<>=” …
“>>>=” …
“&=” …
“^=” …
“|=” …Pelo que entendi, o erro esta em: Enumeration
Se alguém tiver alguma dica, agradeço.
Airton
5 de setembro de 2017 at 1:15 am #108973José Laurindo ChiappaModeratorAChe alguém que manje mais de Java (eu só sei o mínimo suficiente pra ser “perigoso” 🙂 mas acredito que o prob deve ser a versão do Java embutida no database : https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1396178300346115498 por exemplo cita um caso onde o JVM embutido no banco 10g não tinha algumas das interfaces de rede….
CASO vc não consiga com Java, como eu disse vc poderia testar com C, *** OU *** , como eu disse também, vc poderia EXTRAIR a informação executando alguns dos utilitários do Windows, como o ipconfig….[]s
Chiappa
-
AuthorPosts
- You must be logged in to reply to this topic.