昨天心血来潮,把Oracle的监听都删了,准备重新配一遍,结果弄了一天才配好,不过对Oracle的了解更深了一些。
对昨天的问题做一个总结:
1、直接在NetManager中删掉监听时,实际的监听服务好像并没有完全删除,我是通过重新添加与监听服务同名称同设置的监听文件后,通过NetConfigurationAssistant删掉的
2、重新配好listener.ora和tnsnames.ora后,发现用PL/SQL连不上,重启数据库时,报LocalListener连接字符串出错,于是根据spfile重建pfile,发现LocalListener的值必须和tnsnames.ora中设置的网络服务名对应,修改并重建spfile后,能启动数据库实例,并能用Sqlplus连上
3、通过PL/SQL连时发现连不上,所以sqlplus是不需要通过监听连数据库,而pl/sql是需要的,可以用pl/sql测试监听是否配置成功。重启监听,报错,发现是listener.ora中的实例名(必须和数据库的实例名对应)写错了(注意:该文件包含两部分(据说11g之后,只要监听部分就可以了,另一部分自动注册,我的也是11g啊,不知道为什么不行,留待解决),通过NetConfigurationAssistant或NetManager创建时可能只创建了一个,需要将OracleHome和SID的设置补全),改之,还是报错,检查tnsnames.ora,发现servicename写错了(必须和数据库的servicename对应),再改之,终于连上了。ps:Host可以写ip、局域网内可以直接写本机名、localhost
所碰到的所有错误名称:
1、协议适配器出错:最早报的错,此时数据库都没有启动
2、 TNS: 监听程序当前无法识别连接描述符中请求的服务:应该是监听文件出错了
3、invalid specification for system parameter LOCAL_LISTENERORA-00132: syntax error or unresolved network name ’LISTENER_ORCL’:pfile中LocalListener写错了
4、TNS: 监听程序无法分发客户机连接:listener.ora中sid写错了
5、监听程序不支持服务:listener.ora中没有加sid的配置
6、not logged on:数据库没有正确关闭,重启数据库