Oracle NET配置及工作原理
Oracle NET是一个软件层,支持不同网络协议之间的转换。不同的物理机器可以借助这个软件层实现相互间的通信,具体而言就是实现对oracle的远程访问。
客户端提供服务名,然后oracle net将用户指定的服务名称解析为对应服务器主机和数据库实例。客户端上TNSNAMES.ORA文件记录每个oracle net 别名对应的主机和oracle实例;
Oracle NET配置文件包括LISTENER.ORA,TNSNAMES.ORA,SQLNET.ORA和LDAP.ORA;
LISTENER.ORA工作在数据库服务器端,负责监听希望通过网络访问oracle数据库的客户端连接要求;
TNSNAMES.ORA文件在客户端上,记录每个oracle net 别名对应的主机和oracle实例;
访问数据库的过程由客户端进程和服务器进程组成。客户端进程发起请求,例如sqlplus;服务器进程读写数据库,完成用户提交的各种命令。服务器进程又叫影子进程,服务器进程与数据库实例运行在同一台机器上。而服务器端监听器根据配置文件LISTENER.ORA工作,作为桥梁负责为客户端进程和影子进程搭桥牵线。
当两个进程在同一台机器上运行,oracle使用基于进程间(IPC)的本地通信;而当两个进程运行在不同机器,oracle使用oracle net实现两个进程的网络通信。
oracle net的启动和停止独立于数据库实例,它只负责将来自客户端进程的请求交给影子进程,由影子进程完成对数据库实例的读写。
共享服务器/多线程服务器这两种方式区别于使用影子进程服务客户端进程的方式。
当客户端程序发出请求串username/passwd@net_service_name之后,oracle NET 组件首先在本地查找sqlnet.ora文件确定命名方法,这里假设为local naming,则sqlnet.ora中内容如下:NAMES.DIRECTORY_PATH=(TNSNAMES).oracle NET紧接着查找tnsnames.ora,读取该文件,匹配net_service_name.如果该net_service_name匹配失败,则提示错误;如果成功则根据connect descriptor中protocol,host,port信息发给正确的listener.listener再根据connect descritpor中的service_name与向它注册了的oracle services 进行比对.如果比对成功, 则建立连接,否则提示错误。
--------------------------------------分割线 --------------------------------------
--------------------------------------分割线 --------------------------------------