使用SYS_CONTEXT可以获得很多数据库信息,官方文档参考链接如下:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions165.htm#SQLRF06117
这里给大家演示如何使用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 --
【SYS_CONTEXT】使用SYS_CONTEXT获取连接到数据库服务器的IP地址
分享好友
分享这个小栈给你的朋友们,一起进步吧。
订阅须知
• 所有用户可根据关注领域订阅专区或所有专区
• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询
• 专区发布评论属默认订阅所评论专区(除付费小栈外)