1.Oracle监听拓扑结构
??? 1521
Oracle网络没有负载,没有负载的一般不容易出问题
连接建立流程
监听:用户连接监听,监听知道数据库在什么位置,他们之间没有长连接
??? 监听把用户的连接请求转发给instance,实例会为这个连接启动一个Server Process,
??? 同时会把Server Process的地址告诉监听,监听告诉客户端,然后客户端直接发起对SP的请求,
??? 同时把用户名和密码给SP,SP会验证,验证成功,建立成功连接,此时和监听没有任何关系,
??? 监听只是在数据库之间建立连接的时候起作用
监听的独立性
监听和数据库之间没有必然联系,但是相互之间可以找到,他们之间没有长连接
监听只做一件事情就是在建立连接的时候起作用,负责转发,一段连接建立,监听没有负载
短时间内有大量的链接请求,可能会出现短时间的延迟,监听是一个端口
2.共享和专用服务器模式
3.Oracle数据库的几个名字
数据库名:show parameter name
实例名:show parameter instance
服务名:show parameter service,其中服务名可以修改
如何得到数据库的服务名字:show parameter service
4.netca
??? Oracle 的监听其实就是三个文件listener.ora 和tnsnames.ora 和 sqlnet.ora
??? 其中sqlnet.ora 基本不用,客户端放置tnsnames.ora,服务器端放置listener.ora
??? 但是实际环境中服务端有两个文件listener.ora 和tnsnames.ora
??? tnsnames.ora是客户端配置的,主机名字是Oracle的监听listener.ora文件里面配置的,也是程序监听的IP
??? 查看方法:netstat -tunpl |grep 1521 ,来确定IP因为实际环境中一个数据库上面可能有多个网卡和IP
5.双监听:双IP或者双端口
6.相关命令
7.动态注册和静态注册
??? 默认情况下Oracle会通过PMon把serviceName注册到监听里面,可以使用命令alter system register 来强制PMON来注册
??? 静态注册:GLOBAL_DBNAME(数据库ServiceName),SID_NAME(数据库实例名字),Oracle_HOME 解决ORacle动态注册不稳定情况
8.几种连接方式
??? sqplus [email protected]? :去tnsnames.ora根据字符串进行解析IP,port 和serviceName,监听必须认识Oracle数据库的serviceName
??? sqplus 用户名/密码 :不走监听,在本地
??? sqplus [email protected]:PORT/服务名字 走监听不走tnsnames.ora
??? sqplus / as sysdba:不走监听,在本地
9.排错流程
连接不上
检查客户端tnsnames.ora?
iP和 port 在服务器端使用:netstat -tunpl |grep 1521 查看IP和Port
service_names :show parameter service 得到服务名字
tnsping:客户端使用命令: tnsping service_names
如果可以通过说明tnsnames.ora 配置没有问题
lsnrctl status
原文:http://gaojingsong.iteye.com/blog/2283248