This article presents a mixed bag of Oracle functionality relating to the identification of host names and IP addresses for Oracle clients and servers.
The UTL_INADDR
package was introduced in Oracle 8.1.6 to provide a means of retrieving host names and IP addresses of remote hosts from PL/SQL.
The GET_HOST_ADDRESS
function returns the IP address of the specified host name.
SQL> SELECT UTL_INADDR.get_host_address('bart') FROM dual; UTL_INADDR.GET_HOST_ADDRESS('BART') -------------------------------------------------------------------------------- 192.168.2.4 SQL>
The IP address of the database server is returned if the specified host name is NULL or is omitted.
SQL> SELECT UTL_INADDR.get_host_address from dual; GET_HOST_ADDRESS -------------------------------------------------------------------------------- 192.168.2.5 SQL>
An error is returned if the specified host name is not recognized.
SQL> SELECT UTL_INADDR.get_host_address('banana') from dual; SELECT UTL_INADDR.get_host_address('banana') from dual * ERROR at line 1: ORA-29257: host banana unknown ORA-06512: at "SYS.UTL_INADDR", line 19 ORA-06512: at "SYS.UTL_INADDR", line 40 ORA-06512: at line 1 SQL>
The GET_HOST_NAME
function returns the host name of the specified IP address.
SQL> SELECT UTL_INADDR.get_host_name('192.168.2.4') FROM dual; UTL_INADDR.GET_HOST_NAME('192.168.2.4') -------------------------------------------------------------------------------- bart SQL>
The host name of the database server is returned if the specified IP address is NULL or omitted.
SQL> SELECT UTL_INADDR.get_host_name FROM dual; GET_HOST_NAME -------------------------------------------------------------------------------- C4210gR2 1 row selected. SQL>
An error is returned if the specified IP address is not recognized.
SQL> SELECT UTL_INADDR.get_host_name('1.1.1.1') FROM dual; SELECT UTL_INADDR.get_host_name('1.1.1.1') FROM dual * ERROR at line 1: ORA-29257: host 1.1.1.1 unknown ORA-06512: at "SYS.UTL_INADDR", line 4 ORA-06512: at "SYS.UTL_INADDR", line 35 ORA-06512: at line 1 SQL>
The SYS_CONTEXT
function is able to return the following host and IP address information for the current session:
TERMINAL
- An operating system identifier for the current session. This is often the client machine name.HOST
- The host name of the client machine.IP_ADDRESS
- The IP address of the client machine.SERVER_HOST
- The host name of the server running the database instance.The following examples show the typical output for each variant.
SQL> SELECT SYS_CONTEXT('USERENV','TERMINAL') FROM dual; SYS_CONTEXT('USERENV','TERMINAL') -------------------------------------------------------------------- marge 1 row selected. SQL> SELECT SYS_CONTEXT('USERENV','HOST') FROM dual; SYS_CONTEXT('USERENV','HOST') -------------------------------------------------------------------- marge 1 row selected. SQL> SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM dual; SYS_CONTEXT('USERENV','IP_ADDRESS') -------------------------------------------------------------------- 192.168.2.3 1 row selected. SQL> SELECT SYS_CONTEXT('USERENV','SERVER_HOST') FROM dual; SYS_CONTEXT('USERENV','SERVER_HOST') -------------------------------------------------------------------- C4210gr2 1 row selected. SQL>
The HOST_NAME
column of the V$INSTANCE
view contains the host name of the server running the instance.
SQL> SELECT host_name FROM v$instance; HOST_NAME ------------------------------------------------ C4210gR2 1 row selected. SQL>
The V$SESSION
view contains the following host information for all database sessions:
TERMINAL
- The operating system terminal name for the client. This is often set to the client machine name.MACHINE
- The operating system name for the client machine. This may include the domain name if present.The following examples show the typical output for each column.
SQL> SELECT terminal, machine FROM v$session WHERE username = 'TIM_HALL'; TERMINAL MACHINE ------------------------------ ---------------------------------------------------- MARGE ORACLE-BASE\MARGE 1 row selected. SQL>
For more information see: