Oracle+9i&10g编程艺术:深入数据库体系结构读书笔记--------三、设置SQL*Plus的AUTOTRACE

AUTOTRACE是SQL*Plus中一个工具,可以显示所执行查询的解释计划(explain plan)以及所用的资源。这本书中大量使用了AUTOTRACE工具。

F:\oracle\ora92>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 6月 3 15:16:03 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect sys as sysdba
请输入口令:
已连接。
SQL> @?\rdbms\admin\utlxplan

表已创建。

SQL> create public synonym plan_table for plan_table;

同义词已创建。

SQL> grant all on plan_table to public ;

授权成功。


SQL> @?\sqlplus\admin\plustrce
SQL>
SQL> drop role plustrace;
drop role plustrace
*
ERROR 位于第 1 行:
ORA-01919: 角色'PLUSTRACE'不存在


SQL> create role plustrace;

角色已创建
SQL>
SQL> grant select on v_$sesstat to plustrace;

授权成功。

SQL> grant select on v_$statname to plustrace;

授权成功。

SQL> grant select on v_$session to plustrace;

授权成功。

SQL> grant plustrace to dba with admin option;

授权成功。

SQL>
SQL> set echo off 


DBA用户首先被授予了plustrace角色,然后我们可以把plustrace授予public

这样所有用户都将拥有plustrace角色的权限.

 

SQL> grant plustrace to public ;

授权成功。


然后我们就可以使用AutoTrace的功能了.

SQL> connect eqsp/eqsp
已连接。
SQL> set autotrace on
SQL> set timing on
SQL> 



关于Autotrace几个常用选项的说明:

SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出

SQL> select  table_name  from  user_tables;

TABLE_NAME
------------------------------
BONUS
DEPT
DUMMY
EMP
SALGRADE

已用时间:  00: 00: 00.00
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   NESTED LOOPS
   2    1     NESTED LOOPS (OUTER)
   3    2       NESTED LOOPS (OUTER)
   4    3         NESTED LOOPS (OUTER)
   5    4           NESTED LOOPS (OUTER)
   6    5             NESTED LOOPS
   7    6               TABLE ACCESS (BY INDEX ROWID) OF 'OBJ
   8    7                INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
   9    6                  TABLE ACCESS (CLUSTER) OF 'TAB$'
   10   9                  INDEX (UNIQUE SCAN) OF 'I_OBJ#' (NON-UNIQUE)
   11   5                TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
   12   11             INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE)
   13   4            INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE)
   14   3           TABLE ACCESS (CLUSTER) OF 'USER$'
   15   14        INDEX (UNIQUE SCAN) OF 'I_USER#' (NON-UNIQUE)
   16   2       TABLE ACCESS (CLUSTER) OF 'SEG$'
   17   16    INDEX (UNIQUE SCAN) OF 'I_FILE#_BLOCK#' (NON-UNIQUE)
   18   1   TABLE ACCESS (CLUSTER) OF 'TS$'
   19   18 INDEX (UNIQUE SCAN) OF 'I_TS#' (NON-UNIQUE

 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         73  consistent gets
          0  physical reads
          0  redo size
        452  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)
          5  rows processed


对于dba用户这样就可以查看执行计划了.但对于没有dba权限的用户,还需要grant select any dictionary to user_name;


 

你可能感兴趣的:(oracle,sql,编程,数据库,读书,loops)