一、Oracle监听
监听具备独立性:与数据库的启动顺序无关前后,监听知道数据库的位置与端口,与数据库没有常链接。
链接创建流程:客户端链接监听,监听将客户端链接转发给数据库实例,数据库实例专门为链接启动一个
server process,同时将SP的地址告诉监听,监听再转告客户端,客户端直接对SP发起链接请求,SP校验经过
用户名密码后正式创建链接。监听只在创建链接时启做用,与数据库没有常链接,链接创建后,监听关闭不影
响会话正常执行SQL。
当链接时有@网络服务名,客户端会自动调用tnsname.ora文件,解析成IP,端口,连的服务名html
listener.ora文件: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) -- 静态链接配置,静态注册在查询监听状态时会有UNKNOWN状态的服务,静态链接稳定,数据库将服务名注册到监听 (SID_DESC = (GLOBAL_DBNAME =ipems) --服务名 (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) ( SID_NAME = ipems) --实例名 ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521)) ) ) -- 同一listener中配置一动态一静态监听 LSNR2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1526)) ) ) SID_LIST_LSNR2 = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = ipems) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (GLOBAL_DBNAME = ipems) ) ) tnsnames.ora文件 ipems = --网络服务名 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.200)(PORT = 1521)) ) (CONNECT_DATA = (SERVER= DEDICATED) --服务器模式 (SERVICE_NAME = ipems) --服务名 ) ) lsnr2 = --网络服务名 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.200)(PORT = 1526)) ) (CONNECT_DATA = (SERVER= DEDICATED) --服务器模式 dedicated,shared (SERVICE_NAME = ipems) --服务名 ) ) rac tnsnames.ora racdb= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.10)(PORT=1521)) --vip (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.11)(PORT=1521))) (CONNECT_DATA= (SERVICE_NAME=racdb))) -- 非默认的动态listener能够正常起来须要在initSID.ora中配置local_listener='lsnr2'; --动态网络服务名
二、Oracle数据库的几个名字
show parameter name
数据库名:select dbid,name from v$database;
实例名: show parameter instance
select INSTANCE_NUMBER,INSTANCE_NAME from v$instance;
服务名: show parameter service
主机名:数据库IP地址
网络服务名:随便启,最好与实例名相同
三、netca 配置监听程序和本地Net服务
[root@redhat7 ~]# xhost +
[root@redhat7 ~]# export DISPLAY=192.168.0.1:0.0 --将图形界面映射到本地
[root@redhat7 ~]# su - oracle
[oracle@redhat7 ~]$ netca
lsnrctl start| status| stop --监听的启动关闭状态查询
tnsping ipems --tnsping网络服务名,测试是否能够ping通,能ping通不必定能连上
netstat -tulnp|grep 1521 --监听是否正常启动
alter system register; --手动注册,pmon注册数据库service name到监听里
四、几种链接方式
sqlplus hr/hr --不走监听,本地连
sqlplus / as sysdba --不走监听
sqlplus hr/hr@ipems --走监听
sqlplus hr/hr@192.168.0.100:1521/ipems --走监听,没有走tnsname.ora
链接时oracle发现有@字符串,会利用tnsnames.ora解析为主机IP和端口号,经过这两找到监听,监听再根据service_name
找到具体实例。
五、双监听:双IP或者双端口
遗留,双网卡,负载均衡。
六、oracle的监听日志
查找日志:
# find /u01/app/ -name listener.log
lsnrctl status
oracle监听日志解析
监听日志记录监听器的工做过程,由于一些32bitOS自带的文件系统不支持2GB以上的文件,致使监听服务进程
(tnslsnr)append write日志文件出错关于“LISTENER.LOG日志大小不能超过2GB,超过会致使LISTENER监听器无
法处理新的链接。
清理监听日志:
lsnrctl set log_status off
mv listener.log listener.yyyymmdd
lsnrctl set log_status on
lsnrctl status显示信息解析
UNKNOWN,READY状态说明其目前有一个静态注册和一个动态注册
SID_XPT服务:为DG准备的服务,DB BROKER会用到,若是不用DG能够删掉。
SID:启动数据库实例的服务
SIDXDB:高效处理XML数据的服务,默认会占用8080端口。
PLSExtProc:PL/SQL调用外部接口(C、JAVA编写的过程)的服务,能够从listerner.ora中移除该项,在监听
启动时再也不启动PLSExtProc服务。
七、sqlnet.ora用来决定oracle怎么解析一个链接中出现的字符串。在域用户即非系统管理员用户安装oracle
建立数据库实例时会报错,能够将用户添加到DBA组或者删掉sqlnet.ora文件。sql
八、涉及IP地址有关的文件
Oracle默认会在..\product\10.2.0\db_1下面建立一个名为“当前IP或机器名_SID”的目录,该目录存储
的是SID实例的配置等信息;
同时Oracle默认在..\product\10.2.0\db_1\oc4j\j2ee目录下建立一个名为“OC4J_DBConsole_当前IP或机器名_SID”
的目录,存放的是OracleDBConsole服务的相关配置等信息;
Oracle 监听文件listener.ora,本地网络服务tnsnames.ora中的HOST设为当前IP地址;
数据库迁移或修改IP后只用关注第三种状况,对应修改便可。数据库
参考资料:
http://www.cnblogs.com/kerrycode/p/4227579.html
http://blog.itpub.net/17203031/viewspace-701017
http://www.ha97.com/4785.html服务器