数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

在Oracle中启用AutoTrace查看SQL执行计划


发布日期:2023年04月06日
 
在Oracle中启用AutoTrace查看SQL执行计划

通过以下方法可以把Autotrace的权限授予Everyone

如果你需要限制Autotrace权限可以把对public的授权改为对特定user的授权

D:\oracle\ora>sqlplus/nolog

SQL*Plus:ReleaseProductionon星期二::

Copyright(c)OracleCorporationAllrightsreserved

SQL>connectsysassysdba

请输入口令:

已连接

SQL>@?\rdbms\admin\utlxplan

表已创建

SQL>createpublicsynonymplan_tableforplan_table;

同义词已创建

SQL>grantallonplan_tabletopublic;

授权成功

SQL>@?\sqlplus\admin\plustrce

SQL>

SQL>droproleplustrace;

droproleplustrace

*

ERROR 位于第 行:

ORA: 角色PLUSTRACE不存在

SQL>createroleplustrace;

角色已创建

SQL>

SQL>grantselectonv_$sesstattoplustrace;

授权成功

SQL>grantselectonv_$statnametoplustrace;

授权成功

SQL>grantselectonv_$sessiontoplustrace;

授权成功

SQL>grantplustracetodbawithadminoption;

授权成功

SQL>

SQL>setechooff

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

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

SQL>grantplustracetopublic;

授权成功

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

SQL>connecteqsp/eqsp

已连接

SQL>setautotraceon

SQL>settimingon

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>setautotracetraceonly

SQL>selecttable_namefromuser_tables;

已选择

已用时间: : :

ExecutionPlan

SELECTSTATEMENTptimizer=CHOOSE

NESTEDLOOPS

NESTEDLOOPS(OUTER)

NESTEDLOOPS(OUTER)

NESTEDLOOPS(OUTER)

NESTEDLOOPS(OUTER)

NESTEDLOOPS

TABLEACCESS(BYINDEXROWID)OFOBJ$

INDEX(RANGESCAN)OFI_OBJ(UNIQUE)

TABLEACCESS(CLUSTER)OFTAB$

INDEX(UNIQUESCAN)OFI_OBJ#(NONUNIQUE)

TABLEACCESS(BYINDEXROWID)OFOBJ$

INDEX(UNIQUESCAN)OFI_OBJ(UNIQUE)

INDEX(UNIQUESCAN)OFI_OBJ(UNIQUE)

TABLEACCESS(CLUSTER)OFUSER$

INDEX(UNIQUESCAN)OFI_USER#(NONUNIQUE)

TABLEACCESS(CLUSTER)OFSEG$

INDEX(UNIQUESCAN)OFI_FILE#_BLOCK#(NONUNIQUE)

TABLEACCESS(CLUSTER)OFTS$

INDEX(UNIQUESCAN)OFI_TS#(NONUNIQUE)

Statistics

recursivecalls

dbblockgets

consistentgets

physicalreads

redosize

bytessentviaSQL*Nettoclient

bytesreceivedviaSQL*Netfromclient

SQL*Netroundtripsto/fromclient

sorts(memory)

sorts(disk)

rowsprocessed

SQL>

补充一下在g中的用法

g中带有plan_table这张表但是将名字改为了plan_table$

只需$ORACLE_HOME/sqlplus/admin/plustrcesql创建plustrace角色

grant plustrace to public

               

上一篇:oracle建立的分区表数据问题

下一篇:使用资源管理器优化Oracle性能