今天在玩测试环境的时候,有好几个侦听端口,我就嫌麻烦,他多余的删除了。只留下一个默认的LISTENER,结果发生了错误。
无法连接,我的服务器ip为:192.168.1.2
报错:目标主机不可达,
意思很明显,就是ip问题。我查看了一下本地ip和两个配置侦听的参数,发现ip都没有问题:
我就去用grid用户登录打开侦听配置界面在netmgr里面把listener的实例名改为固定ip地址
然后发现有出现新的错误:
发现目标地址正在使用????我想,那不是废话吗,我服务器ip就是当前配置的ip地址呀。
然后去diag下面查看日志。看到原因了。Hos_addr目标ip与自己本机的ip不一致,突然想到还有hosts文件里面没有修改对应关系,前段时间改了ip地址,忘记更改hosts里面的关系了。
然后去在/etc/hosts文件里面ip对应关系修改一下。把ip改成服务器当前地址。
1.目标连接不可达。。ip问题
2.地址正在使用。 当前系统ip正确。。查看是否修改过ip地址。查看与之相关联的配置ip是否全部更改如hosts文件、DNS等
修改完之后我就发现
是静态注册的,这时候我又想把它改为动态的了。
然后输入了一条命令:
动态注册:
alter system setlocal_listener=’(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.11.2)(PORT=1111)))’scope=both;
再来看监听状态。
突然发现,我的orcl实例怎么开启了两个侦听,一个动态一个静态呢??
什么问题???心里又不爽了。决定要干掉一个,因为这肯定是不正常的,为了确保服务正常,我们要求静态取消掉。
首先我们来看一下配置文件
哦~~~~发现问题了:静态注册的代码还在配置文件里面呢。有了这句话他就是静态注册的侦听了:
把它注释掉(注释,就是在他前面 加上#号)。然后再来查看一下
此刻我们发现我的orcl实例已经是动态注册了。而且只有一个了。
现在恢复正常了。
为了避免以后再犯这种错误呢,
做了一下总结:
如果你想要静态注册呢
(图形化操作很简单,这里我就不说了,只说一下配置文件的注册)
1.
使用grid用户进入到配置目录下,cd /u01/app/grid/product/11.2.0/grid/network/admin/
Vim listener.ora --修改这个文件,加入以下语句
SID_LIST_LNS1 = --LNS1为你想要成为静态注册的侦听服务名
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME =orcl.example.com) --参照自己的服务名
(ORACLE_HOME =/u01/app/oracle/product/11.1.0/dbhome_1) --参照自己的路径
(SID_NAME = orcl)
)
)
LNS1 = --侦听名字
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))--host服务器ip地址及端口号
)
2.
然后进入到oracle用户下去注册侦听服务
同样oracle修改相应的配置文件:/u01/app/oracle/product/11.1.0/dbhome_1/network/admin
vim tnsnames.ora
ORCL = 实例名,改为自己数据库的实例名字,
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521)) --服务器ip和段括号
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.example.com)
)
)
你检查服务网路配置是否问题?
检查侦听启动没有
你的数据服务名注册没有
lsnrct status 侦听名字
lsnrctl start LNS1 启动这个侦听。
ok了
如果想要动态注册呢?
第一:关掉静态注册,如上配置,把上面的语句注释掉,前面加#号就可以了
如下:
# (SID_LIST =
# (SID_DESC =
# (GLOBAL_DBNAME = orcl.example.com)
# (ORACLE_HOME = /u01/app/oracle/product/11.1.0/dbhome_1)
# (SID_NAME = orcl)
# )
# )
然后使用命令:
alter system set local_listener=’ (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.2)(PORT=1111)))’scope=both;
scope =both 说明是立即生效
这怎么好用呢?记住前面的 alter system set local_listener=’’ 就可以了
单引号里面的路径怎么来的呢??
查看你的侦听当前状态
Lsnrctl status
就是这一句。把它copy上去就可以了。
这样动态侦听就生成了。
侦听相关的命令:
Lsnrctl status
Lsnrctl stop
Lsnrctl start
SQL>show parameter local 可以看到侦听是动态还是静态
Grid用户:
Vim /u01/app/grid/product/11.2.0/grid/network/admin/listener.ora
这里是配置侦听信息的文件,想要增删侦听这里来配置
Oracle用户改:
/u01/app/oracle/product/11.1.0/dbhome_1/network/admin/tnsnames.ora
这里是开启关闭侦听的。比如,我把端口号换一下,那么侦听就失效了。。
我做了一个比喻:grid的listener.ora就是服务商有没有给你装摄像头
Oracle的tnsname.ora就是我要不要开启这个摄像头。
这就是一些简单的侦听配置文件
此文章还有不足之处,还请各位多多赐教