【SYS_CONTEXT】使用SYS_CONTEXT獲取連線到資料庫伺服器的IP地址

secooler發表於2011-04-06
使用SYS_CONTEXT可以獲得很多資料庫資訊,官方文件參考連結如下:


這裡給大家演示如何使用SYS_CONTEXT獲取連線到資料庫伺服器的IP地址。

1.使用SYS_CONTEXT獲取IP地址用法
以Windows作業系統的sqlplus客戶端連線secdb資料庫伺服器為例。

1)使用ipconfig命令獲取本地IP地址
C:\Users\secooler>ipconfig

Windows IP 配置


乙太網介面卡 本地連線 3:

   媒體狀態  . . . . . . . . . . . . : 媒體已斷開
   連線特定的 DNS 字尾 . . . . . . . :

乙太網介面卡 本地連線 2:

   連線特定的 DNS 字尾 . . . . . . . : iata.org
   本地連結 IPv6 地址. . . . . . . . : fe80::4012:497d:a9d9:bca%20
   IPv4 地址 . . . . . . . . . . . . : 10.142.8.173
   子網掩碼  . . . . . . . . . . . . : 255.255.255.192
   預設閘道器. . . . . . . . . . . . . :

本地IP地址為10.142.8.173

2)使用sqlplus命令連線secdb伺服器,獲取客戶端的IP地址。
C:\Users\secooler>sqlplus sec/sec@secdb

SQL*Plus: Release 10.2.0.3.0 - Production on 星期三 4月 6 21:32:00 2011

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select sys_context('userenv','ip_address') from dual;

SYS_CONTEXT('USERENV','IP_ADDRESS')
------------------------------------------------------------
10.142.8.173

如上所示,返回的IP地址資訊與本地IP地址資訊一致。
查詢成功。

2.使用SYS_CONTEXT獲取IP地址為空的問題及原因
1)問題現象
我們在伺服器端直接連線特定使用者secooler,然後嘗試獲取IP地址。
ora10g@secdb /home/oracle$ sqlplus secooler/secooler

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Apr 7 22:21:41 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

secooler@ora10g> select sys_context('userenv','ip_address') from dual;

SYS_CONTEXT('USERENV','IP_ADDRESS')
------------------------------------------------------------


注意,此時上面的SQL並沒有返回任何內容,即內容為NULL。

2)問題原因
這是由於SYS_CONTEXT無法獲取非TCP連線資訊的緣故。

3)重新使用TCP方式(即使用“@連線串”方式連線)進行連線secooler使用者,在此嘗試獲取IP地址
ora10g@secdb /home/oracle$ sqlplus secooler/secooler@ora10g

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Apr 7 22:25:44 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

secooler@ora10g> select sys_context('userenv','ip_address') from dual;

SYS_CONTEXT('USERENV','IP_ADDRESS')
------------------------------------------------------------
144.194.192.183

OK,此時IP地址獲取成功。

3.小結
使用SYS_CONTEXT可以獲取很多有用的資料庫資訊。
在使用這個方法時對其本身的限制需要做到心中有數,避免不必要的疑惑。

Good luck.

secooler
11.04.06

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-691814/,如需轉載,請註明出處,否則將追究法律責任。

相關文章