SET AUTOT ON无法使用解决方法,以及PLAN_TABLE的使用

提示:数据库中的"PUBLIC"用户是一个概念用户,如果要将权限授给每个用户,可将权限授予PUBLIC

GRANT ALL ON sys.plan_table TO public;

参考网址:

https://netfiles.uiuc.edu/jstrode/www/oraplus/plus_set_autotrace.html

http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch8.htm#i1037226

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9010.htm#i2061796

http://docs.oracle.com/cd/B19306_01/server.102/b14211/ex_plan.htm#PFGRF009

http://www.oracle-base.com/articles/8i/explain-plan-usage.php

数据库版本信息:

测试用户:HR/HR

HR具有的系统权限和角色:
拥有的角色:

拥有的系统权限:

针对这种情况,参考http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch8.htm#i1037226

进行PLUSTRACE角色的建立:

向HR进行授权:

当前已经可以正常的使用执行计划:

分析plustrce.sql中的语句:

--
-- Copyright (c) Oracle Corporation 1995, 2002.  All Rights Reserved.
--
-- NAME
--   plustrce.sql
--
-- DESCRIPTION
--   Creates a role with access to Dynamic Performance Tables
--   for the SQL*Plus SET AUTOTRACE ... STATISTICS command.
--   After this script has been run, each user requiring access to
--   the AUTOTRACE feature should be granted the PLUSTRACE role by
--   the DBA.此处是要在DBA的权限下,把PLUSTRACE的角色赋给需要使用的用户。
-- 采用了admin的模式,可以将PLUSTRACE的权限传递下去、可以在赋给的用户,
-- 再次传递赋值
-- -- USAGE -- sqlplus "/ as sysdba" @plustrce 必须在SYS用户下进行操作 -- -- Catalog.sql must have been run before this file is run. -- This file must be run while connected to a DBA schema. set echo on drop role plustrace; 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 plustrace to dba with admin option;将PLUSTRACE角色赋给DBA的角色 set echo off

说明:

某些文档说明,如下:参考自Oracle官方文档:

       To use this feature, you must create a PLAN_TABLE table in your schema and then have the PLUSTRACE role granted to you. DBA privileges are required to grant the PLUSTRACE role. For information on how to grant a role and how to create the PLAN_TABLE table, see the Oracle Database SQL Reference.

     假如只是要在SQLPLUS端查看执行计划,而不需要将执行计划存入到PLAN_TABLE,使用PLUSTRACE角色即可实现功能。

注意:

      建立PLUSTRACE角色的目的很明显,只是给这个角色四个对象的访问权限,这是四个动态性能视图,相反,你可以

己建立一个其他的角色,将上述四个动态性能视图赋给新角色,或者直接在SYS将这四个动态性能视图的访问权限授予HR用户。

     实际上,赋值四个动态性能视图也可以使用一个系统权限也代替: GRANT SELECT ANY DICTIONARY TO HR.

这个权限赋给HR,表明它可以访问数据库任何的数据字典(视图和表),在我们实例的开发过程中,可能会为某个用户设

DBA的角色,DBA角色已经包含了SELECT ANY DICTIONARY的系统权限。所有拥有DBA权限的用户可以直接使

SQLPLUS中SET AUTOT ON的SQLPLUS命令,

   但是,在我接触过的所有的开发项目中,用户都会被授予DBA的权限,所以可以直接进行执行计划的查看,但是在外国人

开发过程中,它们对系统权限控制的相当严格,一般用户不会被授予DBA的角色,只是授予CONNECT,RESOURCE两个角色。

原文地址:https://www.cnblogs.com/caroline/p/2580355.html