事情的起因是物流部的应用程序需要通过internet连接位于市区的数据库服务器,而该应用程序是个C/S应用。同时在市区的办公室配置了防火墙,并且只开放了1521端口。这种情况下,就变成tnsping能通,但是用sqlplus连就不能连通。
这种情况下,对于dedicated连接方式就不适用了。因为dedicated连接方式是listener在1521端口监听连接请求,一旦监听到连接请求,则分配一个端口号,并将该端口号发送给客户端,从而客户端再次连接到该端口上,从而连进oracle服务器。
网络上google了一下,发现有不少方法都说到如何穿越防火墙。
比如修改注册表,但是oracle需要打补丁,升级到Oracle 8.1.7.1.2。不同版本,注册表位置不一样
- Oracle 8.1.6 for NT/2k HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME (# is your desired homedir)
- Oracle 8.1.7.0.0 for NT/2k Doesn't work in Oracle 8.1.7.0.0 for NT/2k
- Oracle 8.1.7.1.2 for NT/2k HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE
很不幸,我的数据库是Oracle 8.1.7.0.0,暂时也不想升级。
还有一种方法是在数据库端(也可以是另外的机器,但是cman的机器必须和数据库都在防火墙的后面)安装了cman的前提下,启动cman,然后开放防火墙端的1630端口(看cman开的是什么端口啦),最后在客户端的tnsnames.ora文件中添加:
cmantest = (description = (address_list = (address =
CMAN从没有过,准备有空再研究一下。
第三种方法就是将考虑配置MTS了。因为对于MTS,则可以只用一个端口1521来处理客户端的请求,不会再发送端口号给客户端,而是直接把客户端的请求传递给某个可用的dispatcher。
现在,问题就转换为配置MTS了。
MTS配置其实不复杂,步骤如下:
1、配置几个init参数。如下:
mts_dispatchers = "(address=(protocol=TCP)(host=ypsyb-srv)(port=1521))(dispatchers=10)"
mts_max_dispatchers = 15
mts_servers = 50
mts_max_servers = 80
mts_service = webdb
mts_listener_address="(address=(protocol=TCP)(host=ypsyb-srv)(port=1521))"
large_pool_size=200000000
其中,比较重要的是mts_dispatchers ,必须加上(port=1521),否则dispatcher会在随机端口上监听,而不是1521端口。
保存以后,启动数据库。
2、配置监听
有资料说配置监听时应删除所有SID_LIST,实际测试下来,这是错误的说法。MTS下的listener.ora文件的内容与dedicated下的listener.ora的内容是一样的。
启动监听器。
3、配置客户端
有资料说在配置客户端时,在tnsnames.ora中的host一定要写数据库server的名字,而且还需要配置host以进行域名解析。这也是错误的。实际测试下来,MTS下的tnsnames.ora的内容与dedicated下的tnsnames.ora的内容一样。
4、使用sql/plus连接,一切ok。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9842/viewspace-156313/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9842/viewspace-156313/