六、配置Oracle数据库的网络环境
1. 连接建立的过程
场景:oracle默认监听器1521,把数据库服务注册到监听器中,客户端才能通过监听器登录到数据库上操作,
数据库的名称是orcl,注册后,叫服务命名
[oracle@oracledemo ~]$ sqlplus scott/tiger@localhost:1521/orcl.example.com
建立连接
注意:监听器只是在连接建立的过程中起作用,一旦连接建立,客户端直接与serverprocess交互
描述:客户端执行sqlplus的登录连接,服务器端有一个1521的监听器,要通过监听器登录到数据库的服务上,需要把数据库的服务注册到监听器上,如orcl.example.com叫服务命名
(1)执行sqlplus登录语句时,发送登录请求,监听器接收到后就会解析请求
(2)解析出来的结果有两种:第一就是请求信息不识别,也就是发出过来的请求是错误的请求,这时监听器就会直接拒绝登录的请求,这时客户端就会出错,第二种请求就是解析出来的信息是正确的,就可以让客户端进行登录
(3) 请求信息正确的情况下监听器会做两件事情: 创建PGA和ServerProcess(服务器请求,处理客户端请求)
(4) 执行sql语句,实际是直接发送给serverprocess
[oracle@oracledemo ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 09-JUL-2018 04:55:50 Copyright (c) 1991, 2009, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production Start Date 09-JUL-2018 00:49:26 Uptime 0 days 4 hr. 6 min. 24 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora ###配置文件 Listener Log File /u01/app/oracle/diag/tnslsnr/oracledemo/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracledemo)(PORT=1521))) #######监听端口 Services Summary... Service "orcl.example.com" has 1 instance(s). #######服务的名称 Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclXDB.example.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... The command completed successfully
2. 配置监听器
描述:配置完数据库后,有个默认监听器1521,要操作必须要把数据库(orcl.example.com)注册到监听器上,然后再使用不同的方法来配置监听器
- netca
- netmgr
- OEM
- 修改配置文件: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
[oracle@oracledemo ~]$ cat /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora # listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora # Generated by Oracle configuration tools. LISTENER03 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracledemo)(PORT = 1523)) ) LISTENER02 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracledemo)(PORT = 1522)) ) ADR_BASE_LISTENER03 = /u01/app/oracle ADR_BASE_LISTENER02 = /u01/app/oracle LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracledemo)(PORT = 1521)) ) ADR_BASE_LISTENER = /u01/app/oracle
3. 注册数据库的服务
描述:把数据库的服务注册到监听器上后,才能通过监听器登录,而且会有不同的名称如my.example.com,就对应orcl这个名称,
有了这种关联就可能登录到数据库实例上
注册方式
- 静态注册:通过修改配置文件实现
OEM操作描述: netservices管理 --> 选择对应的lister --> 编辑 --> 静态数据库注册 --> 添加 --> 填写名称、目录(已经设置的目录/u01/app/oracle/product/11.2.0/dbhome_1)、SID(数据库名称)
[oracle@oracledemo ~]$ vim /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora #描述中的操作相当于修改配置文件 (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = myorcl.exmple.com) (SID_NAME = orcl) (ORACLE_HOME = u01/app/oracle/product/11.2.0/dbhome_1) ) ) [oracle@oracledemo ~]$ lsnrctl status listener02 LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 09-JUL-2018 07:49:44 Copyright (c) 1991, 2009, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1522))) STATUS of the LISTENER ------------------------ Alias LISTENER02 Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production Start Date 09-JUL-2018 05:41:06 Uptime 0 days 2 hr. 8 min. 38 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/oracledemo/listener02/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracledemo)(PORT=1522))) The listener supports no services #启动的,没有注册任何服务 The command completed successfully
- 动态注册:通过修改service_names参数
动态注册问题:
(*)默认只能注册到1521的端口上
(*)如果要注册到不是默认的监听端口上要修改参数,需要修改一个参数local_listener
(*)由PMON进程来实成
[oracle@oracledemo ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 09-JUL-2018 08:17:15 Copyright (c) 1991, 2009, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) ### STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production Start Date 09-JUL-2018 00:49:26 Uptime 0 days 7 hr. 27 min. 49 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/oracledemo/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracledemo)(PORT=1521))) ####默认 Services Summary... Service "orcl.example.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclXDB.example.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... The command completed successfully [oracle@oracledemo ~]$ . oraenv ORACLE_SID = [orcl] ? orcl The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle [oracle@oracledemo ~]$ sqlplus / as sysdba SQL> show parameter service_names NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string orcl.example.com SQL> show parameter listene NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ listener_networks string local_listener string remote_listener string
新开一个窗口
[oracle@oracledemo ~]$ . oraenv ORACLE_SID = [orcl] ? orcl The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle [oracle@oracledemo ~]$ sqlplus / as sysdba SQL> show parameter service_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string orcl.example.com SQL> alter system set service_names='dev.exapmle.com'; System altered. SQL> show parameter service_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string dev.exapmle.com
另一个窗口查看
[oracle@oracledemo ~]$ lsnrctl status Service "dev.exapmle.com" has 1 instance(s). windows上测试: [c:\~]$ cd D:\oracleclient\oracle10g\instantclient_12_1 [D:\oracleclient\oracle10g\instantclient_12_1]$ sqlplus scott/tiger@192.168.56.90:1521/dev.exapmle.com SQL*Plus: Release 12.1.0.1.0 Production on Sat Jul 21 13:00:32 2018 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
4. 客户端的连接的方式
- 简便命名法(easy connect)
eg: sqlplus scott/tiger@192.168.56.90:1521/orcl.example.com JDBC(JAVA来连接): jdbc:oracle:thin:@192.168.56.90:1521/orcl.example.com
- 服务命名法: service name
客户端的配置:本地服务名称 --> 包含服务器IP、端口、服务名称(netmgr)
[oracle@oracledemo ~]$ ls /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/ listener1807095AM2956.bak listener.ora samples shrept.lst tnsnames1807095AM2956.bak tnsnames.ora -->配置完后新增的 [oracle@oracledemo ~]$ more /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. MYDEMO = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.90)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl.example.com) ) ) [oracle@oracledemo ~]$ sqlplus scott/tiger@mydemo ##直接使用mydemo来连接 SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 9 10:52:53 2018 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>
- 目录命名法(使用LADP服务器作为连接的方式,少用)
- 外部命名法(external naming几乎没人使用)
5. 共享服务器模式
- 专有服务器模式(默认)
(*)有一个客户端,就有一个PGA和服务器server process
描述:客户端登录时,监听器如果信息正确,监听器就会去创建PGA和server process,server process用来接受客户端发送过来的sql语句并执行,
如果客户端和PGA、server process是一对一的关系,这就是专有服务器模式
- 共享服务器模式(类似于数据库的连接池)
描述:服务器端的服务器进程包括一定信息数量是一定的,可能被一些客户端共享
注意:管理员登录一定是专有有服务器模式,RMAN备份和恢复也是只是专有服务器模式
工作原理:有100个客户端,在共享服务器模式下服务器进程是一定的,如在服务器端存在5个服务器进程,也就意味着在同一个时间,服务器端只能处理5个客户端的请求,如果有更多的请求就需要排队,也就是5个服务器的进程会被100个客户端所共享的,需要有一个排队的机制在服务器端有一个监听器,要通过它才能登录到oracle的数据库上,在共享服务器的模式下需要有分发器,如有3个分发器,分发器主要作用是转发请求,不会做具体的处理
如客户端1连接到监听器上需要连接登录,监听器会在所有的分发器中找一个最不Busy的分发器进行分配给客户端,如找到分发器1,这时监听器就会把分发器1分配给客户端1,这时客户端1就可以直接执行sql语句,最终还是由server process来执行sql语句,分发器接收到请求后,会把请求放入一个请求队列中,如果有一个server process空闲了,它就会从请求队列中取出一个请求来执行处理
当sql语句执行完后,server process把执行的结果放入响应队列中,当分发器将sql放入请求队列时,实际把分发器执行的信息也放入到请求队列中,所以当服务器进程执行完成后,实际上服务器进程的响应队列是知道返回给那个对应的分发器,分发器得到结果后就会返回给对应的客户端
与专有服务器模式区别是:客户端是直接发送给server process进程
summary: 服务器端的服务进程是一定的,如果存在过客户端就需要有一种队列的机制来共享服务器的进程
配置:服务器进程数、分发器个数
SQL> show parameter shared_servers NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ max_shared_servers integer shared_servers integer 1 #共享服务器进程个数,默认是一个表示专有服务器进程 修改配置: SQL> alter system set shared_servers=5; 配置分发器: SQL> show parameter dispatcher NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dispatchers string (PROTOCOL=TCP) (SERVICE=orclXDB) ###默认是没配置 max_dispatchers integer SQL> alter system set dispatchers='(PROTOCOL=TCP) (dispatchers=3)';
6. 分布式数据库基础
- 数据物理上被存放在网络的多个节点上,逻辑上是一个数据库
- 特点:数据的独立性,指的是用户不必关心数据如何分割和存储,只需要关心它需要什么数据,如下的订票,用户不会关心票的信息存在那里
例子描述:一个火车订票的系统,网络像是12306,可以订全国各地的火车票,实际上北京的是存在北京的数据库中,上海的是存在上海的数据库中,它们在物理上就不在一个地方,但是可以通过逻辑上整合在一起
- 操作分布式数据库:oracle支持分布式操作
描述:两个数据库如红色在北京,绿色在上海,物理上不一起,可以从逻辑上看作一个数据库,如在北京的数据为中保存部门表的信息dept,在上海的数据库中保存上海表的信息emp,它们组成了一个分布式的环境,要在分布式的环境中操作,如要在红色的数据库中访问绿色的数据库中的数据,可以通过网络来实现,这是数据库的链路,它是有方向的.
- 定义数据库的链路
CREATE DATABASE LINK [db_link_name] CONNECT TO [user_name] IDENTIFIED BY [password] USING '[tns_name]'; [db_link_name]: 是所要连接的数据库的服务名,也就是该数据库的真实名称(通常就是SID) [user_name]: 是所要连接的用户名称 [password]: 是所要连接的用户密码,是远程的数据库 [tns_name]: 是所要连接数据库的服务命名 如:create database link l2 conncet to scott identified by tiger using 'remoteorcl'; #不是12是l2
实际配置
node1: windows xp oracle10g 192.168.56.128 node2: oracle linux oracle11g 192.168.56.90
测试连接通性:
[root@oracledemo ~]# ping 192.168.56.128 PING 192.168.56.128 (192.168.56.128) 56(84) bytes of data. 64 bytes from 192.168.56.128: icmp_seq=1 ttl=128 time=1.75 ms
建立数据库链路(linux上oracle访问windows xp上的oracle)
创建服务命名:linux上oracle访问windows xp上的oracle,所有在linux机器上建立服务命名,去代表远端windows oracle数据库上的信息
在vnc上操作:创建一个服务命名代表远端
在vnc上操作:创建一个服务命名代表远端 [oracle@oracledemo ~]$ ls /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/ #VNC配置过程保存在tnsnames.ora中 listener1807095AM2956.bak listener.ora samples shrept.lst tnsnames1807095AM2956.bak tnsnames.ora [oracle@oracledemo ~]$ more /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora REMOTEORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.128)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )
创建数据库的链路(建立通道)
[oracle@oracledemo ~]$ sqlplus scott/tiger SQL> create database link l2 connect to scott identified by tiger using 'remoteorcl'; create database link l2 connect to scott identified by tiger using 'remoteorcl' ERROR at line 1: ORA-01031: insufficient privileges #没有创建的权限 SQL> conn / as sysdba #切换到管理员 Connected. SQL> grant create database link to scott; #授权 Grant succeeded. SQL> conn scott/tiger #切换到scott Connected. SQL> create database link l2 connect to scott identified by tiger using 'remoteorcl'; Database link created.
分布式数据库查询
SQL> select ename,dname #@l2是访问windows上的oracle 2 from dept,emp@l2 3 where dept.deptno=emp.deptno; ENAME DNAME ---------- -------------- SMITH RESEARCH ALLEN SALES WARD SALES JONES RESEARCH MARTIN SALES BLAKE SALES CLARK ACCOUNTING SCOTT RESEARCH KING ACCOUNTING ### TURNER SALES ADAMS RESEARCH ENAME DNAME ---------- -------------- JAMES SALES FORD RESEARCH MILLER ACCOUNTING
修改windows某个用户的数据来测试
update emp set ename='KING123' where empno='7839'; commit
再查询
SQL> / ENAME DNAME ---------- -------------- SMITH RESEARCH ALLEN SALES WARD SALES JONES RESEARCH MARTIN SALES BLAKE SALES CLARK ACCOUNTING SCOTT RESEARCH KING123 ACCOUNTING #######已经改变 TURNER SALES ADAMS RESEARCH ENAME DNAME ---------- -------------- JAMES SALES FORD RESEARCH MILLER ACCOUNTING
其他操作
创建别名:create synonym emp1 for emp@L2; #创建同义词来代表远端数据库的表 建立远程表的视图:create view emp as select * from emp1@L1 union select * from emp2@L2 插入操作:insert into emp select * from emp@L2; 数据复制: create table emp as select * from emp@L2; 操作: SQL> conn / as sysdba Connected. SQL> grant create synonym to scott; Grant succeeded. SQL> conn scott/tiger Connected. SQL> create synonym remoteemp for emp@l2; Synonym created. SQL> select ename,dname 2 from dept , remoteemp 3 where dept.deptno=remoteemp.deptno; ENAME DNAME ---------- -------------- SMITH RESEARCH ALLEN SALES WARD SALES JONES RESEARCH MARTIN SALES BLAKE SALES CLARK ACCOUNTING SCOTT RESEARCH KING123 ACCOUNTING TURNER SALES ADAMS RESEARCH ENAME DNAME ---------- -------------- JAMES SALES FORD RESEARCH MILLER ACCOUNTING 14 rows selected.
分布式数据库的跨节点更新
描述:分布式数据库是物理上不在一起,逻辑上是整体,如北京是主数据库,上海是从数据库,如果在主上的数据发生更新,可以copy到从上进行备份
实现的方式
* 快照
* 定义快维护关系表的异步副本
* 指在主表修改后指定的时间内刷新副本,用于主表修改少,但频繁查询的表
* 触发器
* 利用触发器实现数据的同步,如北京的数据库发生的更改,可以利用触发器同步到上海
* 区别
* 触发器是同步的,快照是异步的,使用触发器时如果主发生更改马上会copy到从不会有延时,这是同步,快照是过一段时间才会copy
* 触发器是定义在主数据库上,快照是定义在从数据库上
触发器的实现:当主数据库的员工工资更改后,需要马上同步到从数据库的上,主是linux上的oracl,从是xp上的oracle
主数据库上:
SQL> select ename,sal from emp; #在这例子中:涨工资前的工资,从数据库上也是一样 ENAME SAL ---------- ---------- SMITH 800 ALLEN 1600 WARD 1250 JONES 2975 MARTIN 1250 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 ADAMS 1100 ENAME SAL ---------- ---------- JAMES 950 FORD 3000 MILLER 1300
定义触发器
create or replace trigger syncSalary after update on emp for each row begin update remoteemp set sal=:new.sal where empno=:new.empno; end; / # 触发器的名称为syncSalary,针对是更新后的操作update,定义在主数据库的emp上,涨工资是要把每个员工的数据都更新到从数据库上, 所以这是一个针对行的触发器,触发器不需要使用变量就直接使用begin和end,这个触发器就会在主数据库update操作执行后去更新从 数据库,从数据为上的表同义词remoteemp, SQL> create or replace trigger syncSalary after update on emp for each row begin update remoteemp set sal=:new.sal where empno=:new.empno; end; Trigger created. SQL> select ename,sal from emp where empno=7839; ENAME SAL ---------- ---------- KING 5000 从数据库上的king的工资 SQL> select ename,sal from emp where empno=7839; ENAME SAL ---------- ---------- KING123 5000 主数据库上更新: SQL> update emp set sal=6000 where empno=7839; SQL> commit; SQL> select ename,sal from emp where empno=7839; ENAME SAL ---------- ---------- KING 6000 从数据库上检查: SQL> select ename,sal from emp where empno=7839; ENAME SAL ---------- ---------- KING123 6000
7. 使用跟踪文件诊断监听器
* 跟踪文件
后缀为trc文件 --》 跟踪会话的信息、监听器的信息
如在会话中打开会话的跟踪,它就会把当前会话的信息,包括执行的sql语句,以及统计信息记录到trc文件中,通过格式化文件就可以分析当前会话中的内容
位置:
SQL> show parameter dump NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ background_core_dump string partial background_dump_dest string /u01/app/oracle/diag/rdbms/orcl/orcl/trace ##跟踪文件的位置 core_dump_dest string /u01/app/oracle/diag/rdbms/orcl/orcl/cdump max_dump_file_size string unlimited shadow_core_dump string partial user_dump_dest string /u01/app/oracle/diag/rdbms/orcl/orcl/trace [oracle@oracledemo ~]$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/ [oracle@oracledemo trace]$ ls orcl_ora_20258.trc 跟踪文件 orcl_ora_28025.trm 跟踪文件的元信息文件
确定当前会话的跟踪文件
(1) 授权scott用户dba权限方便操作
SQL> grant dba to scott; SQL> conn scott/tiger 这是一个新的会话连接
(2)确定当前会话的ID
SQL> select sid from v$mystat where rownum=1; #v$是一个数据字典 SID ---------- 37
(3) 根据会话的ID来确定内存中的地址信息
SQL> select PADDR from v$session where SID=37; ##PADDR == address of process PADDR -------- 7745FC94
(4) 根据地址信息确定跟踪的会话ID,也就是操作系统的进程ID
SQL> select SPID from V$PROCESS where ADDR='7745FC94'; SPID ------------------------ 18691
(5) 开启会话跟踪
SQL> alter session set sql_trace=true; #关闭是false,不关闭会话文件会变得很大 Session altered. [oracle@oracledemo trace]$ ls *18691* #产生了对应的文件 orcl_ora_18691.trc orcl_ora_18691.trm
(*) oracle的SQL优化: 以下的是重复的SQL,可以通过这样的跟踪信息找到问题,不用生成多个执行计划
注意:解决重复SQL的方法:使用绑定变量或游标共享 select count(*) from scott.emp where deptno=10; select count(*) from scott.emp where deptno=20; select count(*) from scott.emp where deptno=30; select count(*) from scott.emp where deptno=40; select count(*) from scott.emp where deptno=50; SQL> alter session set sql_trace=false;
(*)使用tkprof工具对跟踪文件进行格式化,方便人阅读
[oracle@oracledemo trace]$ tkprof orcl_ora_18691.trc ~/a.txt sys=no sort=fchela # sys=no使用管理员产生的信息就不要进行格式化 sort=fchela根据sql的时间排序 [oracle@oracledemo trace]$ vim ~/a.txt SQL ID: 8xkd0hm6ys0p0 Plan Hash: 2083865914 会生成sql的执行计划,这个是ID号,通过分析得到它们的执行计划的ID号都是一样的,会影响SQL的性能 select count(*) from scott.emp where deptno=10 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 1 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 0.00 0.00 0 7 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 0 8 0 1
8. 使用监听器的跟踪信息
(*) 监听器参数配置
[oracle@oracledemo ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 09-JUL-2018 15:15:55 Copyright (c) 1991, 2009, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production Start Date 09-JUL-2018 00:49:26 Uptime 0 days 14 hr. 26 min. 29 sec Trace Level off 表示监听器跟踪是关闭状态,如果打开的话会产生另一个文件trc文件来跟踪 Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora 监听器的配置文件 Listener Log File /u01/app/oracle/diag/tnslsnr/oracledemo/listener/alert/log.xml 监听器的日志文件,不记录跟踪信息 Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracledemo)(PORT=1521))) Services Summary... Service "orcl.example.com" has 1 instance(s). Instance "orcl", status READY, has 4 handler(s) for this service... Service "orclXDB.example.com" has 1 instance(s). Instance "orcl", status READY, has 0 handler(s) for this service... The command completed successfully
(*) 开启跟踪
[oracle@oracledemo ~]$ lsnrctl LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 09-JUL-2018 15:18:45 Copyright (c) 1991, 2009, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> show The following operations are available after show An asterisk (*) denotes a modifier or extended command: rawmode displaymode rules trc_file 使用trace文件来记录跟踪信息 trc_directory trc_level 跟踪的级别 log_file log_directory 跟踪文件保存的目录 log_status current_listener inbound_connect_timeout startup_waittime snmp_visible save_config_on_stop dynamic_registration enable_global_dynamic_endpoint oracle_home pid
使用show命令查看每个参数
LSNRCTL> show trc_file Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) LISTENER parameter "trc_file" set to ora_8267_3086763712.trc ####对应的文件 The command completed successfully LSNRCTL> show trc_level Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) LISTENER parameter "trc_level" set to off ##级别 The command completed successfully LSNRCTL> show log_directory Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) LISTENER parameter "log_directory" set to /u01/app/oracle/diag/tnslsnr/oracledemo/listener/alert ###保存的目录 The command completed successfully [oracle@oracledemo ~]$ cd /u01/app/oracle/diag/tnslsnr/oracledemo/listener/alert [oracle@oracledemo alert]$ ls log.xml
使用trace命令来开启监听器的跟踪
LSNRCTL> help trace trace OFF | USER | ADMIN | SUPPORT [<listener_name>] : set tracing to the specified level 参数: off: 关闭监听器的跟踪,对应数字0 USER: 开启用户级别的跟踪,对应数字4 ADMIN: 开启管理级别的跟踪,对应数字10 SUPPORT: 开启ORACLE监听器所支持的跟踪信息,对应数字16 一般:设置成support(或者16),记录所有的支持的跟踪信息 LSNRCTL> trace support Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) Opened trace file: /u01/app/oracle/diag/tnslsnr/oracledemo/listener/trace/ora_8267_3086763712.trc 生成一个跟踪文件 The command completed successfully [oracle@oracledemo ~]$ ls /u01/app/oracle/diag/tnslsnr/oracledemo/listener/trace listener.log ora_8267_3086763712.trc ora_8267_3086763712.trm
使用tracasst命令格式化监听器的跟踪文件
Usage : trcasst [options] <filename> #还可以加转向输出符> [oracle@oracledemo trace]$ trcasst -la ora_8267_3086763712.trc > ~/b.txt 参数: -s Statistics 显示监听器的统计信息 [oracle@oracledemo trace]$ trcasst -s ora_8267_3086763712.trc 比较常用的参数 Trace Assistant Utility: Version 11.2.0.1.0 Production on July 9, 2018 3:49:12 PM Copyright (c) 2001, 2009, Oracle. All rights reserved. ************************************************************************* * Trace Assistant * ************************************************************************* ---------------------- Trace File Statistics: ---------------------- Start Timestamp : 018-07-09 15:43:27.055475 End Timestamp : 018-07-09 15:48:57.022934 Total number of Sessions: 2 DATABASE: Operation Count: 0 OPENS, 0 PARSES, 0 EXECUTES, 0 FETCHES ORACLE NET SERVICES: Total Calls : 12 sent, 11 received, 0 oci Total Bytes : 2059 sent, 3602 received Average Bytes: 171 sent per packet, 327 received per packet Maximum Bytes: 178 sent, 350 received Grand Total Packets: 12 sent, 11 received ************************************************************************* * Trace Assistant has completed * ************************************************************************* -e[0|1|2] Error information, default is 0 监听器中的错误信息 [oracle@oracledemo trace]$ trcasst -e1 ora_8267_3086763712.trc 显示所有错误信息 -l[a|i <connection_id>] Connection information 列出所有的连接 [oracle@oracledemo trace]$ trcasst -la ora_8267_3086763712.trc Connection ID: 2 每个代表数据库的连接 Socket Id: 12 Operation: Receive Multiplex: OFF Connect Data: Connection ID: 1 Operation: Receive Multiplex: OFF Connect Data: