`
oolala
  • 浏览: 100380 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
09c341db-7f05-3f2b-a572-9ee69a5d8a77
unix环境高级编程
浏览量:21819
社区版块
存档分类
最新评论

ORACLE9i使用autotrace

阅读更多

ORACLE9i在使用autotrace之前,需要作一些初始的设置,
 
1.用sys用户运行脚本ultxplan.sql
建立这个表的脚本是:(UNIX:$ORACLE_HOME/rdbms/admin, Windows:%ORACLE_HOME%\rdbms\admin)ultxplan.sql。
SQL> connect sys/sys@colm2 as sysdba;
SQL> @C:\oracle\ora92\rdbms\admin\utlxplan.sql;
SQL> create public synonym plan_table for plan_table; --建立同义词
SQL> grant all on plan_table to public;--授权所有用户
 
2.要在数据库中建立一个角色plustrace,用sys用户运行脚本plustrce.sql来创建这个角色,这个脚本在目录(UNIX:$ORACLE_HOME/sqlplus/admin, Windows:%ORACLE_HOME%\sqlplus\admin)中;
SQL> @C:\oracle\ora92\sqlplus\admin\plustrce.sql;
3.然后将角色plustrace授予需要autotrace的用户;
SQL>grant plustrace to public;
 
* plustrace角色只是具有以下权限:
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$mystat to plustrace;
grant plustrace to dba with admin option;
 
plustrce.sql脚本如下
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$mystat to plustrace;
grant select on v_$session to plustrace;
grant plustrace to dba with admin option;
 
4.经过以上步骤的设置,就可以在sql*plus中使用autotrace了,使用非常简单,只要在执行语句之前,执行这样一条命令:
SQL>set autotrace on
即可。
 
*autotrace功能只能在SQL*PLUS里使用
 
补充:
1.ORA-01039: 视图基本对象的权限不足的解决方法
ORA-01039: 视图基本对象的权限不足
Current SQL statement for this session:
EXPLAIN PLAN SET STATEMENT_ID='PLUS561' FOR select table_name from user_tables

I think this is because the user doesn't have access to base tables for USER_TABLES view which belongs to SYS user.

DBA role will do it, "SELECT ANY TABLE" (in 8i & 9i) , and "SELECT ANY DICTIONARY"(in 9i & 10g) system privileges should also do it. Try one of the following 3 ways and run your autotrace again:-

1. 8i & 9i:-
grant select any table to USER123;

2. 9i and 10g:-
grant select any dictionary to USER123;

3. in 8i and 9i, you can also grant accees to the base tables explicitly ( or create a role to hold the grants ) :
grant select on OBJ$ to USER123;
grant select on USER$ to USER123;
grant select on SEG$ to USER123;
grant select on TS$ to USER123;
grant select on TAB$ to USER123;
 
2.在SQPPLUS中得到更新成功或者插入成功的记录数
SQL>set feedback 1;
 
3.在SQPPLUS中得到语句总执行的时间
SQL> set timing on;


4.使用sys进行autotrace的话统计信息statistic都会为0
SQL> select count(*) from dba_objects;
 COUNT(*)
----------
     31820
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (AGGREGATE)
   2    1     VIEW OF 'DBA_OBJECTS'
   3    2       UNION-ALL
   4    3         FILTER
   5    4           TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
   6    5             NESTED LOOPS
   7    6               TABLE ACCESS (FULL) OF 'USER$'
   8    6               INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
   9    4           TABLE ACCESS (BY INDEX ROWID) OF 'IND$'
 10    9             INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE)
 11    3         NESTED LOOPS
 12   11           TABLE ACCESS (FULL) OF 'USER$'
 13   11           INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE)
 
Statistics
----------------------------------------------------------
          0 recursive calls
          0 db block gets
          0 consistent gets
          0 physical reads
          0 redo size
          0 bytes sent via SQL*Net to client
          0 bytes received via SQL*Net from client
          0 SQL*Net roundtrips to/from client
          0 sorts (memory)
          0 sorts (disk)
          1 rows processed
 
5.AUTOTRACE的几个常用选项
(1). set autotrace on explain; --只显示执行计划
SQL> set autotrace on explain;
SQL> select count(*) from dba_objects;
 
 COUNT(*)
----------
     31820
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (AGGREGATE)
   2    1     VIEW OF 'DBA_OBJECTS'
   3    2       UNION-ALL
   4    3         FILTER
   5    4           TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
   6    5             NESTED LOOPS
   7    6               TABLE ACCESS (FULL) OF 'USER$'
   8    6               INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
   9    4           TABLE ACCESS (BY INDEX ROWID) OF 'IND$'
 10    9             INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE)
 11    3         NESTED LOOPS
 12   11           TABLE ACCESS (FULL) OF 'USER$'
 13   11           INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE)
 
(2). set autotrace on statistics;--只显示统计信息
SQL> set autotrace on statistics;
SQL> select count(*) from dba_objects;
 
 COUNT(*)
----------
     31820
 
Statistics
----------------------------------------------------------
          0 recursive calls
          0 db block gets
      25754 consistent gets
          0 physical reads
          0 redo size
        383 bytes sent via SQL*Net to client
        503 bytes received via SQL*Net from client
          2 SQL*Net roundtrips to/from client
          0 sorts (memory)
          0 sorts (disk)
          1 rows processed
 
(3). set autotrace traceonly;--同set autotrace on 只是不显示查询输出
SQL> set autotrace traceonly;
SQL> select count(*) from dba_objects;
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (AGGREGATE)
   2    1     VIEW OF 'DBA_OBJECTS'
   3    2       UNION-ALL
   4    3         FILTER
   5    4           TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
   6    5             NESTED LOOPS
   7    6               TABLE ACCESS (FULL) OF 'USER$'
  8    6               INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
   9    4           TABLE ACCESS (BY INDEX ROWID) OF 'IND$'
 10    9             INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE)
 11    3         NESTED LOOPS
 12   11           TABLE ACCESS (FULL) OF 'USER$'
 13   11           INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE)
 
Statistics
----------------------------------------------------------
          0 recursive calls
          0 db block gets
      25754 consistent gets
          0 physical reads
          0 redo size
        383 bytes sent via SQL*Net to client
        503 bytes received via SQL*Net from client
          2 SQL*Net roundtrips to/from client
          0 sorts (memory)
          0 sorts (disk)
          1 rows processed
 
(4).set autotrace traceonly explain;--比较实用的选项,只显示执行计划,但是与set autotrace on explain;相比不会执行语句,对于仅仅查看大表的Explain Plan非常管用。
SQL> set autotrace traceonly explain;
SQL> select * from dba_objects;
已用时间: 00: 00: 00.00
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   VIEW OF 'DBA_OBJECTS'
   2    1     UNION-ALL
   3    2       FILTER
   4    3         TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
   5    4           NESTED LOOPS
   6    5             TABLE ACCESS (FULL) OF 'USER$'
   7    5             INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
   8    3         TABLE ACCESS (BY INDEX ROWID) OF 'IND$'
   9    8           INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE)
 10    2       TABLE ACCESS (BY INDEX ROWID) OF 'LINK$'
 11   10         NESTED LOOPS
 12   11           TABLE ACCESS (FULL) OF 'USER$'
 13   11           INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE)
 
6.Statistics参数的含义
recursive calls = basically sql performed on behalf of your sql.
So, if we had to PARSE the query for example, we might have
had to run some other queries to get data dictionary info.
that would be recursive calls.
db block gets = blocks gotten in "current" mode. That is,
blocks gotten as they exist right now. You'll see these
for full table scans (segment headers areread in current mode)
and modification statements (we modify the block as it
exists "right now")
consistent gets = blocks gotten in consistent read mode.
This is the mode we
read blocks in with a select for example. Also,
when you do a searched UPDATE/DELETE, we read the blocks in
consistent read mode and then get the block in current mode
to actually do the modification. A select for update will do
this as well.
physical reads = self explanatory, physical IO
redo size = self explanatory -- amount of redo generated
sorts (memory)/(disk) -- sorts done.
 

分享到:
评论

相关推荐

    oracle 的Autotrace介绍

    oracle 的Autotrace介绍 是oracle10g的新技术,有人需要么

    oracle使用autotrace 功能

    AUTOTRACE是一个SQL*Plus工具,用于跟踪SQL的执行计划,收集执行时所耗用资源的统计信息,是SQL优化工具之一,下面给出启用AUTOTRACE 功能步骤。

    ORACLE9i_优化设计与系统调整

    §10.13.8 使用ORACLE 诊断工具 126 第三部分 ORACLE应用系统开发优化 128 第11章 诊断与调整工具- 128 §11.1 警告日志文件 128 §11.1.1 警告日志文件管理 128 §11.1.2 参考警告日志文件调整 128 §11.2 后台进程...

    Oracle性能分析——使用set_autotrace_on和set_timing_on来分析select语句的性能.doc

    Oracle 性能分析——使用 set_autotrace_on 和 set_timing_on 来分析 select 语句的性能 Oracle 数据库性能分析是数据库优化的重要步骤之一,通过对 SQL 语句的执行计划和运行时间的分析,可以了解数据库的性能瓶颈...

    使用AutoTrace软件将光栅图像转换为矢量格式的经验-研究论文

    使用AutoTrace软件(用于自动数字化)和ArcGIS在技术上对底部浮雕图的片段进行了编辑。 中文:最近,使用开放源代码软件,越来越精确的映射越来越引起人们的兴趣。 这项工作演示了将AutoTrace矢量化软件用于测深图...

    深入解析Oracle.DBA入门进阶与诊断案例

    10.1.2 Oracle 10g AUTOTRACE功能的增强 473 10.1.3 AUTOTRACE功能的内部操作 475 10.1.4 使用AUTOTRACE功能辅助SQL优化 477 10.2 获取SQL执行计划的方法 479 10.2.1 通过V$SQL_PLAN获得执行计划 479 ...

    Oracle数据库连接与会话

    使用autotrace命令时可以产生两个会话,通过一个使用单个进程的连接也可以建立两个会话。例如,在SQL*Plus中执行以下操作: SQL>select username,sid,serial#,server,paddr,statusfrom v$sessionwhere username=...

    深入解析OracleDBA入门进阶与诊断案例 3/4

     10.1 使用AUTOTRACE功能辅助SQL优化   10.2 获取SQL执行计划的方法   10.3 捕获问题SQL解决过度CPU消耗问题   10.4 使用SQL_TRACE/10046事件进行数据库诊断   10.5 使用物化视图进行翻页性能调整  ...

    深入解析OracleDBA入门进阶与诊断案例 2/4

     10.1 使用AUTOTRACE功能辅助SQL优化   10.2 获取SQL执行计划的方法   10.3 捕获问题SQL解决过度CPU消耗问题   10.4 使用SQL_TRACE/10046事件进行数据库诊断   10.5 使用物化视图进行翻页性能调整  ...

    深入解析OracleDBA入门进阶与诊断案例 4/4

     10.1 使用AUTOTRACE功能辅助SQL优化   10.2 获取SQL执行计划的方法   10.3 捕获问题SQL解决过度CPU消耗问题   10.4 使用SQL_TRACE/10046事件进行数据库诊断   10.5 使用物化视图进行翻页性能调整  ...

    Oracle优化常用概念.pptx

    可以使用 Pl/sql 中按 F5、Explain plan、Sql trace 和 Sql/plus autotrace 等方式生成执行计划。要看懂执行计划,需要多看执行计划,网上查一下具体含义。 统计信息和柱状图 统计信息是 Oracle 优化器计算成本所...

    Oracle执行计划.pptx

    2. 使用 Autotrace 语句:Autotrace 语句可以用来获取执行计划,例如:set autotrace on; 3. 使用其他工具:还有其他工具可以用来获取执行计划,例如 Oracle 的 SQL Developer 工具。 获取执行计划后,可以通过查看...

    Oracle数据库管理员技术指南

    8.5.5 使用 AUTOTRACE 获得 SQL 语句 执行计划和统计数据 8.6 优化回退段 8.6.1 最小化回退段争用 8.6.2 使动态扩充最小化 8.6.3 分布回退段的 I/O 8.7 优化索引 8.7.1 怎样确定和重建产生碎片的索引 8.7.2 ...

    大牛出手Oracle SQL优化实例讲解

    1.Oracle如何得到一个很大的表 2.loop insert 实例 3.autotrace验证索引的性能到底有多大? 4.EXPLAIN验证SQL是否走索引 5.结合autotrace创建并验证函数索引 6.sql trace分析工具--TKPROF详细讲解 7.V$SQL视图详解加...

    AutoTrace 0.31.1

    矢量化,包含执行程序与C++源码。 a program for converting bitmap to vector graphics. Inputformats BMP, TGA, PNM, PPM, PGM, PBM and those supported by ImageMagick. Exportformat Postscript, svg, xfig, ...

    Oracle 临时表之临时表的应用问题

    网上有人给出了佳的优化思路是:  1、先将大表中满足条件的记录抽出来生成一张临时表  2、再将这较小的临时表与另一张较小的表进行关联查询  先不论思路是否值得商榷,这把临时表当成...  关于临时表的使用至

    oracle怎么查看执行计划

    怎么进行autotrace进行查看执行计划

    Oracle执行计划详细解读.pptx

    2. 使用 Autotrace 工具:Autotrace 是 Oracle 提供的一种工具,用于跟踪 SQL 语句的执行过程,可以生成执行计划。例如: ```sql set autotrace on; select * from dual; ``` 3. 使用其他工具:还有其他一些工具可以...

    oracle执行计划

    oracle执行计划,设置autotrace允许显示DML语句的一些统计信息和/或查询计划。

Global site tag (gtag.js) - Google Analytics