写这篇文章的时候,真的很想说一句叼你老味,一个问题搞了半天,这也要拜那些网上所谓的转载文章所导致的。作为一只菜头,可以明白到大牛们有意义的文章对我们解决问题的指导性作用有多大。但是偏偏现在很多都是不分场合,不根据实际转载的7头文章,不仅没有帮助我们解决问题,反而极大地混淆我们视线。如果你在网上搜9i和8080这两个关键字,肯定会搜出一大堆教你如何修改XDB服务和端口或是mts的文章,如果按这条路子走,你就扑硬街了。首先你会发觉,9.0.1.1.1是没有dbms_xdb这个包的,oralce会报错。而oracle官方的文档也是明确指出XDB这个新属性是从oracle 9i release2开始的。不是所有的牛奶都叫特仑苏,不是所有的orcl9i都叫9.2的。NMD,抱怨完了,该说正文了。
这个问题出现的背景是这样的,国庆即将来临,移动机房通知我们,机房最近要实施安全机制,所有服务器都要禁掉80,8000,8080这3个端口,我们被告知,我们的8080端口正在开放,需要禁掉。我心想不可能啊,我们的tomcat和resian都没有用8080这个端口啊,telnet一下,果然可以访问。NND,接下来就是排查处理的步骤
1.确定端口所绑定的进程
在cmd中输入 netstat -a -o,我们发现8080和9090都是由进程号为1300的进程调用。
2.确定调用进程
在cmd中输入 tasklist /fi "pid eq 1300",我们发现了一个熟悉的身影,TNSLSNR.EXE,oacle用来监听我们请求的服务OracleOraHome90TNSListener,8080端口正是被它调用的。
3.查看详细情况
在初步了解情况后,现在看一些详细的信息,在cmd中输入lsnrctl,接着再输入status,得到以下的信息。
4.查找资料,改变端口
在被网上一堆9.2.0.6版本的XDB文章虐待后,偶然看到一篇文章,以sysdba的身份登录sqlplus,输入以下命令来改变端口,sql如下
call dbms_namespace.shell('@jis/install/serverendp.ssh admin 8080 9090 -register');
这两个端口不是和我们在netstat和lsnrctl中看到的很一致吗?打开oracle_home目录下的jis/install/serverendp.ssh,以下是 serverendp.ssh代码
#!$ORACLE_HOME/bin/sess_exec @
#
# @serverendp.ssh <service> <tcp#> <ssl#> [ -register ]
#
# Add customary endpoints to service
# Remove endpoints if present
rmendpoint &1 main
rmendpoint &1 ssl
rmendpoint &1 mod8i
# Add the endpoints
addendpoint -port &2 &4 &1 main
addendpoint -port &3 &4 -ssl &1 ssl
addendpoint -net8 &1 mod8i
按照语句来看,8080应该是用来处理TCP的连接,而9090应该是处理SSL的连接,但是更具体的信息还望高手们不吝赐教,这个端口到底是用在哪里的,具体作用是啥。
接着把8080,9090改成我们想要变换的端口。我用的是8891,9981这两个个闲置端口,
调用成功,查看修改端口结果
显示端口已改变为8891和9981,再扫描一下8080端口,发现已经被禁掉,修改8080端口成功。
=========================================================================
以上的步骤是你没有改动过dispacters时的正常步骤,如果你像我一样,曾因相信网上所说,删除掉dispatchers和设置shared_servers=0,就可以禁掉这两个端口的使用的话,请看以下步骤。至于dedicated和mts等内容,网上一堆,不再累述。
假设条件如下,你曾经以sysdba身份在sqlplus中输入过以下的语句
1.alter system reset dispatchers scope=spfile sid='*';
2.alter system set shared_servers=0;
确认你的pfile还在不在,文件名一般为init.ora,确认init.ora包含以下参数
dispatchers="(PROTOCOL=TCP)(SER=MODOSE)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server.GiopServer)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)"
我服务器的pfile路径 “D:\oracle\admin\orcl\pfile\init.ora” 以下是解决的步骤
shutdown immediate
startup pfile='D:\oracle\admin\orcl\pfile\init.ora';
create spfile from pfile='D:\oracle\admin\orcl\pfile\init.ora';
shutdown immediate;
startup mount;
成功打开数据库后,在执行文章上半部分第4步骤的语句,修改端口就可以成功完成了。