ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【SYS_CONTEXT】使用SYS_CONTEXT获取连接到数据库服务器的IP地址

【SYS_CONTEXT】使用SYS_CONTEXT获取连接到数据库服务器的IP地址

原创 Linux操作系统 作者:secooler 时间:2011-04-06 22:46:36 0 删除 编辑
使用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 --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-691814/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    8092387