-
1. Re: Como extrair IP pelo hostname
J.Laurindo Chiappa Jan 2, 2019 9:17 PM (in response to Jonts)Bom, vc não diz mas eu Entendo que nessa tua tabela LOG_ACESSO essa coluna DS_MAQUINA é o HOSTNAME que está registrado na Rede, é isso mesmo ?? SE SIM, e ** SE ** ambas as máquinas (tanto o servidor Oracle QUANTO a máquina-cliente cujo hostname tá registrado nessa tabela) se comunicam via rede é super-simples, basta vc informar esse HOSTNAME numa chamada à built-in GET_HOST_ADDRESS.... E como Acredito que vc sabe, vc PODE SIM chamar built-ins que não façam DML ou DDL naturalmente num SELECT qquer, exemplo :
==> vou passar como Argumento um host name que EXISTE na Rede, mas não está registrado no mesmo DNS em uso pelo servidor Oracle :
chiappa@DESENV:SQL>SELECT UTL_INADDR.get_host_address('Dell15R') FROM dual;
SELECT UTL_INADDR.get_host_address('Dell15R') FROM dual
*
ERRO na linha 1:
ORA-29257: host Dell15R unknown
ORA-06512: at "SYS.UTL_INADDR", line 19
ORA-06512: at "SYS.UTL_INADDR", line 40
ORA-06512: at line 1
==> Agora vou usar um HOSTNAME que existe e o servidor Oracle sabe como resolver :
chiappa@DESENV:SQL>SELECT UTL_INADDR.get_host_address('VM01') FROM dual;
UTL_INADDR.GET_HOST_ADDRESS('VM01')
-----------------------------------------------------------------
192.168.10.175
chiappa@DESENV:SQL>
==> Funciona perfeitamente, achou o IP... O efeito vice-versa, ie, achar o HOST fornecendo um IP, é similar, muda só o built-in :
chiappa@DESENV:SQL>SELECT UTL_INADDR.get_host_name('192.168.10.175') from dual;
UTL_INADDR.GET_HOST_NAME('192.168.10.175')
---------------------------------------------------------------------------------------------------------
VM01
chiappa@DESENV:SQL>
==> No seu caso, SE essa tal coluna contém um hostname válido E resolvível pela rede a partir do servidor Oracle, tua query vai ser simplesmente :
select UPPER(ds_maquina) ds_maquina,
UTL_INADDR.get_host_address(ds_maquina) IP_DA_MAQUINA_CLIENTE,
count(ds_maquina) qtd_estacao
from Log_Acesso where dt_acesso between '01/10/2018' AND '10/10/2018'
and ds_maquina is not null
group by UPPER(ds_maquina), UTL_INADDR.get_host_address(ds_maquina)
order by UPPER(ds_maquina) ;
==> okdoc ?? E se vc não quiser ficar repetindo as mesmas chamadas no GROUP BY, vc pode usar o exemplo abaixo (onde eu APROVEITEI para CORRIGIR a sua lógica, se essa coluna DT_ACESSO realmente é do datatype DATE, que no Oracle contém data E hora) :
select DS_MAQUINA, IP_DA_MAQUINA_CLIENTE, count(ds_maquina) QTD_ESTACAO
from (select UPPER(ds_maquina) ds_maquina,
UTL_INADDR.get_host_address(ds_maquina) ip_da_maquina_cliente,
from Log_Acesso
where dt_acesso between TO_DATE('01/10/2018 00:00:00', 'dd/mm/yyyy hh24:mi:ss')
and TO_DATE('10/10/2018 23:59:59', 'dd/mm/yyyy hh24:mi:ss')
and ds_maquina is not null
)
group by DS_MAQUINA, IP_DA_MAQUINA_CLIENTE
order by DS_MAQUINA;
Abraços,
Chiappa
-
2. Re: Como extrair IP pelo hostname
Jonts Jan 3, 2019 12:06 PM (in response to J.Laurindo Chiappa)Bom dia Chiappa, Obrigado pelo retorno completo rsrsr, O "DS_MAQUINA" é hostname, isso mesmo. Vou implementar aqui e já te dou feedback... Muito Obrigado...
-
3. Re: Como extrair IP pelo hostname
Jonts Jan 7, 2019 2:58 PM (in response to Jonts)Boa tarde Chiappa, Deu certo muito obrigado...
-
4. Re: Como extrair IP pelo hostname
Jonts Jan 7, 2019 3:06 PM (in response to Jonts)Boa tarde,
Uma pergunta sobre o select enviado, como faço para tratar quando na lista dos Hostname aparece um que mostra desconhecido, nesse caso não mostra IP mas não lista as informações. Está em anexo o erro que mostra
Como faço para mostrar mesmo não tendo IP?
-
-
6. Re: Como extrair IP pelo hostname
J.Laurindo Chiappa Jan 14, 2019 6:51 PM (in response to Jonts)Blz ? Então, como eu disse o RDBMS Oracle simplesmente acessa os serviços de rede do servidor : se é reportado pela Servidor que um hostname não pôde ser resolvido, Não Tem o que fazer dentro do RDBMS - o RDBMS é um simples "cliente"/usuário dos serviços de Rede do servidor....
-
7. Re: Como extrair IP pelo hostname
Jonts Jan 14, 2019 7:03 PM (in response to J.Laurindo Chiappa)Boa tarde,
Obrigado pela orientação Chiappa.
-
8. Re: Como extrair IP pelo hostname
J.Laurindo Chiappa Jan 14, 2019 7:39 PM (in response to Jonts)Uma coisa que vc pode fazer para não mostrar erro pro usuário é, ao invés de chamar diretamente a função Oracle na sua SELECT, vc chamar ao invés uma função sua que por sua vez chama a built-in Oracle : aí na sua função vc controla / manipula erros via EXCEPTION... Tipo :
create or replace function RETORNA_IP (P_HOSTNAME in VARCHAR2) return VARCHAR2 is
v_IP varchar2(50);
BEGIN
Begin
v_ip := UTL_INADDR.get_host_address(P_HOSTNAME);
Exception
when OTHERS then
v_ip := 'Desconhecido do servidor Oracle!!';
End;
return v_ip;
END;
/
Aí teu select passa a ser :
select DS_MAQUINA, IP_DA_MAQUINA_CLIENTE, count(ds_maquina) QTD_ESTACAO
from (select UPPER(ds_maquina) ds_maquina,
RETORNA_IP(ds_maquina) ip_da_maquina_cliente,
from Log_Acesso
where dt_acesso between TO_DATE('01/10/2018 00:00:00', 'dd/mm/yyyy hh24:mi:ss')
and TO_DATE('10/10/2018 23:59:59', 'dd/mm/yyyy hh24:mi:ss')
and ds_maquina is not null
)
group by DS_MAQUINA, IP_DA_MAQUINA_CLIENTE
order by DS_MAQUINA;
==> Okdoc ??? Eu não testei, escrevo de cabeça aqui, então NÃO USE diretamente esse código, assuma que é um MODELO, um EXEMPLO apenas, certo ?? E isso que eu fiz é manipulação e controle de erro naturais do PL/SQL, blz ?? Se vc não tinha o conceito de como o usar, dá uma lida no manual PL/SQL correspondente....