服务器打开警报就不显示日志,跟踪日志和警报日志

1.警报日志*

(在这个目录下/opt/oracle/admin/SONE/bdump,然后 vi alert_sone.log 可以查看日志内容,这是第一种方法)

alert*.log 在background_dump_dest oracle系统日志

警告日志中包括各种提示性日志信息和各种警告、错误信息。

它的名字是alert_数据库SID.log,它的位置用初始化参数background_dump_dest设置.

利用文本编辑器的搜索功能,在警告日志中快速查找信息.

如:

(1)坏块错误ORA-1578或ORA-1498。即数据文件产生了坏块

(2)在线日志切换间隔

(3)数据库启动参数

(4)在数据库启动后,又做了什么主要的操作,增加了什么东西

(5)Oracle认为需要让DBA知道的警告和错误信息。如:

Mon Oct 13 20:03:27 2008

ARC0: Archiving not possible: No primary destinations

ARC0: Failed to archive thread 1 sequence 1636

(6)检查点信息。当log_checkpoints_to_alert参数设为真时,

检查点信息会被记入告警日志。

如果你想详细观察检查点的行为,将此参数设为真是很有帮助的。

如果你并不打算详细了解检查点的行为,保留此参数为假就行。

因为当此参数为真时,

这加重了Oracle对告警日志写操作的负担。

redo block address (这是RBA的意思)

alter system checkpoint

(7)最后一次的启动时间

DBA应该每日查看警告日志,发现问题,解决问题.

2.跟踪文件*

background_dump_dest

user_dump_dest

*****目的:(1)获取用户操作SQL  (2)获取SQL的统计信息:statistics和等待事件:wait event

下面主要研究用户的跟踪文件

(1)

sys:

[alter system set sql_trace=true scope=both; ]

grant select any dictionary to scott;

grant alter session to scott;

sqlplus scott/tiger

alter session set sql_trace=true;

select count(*) from  emp;

update emp set ename='test' where empno=7369;

commit;

select spid from v$process

where addr=(select paddr from v$session

where sid=

(select sid from v$mystat where rownum=1));*可以获取跟踪日志文件(这是第二种方法)

30109

quit

oracle:cd /u01/app/oracle/admin/orcl/udump

ls -l *30109*

orcl_ora_30109.trc

(2)tkprof orcl_ora_30109.trc out.txt sys=no  record=sql.txt(这是第三种方法)

*用tkprof格式化工具,sys=no不记录系统信息,record=sql.txt记录了用户的SQL语句

vi out.txt      统计信息

vi sql.txt      用户SQL

SQL_TRACE

sys:alter system set sql_trace=true(false) scope=both;

SQL> connect system/oracle

Connected.

SQL> grant alter session to scott;

sqlplus scott/tiger

alter session set sql_trace=true;

alter session set tracefile_identifier ="21";

select * from  emp,dept;(select * from emp where empno=7963)

alter session set sql_trace=false;

select spid from v$process where addr=(select paddr from v$session where sid=(select sid from v$mystat where rownum=1));

30109

quit

oracle:cd /u01/app/oracle/admin/orcl/udump

ls -l *30109*

orcl_ora_30109.trc

tkprof orcl_ora_30109.trc out.txt sys=no  record=sql.txt

vi out.txt 统计资料和执行计划

vi sql.txt 用户执行的SQL

逻辑读=一致性读+当前读;物理读=disk到物理内存

在你的语句之下,首先是一个表格,它通常有三行组成,

它显示该查询各阶段的重要的执行统计数据。这三行代表查询的三个主要阶段:

解析(Parse):此阶段是Oracle的优化器为SQL语句生成执行计划的阶段。

执行(Execute):此阶段是服务器进程按照执行计划执行语句的阶段。

抓取(Fetch):此阶段是服务器进程从表中抓取结果的阶段。

只有Select语句才需要此阶段,Update、Insert、Delete

等这些DML语句并不需要抓取行。

这个表格通常包括八列,这八列意义如下:

Call:说明了语句执行的每个阶段。

Count:此阶段的执行次数。

CPU:完成此阶段工作所耗的CPU时间,单位是毫秒。

Elapsed:完成此阶段工作所耗费的CPU时间再加上等待的时间,

单位也是毫秒。

Disk:完成此阶段工作所用的物理读次数。

Query:完成此阶段工作所用的一致读次数。consistent

Current:完成此阶段工作所用的当前读次数。

consistent Query和Current Query 加起来就是逻辑读。

逻辑读的两种类型

Current当前读: 为修改而读buffer,就是当前读,DML命令将块读进Buffer是为了修改

update

(块数)

consistent一致读: 因查询而读buffer,是一致读,SELECT

(块数)

当前读、一致读和起来是逻辑读

(块数)

select name,value from v$sysstat

where name in ('session logical reads',

'db block gets','consistent gets')

[

Oracle中更新语句的重启动

考虑一个简单的update语句:

update test set x=1 where y=1;

它是分为两步:

1. 根据where条件找出表中满足更新条件的数据行;

2. 更新步骤1中所找出的数据行的x值。

假如test表很大,update要执行好几分钟,而且在步骤1期间有人将某一行的y值改为2并提交了,那么在步骤2中,这个y=2的行是否还会被更新x列呢?

这种情况下,Oracle会选择“重启动”更新。

其实,Oracle在执行DML语句时,会用到两种不同的方式去读取数据块:

1. 一致读:在“找到”需要修改的数据行时,会采用consistent read

2. 当前读:在“获取”数据块来实际更新数据行时,会采用current read

Oracle就是通过这样来判断是否需要重启动的。

具体到上面的例子中,首先Oracle会利用一致读找到所有y=1的数据行,因此就算读取期间有别的会话修改了某一行的y值(如从y=1变为y=2),Oracle也会利用undo数据将该行的y列恢复到读取的那个时刻的值(即y=1),所以这一行还是会被读取。然后,当要实际更新这一行的时候,Oracle会利用当前读去获取数据块的最新版本,由于被提交过了,所以读到的y值是2,与之前一致读中的y=1不符。所以Oracle就知道了需要“重启动”这个update操作。

Oracle重启动的流程:

1. 回滚之前的修改操作

2. 进入select for update模式,锁定需要修改的行

3. 对锁定的行进行修改操作

]

db block gets: Number of times a CURRENT block was requested

consistent gets: Number of times a consistent read was requested for a block.

session logical reads: The sum of "db block gets" plus "consistent gets". This includes logical reads of database blocks from either the buffer cache or process private memory.

逻辑读

物理读

Rows:完成此阶段工作所操作的行数。

接下来一行:“Misses in library cache during parse:

”说明硬解析的次数,

本例中语句的执行进行了一次硬解析。

“Optimizer mode”是优化器模式,

这个我们会在SQL调优章节中详细讲述它的意义。

最后几行是执行计划,这也是后面章节的内容。

另外,我们在目标文件中还会发现大量的其他语句,注意,我们在跟踪其间,

只执行了一条SQL语句,跟踪文件中其他的语句,其实就是所谓的递归调用。

也就是为了完成我们的语句,Oracle内部执行的一些其他的SQL语句。

通过观察跟踪文件的目标文件,我们可以观察到比较精确的CPU时间、

物理读逻辑读等信息,这有助于我们了解一条SQL语句是否有效。

10046事件

sqlplus scott/tiger

alter session set timed_statistics=true;

alter session set max_dump_file_size=unlimited;

alter session set tracefile_identifier ="0121";

alter session set events '10046 trace name context

forever,level 12';

variable t number

exec :t:=7396;

select * from emp e,dept d

where e.empno=:t **“:t表示绑定变量”

and e.deptno=d.deptno ;

alter session set events '10046 trace name context off';

quit

/u01/app/oracle/admin/orcl/udump

tkprof test_ora_3516_21.trc  out5.txt sys=no  record=sql5.txt

Event 10046 - Enable SQL Statement Trace---跟踪SQL,

有执行计划,

邦定变量和等待的统计信息,level 12最具体

ALTER SESSION SET EVENTS

'10046 trace name context forever, level 12';

级别level参考如下图:

Level

Action

1

Print SQL statements, execution plans and

execution statistics

4

As level 1 plus bind variables

8

As level 1 plus wait statistics

Emit statistics for Oracle kernel internal function calls

(also called “wait events”) listed in v$event_name

12

As level 1 plus bind variables and

wait statistics

sys:

select * from v$session;

execute sys.dbms_system.set_sql_trace_in_session(303,908,TRUE);

execute sys.dbms_system.set_sql_trace_in_session(303,908,FALSE);

---------------------

set timing on:打开时间开关

SQL> connect scott/tiger

已连接。

SQL> select count(*) from emp;

COUNT(*)

----------

14

SQL> set timing on

SQL> select count(*) from emp;

COUNT(*)

----------

14

已用时间:  00: 00: 00.00

SQL> select count(*) from mobil

COUNT(*)

----------

2821

已用时间:  00: 00: 00.07

SQL> set timing off:关闭时间开关

----------------

set autotrace:

SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]}

[EXP[LAIN]] [STAT[ISTICS]]

On      exp  :按正常情况显示声明的输出,同时在后面补加上执行计划。

On  stat :按正常情况显示声明的输出,同时在后面补加上统计资料。

On      :按正常情况显示声明的输出,同时在后面补加上执行计划和统计资料。

Trace exp  :不显示声明原来的输出,只显示执行计划。

Trace stat :不显示声明原来的输出,只显示统计资料。

Trace     :不显示声明原来的输出,显示统计资料和执行计划。

Off      :关闭Set auto ,恢复正常状态

使用autotrace的前提:

(1)用户有PLUSTRACE角色,

用$ORACLE_HOME\sqlplus\admin\plustrce.sql

建立;

(2)有plan_table表;

sys:@$ORACLE_HOME/sqlplus/admin/plustrce.sql

grant plustrace to scott;

sql>set timing on

SQL> show autotrace

autotrace OFF

SQL> set autotrace on

set autotrace traceonly

set autotrace off

SQL> show autotrace

autotrace ON EXPLAIN STATISTICS

SQL> select * from dept;

SQL> select * from dept where deptno like '%0';

SQL> select * from dept where deptno=

(select max(deptno) from dept);

----------------------

statistics_level = { all | typical | basic }

V$STATISTICS_LEVEL,其中记录着各种资料是否被收集

timed_statistics

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值