IP ADDRESS

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
ANDREGOUVEIA
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Seg, 25 Jul 2011 8:40 am
Localização: FORTALEZA

Prezados,

Estou precisando obter o endereço IP de uma máquina cliente, duranta execução de uma procedure que está em uma package no banco. Alguém tem idéia de como fazer ?

No forms utilizo o pacote web_util.clientinfo.Get_Ip_address;
Já tentei também esse SELECT, mas o resultado não é endereço da minha máquina.

Selecionar tudo

select SYS_CONTEXT('USERENV', 'IP_ADDRESS', 15) ipaddr from dual

Desde já agradeço,

Att,

André Gouveia.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá andrégouveia,

Com esta querie, você identifica o IP do servidor onde se encontra o banco de dados:

Selecionar tudo

SELECT UTL_INADDR.GET_HOST_ADDRESS(HOST_NAME), HOST_NAME FROM V$INSTANCE;
Com esta outra querie, você identifica o endereço IP de uma sessão SQL*Plus cliente:

Selecionar tudo

SELECT SYS_CONTEXT( 'USERENV', 'IP_ADDRESS' ) FROM DUAL;
Esta querie acima irá retornar NULL, caso a sessão não esteja usando TCP/IP na conexão.

Você também pode ter uma visão geral de todas as sessões de banco existentes:

Selecionar tudo

SELECT SID,OSUSER,TERMINAL FROM V$SESSION;
Agora, veja bem. Sobre esta procedure que você diz existir no banco de dados: como ela é exatamente executada? Quem a executa?

Digamos que esse comando esteja em em sua procedure:

Selecionar tudo

SYS_CONTEXT( 'USERENV', 'IP_ADDRESS' )
Se por exemplo você abrir uma sessão SQL*Plus na sua máquina e chamar a procedure, o SYS_CONTEXT deverá retornar exatamente o endereço IP onde você iniciou a sua sessão SQL (sua estação de trabalho).

Mas no caso de sua procedure ser executada por alguma aplicação WEB, o máximo que você vai conseguir obter será o endereço IP do servidor de aplicação que iniciou a sessão SQL de banco de dados.

Digamos ainda que a sua procedure seja disparada por um JOB dentro do banco de dados (DBMS_JOB). O endereço IP retornado será o do próprio servidor de banco de dados.

Espero ter ajudado a esclarecer suas dúvidas. Fique à vontade para efetuar mais perguntas,

Abraços,

Sergio Coutinho
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Hum ...

Não havia percebido uma coisa .. você falou que está tentando fazer um teste com o FORMS .. por acaso seria ele que executa esta procedure?

Creio que neste caso você só conseguirá obter o endereço do servidor FORMS se usar esta função de SYS_CONTEXT.

Abraços,

Sergio Coutinho
JLMANA
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Ter, 22 Nov 2011 8:22 am

crie a rotina no seu forms como segue abaixo :

Selecionar tudo

DECLARE
  V_RETORNO		VARCHAR2(50);
BEGIN
    SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS') 
    INTO V_RETORNO
    FROM DUAL;
END;
ANDREGOUVEIA
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Seg, 25 Jul 2011 8:40 am
Localização: FORTALEZA

Prezados,

Agradeço a todos que colaboraram com o problema apresentado, mas nenhuma sugestão deu certo. Pois o retorno está sendo sempre em relação ao banco de dados, seja o endereço do servidor, ou sessão do cliente. No meu caso, precisaria de uma função similar web_util.clientinfo.Get_Ip_address, que no forms me retorna o endereço IP da minha máquina.

Att,

André Gouveia.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes