------------------
当产生错误时,oracle通常将相关消息写入警报日志,但在后台进程和用户会话的情况下,将消息写入到跟踪日志文件
1 oracle实例后台进程的跟踪文件通过backgroup_dump_dest定位。
例如:pmon和smon的跟踪文件在错误发生或smon需要执行实例恢复时将记录一个条目,qmon的跟踪文件在它产生新进程时会记录一条消息。
2 针对单独的用户会话或数据库连接也会创建跟踪文件,这些跟踪文件由初始参数user_dump_dest指定的目录中
在两种情况下创建用户进程的跟踪文件
第一种:因为权限问题,用完空间等而在用户会话中产生一些类型的错误。
第二种:可以使用命令alter session set sql_trace=true显示的创建跟踪文件,针对用户执行的每个sql语句生成跟踪信息,这样可以在调整用户的sql语句时起到帮助作用
----------------------------explain plan
使用explain plan命令来查看oracle优化器用来执行sql语句的查询计划,它不用真正地执行sql语句。它只是列出了所需使用的计划,并把这个计划插入到一个oracle表中。
使用explain plan之前,oracle账户必须先执行一个utlxplan.sql文件。这个脚本将创建一个plan_table表。explain_plan命令以记录形式向这个表插入新的执行计划。
explain plan<set statement_id='customer'> for select * from customer
select * from plan_table where statement_id='customer'
-------------------------------autotrace
autotrace和explain plan之间的主要区别是:autotrace确实执行了查询(用trace的方法)。然后自动查询计划表,而explain plan没有这样做.
要使用autotrace .用户必须是plustrace 角色,运行plustrace.sql 通常位于oracle_home/rdbms/admin 文件夹下
set autotrace on 打开autotrace的简便方法
set auto on exp 仅显示explain plan
set autotrace on stat 仅显示统计信息
set auto trace 不显示查询的输出结果
-------------------------------sql trace
利用oracle的sql trace使用程序可以对指定查询,批处理进程和整个系统做时间统计,它可帮助我们彻底找到系统中可能存在的瓶颈.
----sql trace有如下功能
(1)sql_trace 运行这个查询并输出一个所执行oracle查询的统计信息
(2)sql_trace帮助开发人员分析查询的每个部分
(3)oracle 的sql trace 实用程序在一个跟踪。文件里记录了数据库的所有活动<特别是查询>这个跟踪文件由oracle sql trace生成,但它非常难于读取,因此需tkprof实用程序把它转换成可以阅读的格式。
----简单查询使用sql trace 的简单步骤
(1)设置下面的init.ora参数<spfile用户将需要使用alter system 命令改变这些参数>
1.timed_statistics 允许在系统中执行跟踪操作
2.user_Dump_dest 参数指定了文件所在位置
3.max_dump_file_size 指定了‘设备级中最小物理块尺寸’ 块中最大的文件大小
这三个参数都可以用alter system 命令设置。当下一个用户登录时就会起作用,但不会对当前已登录到系统的用户起作用,可以使用alter session命令。
在会话级别设定timed_Statistics 和max_dump_file_size
(2)alter session set sql_trace true;
(3)运行需跟踪的查询
(4)alter sesion set sql_trace flase;
运行tkprof把trace文件转换成为可阅读的格式
tkprof ...trc ...prf explain =system/oracle账户必须先执行一个utlxplan
tkprof 输出部分
1.sql语句
2.统计部分
3.信息部分
4.行源操作部分
5.explain plan
------------------------------trcess
可以使用trcess实用程序聚集生成的跟踪文件,可以使用该工具将来自于许多跟踪文件的信息,合并到一个输出文件中,来自于trcsess的输出是由原始数据构成的统一文件。
trcess 工具设计用来读取数据库跟踪文件,提取dba感兴趣的信息,跟踪信息可以按照会话标识符(sid和序号),客户端标识符,服务名称,动作名称,或模块名称进行定位。该工具主要用于共享服务器或
连接池环境。在这种环境中必须跟踪多个进程以捕获所有相关信息,它不解释跟踪文件,可使用tkprof 或其他工具分析这个文件
使用trcess将多个跟踪文件保存到一个文件中
-------------------------使用dbms_monitor
dbms_monitor是在oracle 10g中引入的内置程序包,通过该程序包可以跟踪从客户机到中间层,再到后端数据库的任何用户的会话。从而可以较为容易地标识创建大量工作量的特定用户。
也可使用dbms_monitor程序包监控waits和binds.该程序包代替了dbms_support.start_trace_in_session 过程或10046事件设置。设置该事件可向用户提供跟踪特定会话上的waits和binds的能力。
具有dba角色才可以使用dbms_monitor以端对端的应用程序跟踪可以基于如下:
会话
客户端标识符
实例
服务名
模块名
操作名
新的属性client_identifier<客户端标识符>持续跨越所有层和会话以唯一标识符客户端会话。可以通过v$session视图的client_identifier 列查看客户端标识符
dbms_trace包是另一种跟踪方法,它专门设计用于跟踪pl/sql而不是单个会话当要调试pl/sql程序时,它非常有用。
可以使用dbms_System程序包来得到其他用户会话的信息,然后通过这些信息来跟踪这些会话,首先,必须从v$session里得到用户的信息,然后把这个信息传递给开始跟踪的会话。
select sid,serial# from v$session where username='scott';
execute dbms_system.set_Sql_trace_in_session(9,190,true);
还可以对正在使用dbms_session程序包的会话执行trace,这个程序包在跟踪含有存储过错的查询时特别有用。
execute dbms_Session.set_Sql_trace(true);
-----------------------------------事件(event)
事件与oracle实例中的系统触发器类似
如果在初始化参数文件中设置了事件或使用alter system 或alter session命令来设置,那么oracle将根据事件中设置的条件将信息捕捉到跟踪文件,可设多种事件,可通过oerr命令行工具来描述
oerr ora 10046
1.可以通过在初始化参数文件中使用下面命令行启动这个事件。
event='10046 trace name context forever ,level 8'
2.或在会话级别上使用alter session命令
alter session set events '10046 trace name context forever,level 12'
系统将捕捉跟踪信息,并将他们保存到初始化参数文件中设置的user_dump_Dest目录下的文件中,这个事件等价于初始化参数文件中设置sql_trace=true显示的创建跟踪文件
一个触发器可以捕捉到相关实例和单个数据库会话的所有相关信息,并保存到跟踪文件。
-----------------------------------转储
一个oracle实例或者数据库中的多个结构都可以被转储到一个跟踪文件,以备底层的分析使用。例如
控制文件,数据文件文件头,重做日志文件的头信息,实例状态,进程状态,库缓存,数据块,重做块
下面命令创建这些转储
alter sesion set events 'immediate trace name controlf leve 10'
alter sesion set events 'immediate trace name file_hdrs leve 10'
alter sesion set events 'immediate trace name redohdr leve 10'
alter sesion set events 'immediate trace name systemstate leve 10'
alter sesion set events 'immediate trace name processtate leve 10'
alter sesion set events 'immediate trace name libary_Cache leve 10'
alter system dump datafile 10 block 2057;
alter system dump logfile '<logfilename>';
当产生错误时,oracle通常将相关消息写入警报日志,但在后台进程和用户会话的情况下,将消息写入到跟踪日志文件
1 oracle实例后台进程的跟踪文件通过backgroup_dump_dest定位。
例如:pmon和smon的跟踪文件在错误发生或smon需要执行实例恢复时将记录一个条目,qmon的跟踪文件在它产生新进程时会记录一条消息。
2 针对单独的用户会话或数据库连接也会创建跟踪文件,这些跟踪文件由初始参数user_dump_dest指定的目录中
在两种情况下创建用户进程的跟踪文件
第一种:因为权限问题,用完空间等而在用户会话中产生一些类型的错误。
第二种:可以使用命令alter session set sql_trace=true显示的创建跟踪文件,针对用户执行的每个sql语句生成跟踪信息,这样可以在调整用户的sql语句时起到帮助作用
----------------------------explain plan
使用explain plan命令来查看oracle优化器用来执行sql语句的查询计划,它不用真正地执行sql语句。它只是列出了所需使用的计划,并把这个计划插入到一个oracle表中。
使用explain plan之前,oracle账户必须先执行一个utlxplan.sql文件。这个脚本将创建一个plan_table表。explain_plan命令以记录形式向这个表插入新的执行计划。
explain plan<set statement_id='customer'> for select * from customer
select * from plan_table where statement_id='customer'
-------------------------------autotrace
autotrace和explain plan之间的主要区别是:autotrace确实执行了查询(用trace的方法)。然后自动查询计划表,而explain plan没有这样做.
要使用autotrace .用户必须是plustrace 角色,运行plustrace.sql 通常位于oracle_home/rdbms/admin 文件夹下
set autotrace on 打开autotrace的简便方法
set auto on exp 仅显示explain plan
set autotrace on stat 仅显示统计信息
set auto trace 不显示查询的输出结果
-------------------------------sql trace
利用oracle的sql trace使用程序可以对指定查询,批处理进程和整个系统做时间统计,它可帮助我们彻底找到系统中可能存在的瓶颈.
----sql trace有如下功能
(1)sql_trace 运行这个查询并输出一个所执行oracle查询的统计信息
(2)sql_trace帮助开发人员分析查询的每个部分
(3)oracle 的sql trace 实用程序在一个跟踪。文件里记录了数据库的所有活动<特别是查询>这个跟踪文件由oracle sql trace生成,但它非常难于读取,因此需tkprof实用程序把它转换成可以阅读的格式。
----简单查询使用sql trace 的简单步骤
(1)设置下面的init.ora参数<spfile用户将需要使用alter system 命令改变这些参数>
1.timed_statistics 允许在系统中执行跟踪操作
2.user_Dump_dest 参数指定了文件所在位置
3.max_dump_file_size 指定了‘设备级中最小物理块尺寸’ 块中最大的文件大小
这三个参数都可以用alter system 命令设置。当下一个用户登录时就会起作用,但不会对当前已登录到系统的用户起作用,可以使用alter session命令。
在会话级别设定timed_Statistics 和max_dump_file_size
(2)alter session set sql_trace true;
(3)运行需跟踪的查询
(4)alter sesion set sql_trace flase;
运行tkprof把trace文件转换成为可阅读的格式
tkprof ...trc ...prf explain =system/oracle账户必须先执行一个utlxplan
tkprof 输出部分
1.sql语句
2.统计部分
3.信息部分
4.行源操作部分
5.explain plan
------------------------------trcess
可以使用trcess实用程序聚集生成的跟踪文件,可以使用该工具将来自于许多跟踪文件的信息,合并到一个输出文件中,来自于trcsess的输出是由原始数据构成的统一文件。
trcess 工具设计用来读取数据库跟踪文件,提取dba感兴趣的信息,跟踪信息可以按照会话标识符(sid和序号),客户端标识符,服务名称,动作名称,或模块名称进行定位。该工具主要用于共享服务器或
连接池环境。在这种环境中必须跟踪多个进程以捕获所有相关信息,它不解释跟踪文件,可使用tkprof 或其他工具分析这个文件
使用trcess将多个跟踪文件保存到一个文件中
-------------------------使用dbms_monitor
dbms_monitor是在oracle 10g中引入的内置程序包,通过该程序包可以跟踪从客户机到中间层,再到后端数据库的任何用户的会话。从而可以较为容易地标识创建大量工作量的特定用户。
也可使用dbms_monitor程序包监控waits和binds.该程序包代替了dbms_support.start_trace_in_session 过程或10046事件设置。设置该事件可向用户提供跟踪特定会话上的waits和binds的能力。
具有dba角色才可以使用dbms_monitor以端对端的应用程序跟踪可以基于如下:
会话
客户端标识符
实例
服务名
模块名
操作名
新的属性client_identifier<客户端标识符>持续跨越所有层和会话以唯一标识符客户端会话。可以通过v$session视图的client_identifier 列查看客户端标识符
dbms_trace包是另一种跟踪方法,它专门设计用于跟踪pl/sql而不是单个会话当要调试pl/sql程序时,它非常有用。
可以使用dbms_System程序包来得到其他用户会话的信息,然后通过这些信息来跟踪这些会话,首先,必须从v$session里得到用户的信息,然后把这个信息传递给开始跟踪的会话。
select sid,serial# from v$session where username='scott';
execute dbms_system.set_Sql_trace_in_session(9,190,true);
还可以对正在使用dbms_session程序包的会话执行trace,这个程序包在跟踪含有存储过错的查询时特别有用。
execute dbms_Session.set_Sql_trace(true);
-----------------------------------事件(event)
事件与oracle实例中的系统触发器类似
如果在初始化参数文件中设置了事件或使用alter system 或alter session命令来设置,那么oracle将根据事件中设置的条件将信息捕捉到跟踪文件,可设多种事件,可通过oerr命令行工具来描述
oerr ora 10046
1.可以通过在初始化参数文件中使用下面命令行启动这个事件。
event='10046 trace name context forever ,level 8'
2.或在会话级别上使用alter session命令
alter session set events '10046 trace name context forever,level 12'
系统将捕捉跟踪信息,并将他们保存到初始化参数文件中设置的user_dump_Dest目录下的文件中,这个事件等价于初始化参数文件中设置sql_trace=true显示的创建跟踪文件
一个触发器可以捕捉到相关实例和单个数据库会话的所有相关信息,并保存到跟踪文件。
-----------------------------------转储
一个oracle实例或者数据库中的多个结构都可以被转储到一个跟踪文件,以备底层的分析使用。例如
控制文件,数据文件文件头,重做日志文件的头信息,实例状态,进程状态,库缓存,数据块,重做块
下面命令创建这些转储
alter sesion set events 'immediate trace name controlf leve 10'
alter sesion set events 'immediate trace name file_hdrs leve 10'
alter sesion set events 'immediate trace name redohdr leve 10'
alter sesion set events 'immediate trace name systemstate leve 10'
alter sesion set events 'immediate trace name processtate leve 10'
alter sesion set events 'immediate trace name libary_Cache leve 10'
alter system dump datafile 10 block 2057;
alter system dump logfile '<logfilename>';