使用dbms_xplan.display_cursor function需要的几个权限

本文提供了解决在使用dbms_xplan.display_cursor功能时遇到的权限问题的方法,包括授权步骤和实际操作案例。通过为用户详细说明如何授权v$sql_plan、v$session、v$sql_plan_statistics_all以及v$sql表的select权限,确保能够成功运行该功能,避免常见的错误提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用dbms_xplan.display_cursor function需要的几个权限:v$sql_plan,v$session,v$sql_plan_statistics_all,v$sql中的select权限!

如果没有会报:User has no SELECT privilege on v$sql_plan

                          User has no SELECT privilege on v$session

                          User has no SELECT privilege on v$sql_plan_statistics_all

                          User has no SELECT privilege on  v$sql

所以下面就分别的授权

   SQL> conn sys/root as sysdba

    Connected.

    SQL> grant select on v_$sql_plan to rhys;

    Grant succeeded.

    SQL> grant select on v_$session to rhys;

    Grant succeeded.

    SQL> grant select on v_$sql_plan_statistics_all to rhys;

    Grant succeeded.

    SQL> grant select on v_$sql to rhys;

    Grant succeeded.

    SQL> conn rhys/amy

    Connected.

    SQL> select * from table(dbms_xplan.display_cursor);

    PLAN_TABLE_OUTPUT

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    SQL_ID dyk4dprp70d74, child number 0

    -------------------------------------

    SELECT DECODE('A','A','1','2') FROM DUAL

    Plan hash value: 1388734953

    -----------------------------------------------------------------

    | Id | Operation | Name | Rows | Cost (%CPU)| Time |

    -----------------------------------------------------------------

    | 0 | SELECT STATEMENT | | | 2 (100)| |

    | 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |

    -----------------------------------------------------------------

    PLAN_TABLE_OUTPUT

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    13 rows selected.

    SQL>

通过上面的授权就不会报错啦!兄台分享此文希望大家能少走弯路!!
### DBMS_XPLAN.DISPLAY 参数详解及使用方法 #### 1. DBMS_XPLAN.DISPLAY 函数概述 `DBMS_XPLAN.DISPLAY` 是 Oracle 提供的一个内置函数,用于以格式化的方式显示存储在 `PLAN_TABLE` 表中的执行计划。此函数允许用户根据需要自定义输出的详细程度。 #### 2. 参数说明 `DBMS_XPLAN.DISPLAY` 的语法如下: ```sql DBMS_XPLAN.DISPLAY( table_name IN VARCHAR2 DEFAULT 'PLAN_TABLE', statement_id IN VARCHAR2 DEFAULT NULL, format IN VARCHAR2 DEFAULT 'TYPICAL' ); ``` - **table_name** 指定存储执行计划的表名。默认值为 `PLAN_TABLE`[^2]。如果在生成执行计划时指定了其他表,则需要在此参数中提供相应的表名。 - **statement_id** 指定要显示的执行计划的标识符。默认值为 `NULL`,表示显示最近一次插入到指定表中的执行计划[^2]。如果在生成执行计划时设置了 `STATEMENT_ID`,则需要在此参数中提供相同的值。 - **format** 控制输出的详细程度。支持的值包括: - `TYPICAL`:显示标准的执行计划信息(默认值)。 - `ALL`:显示所有可用的执行计划信息,包括访问路径、谓词信息和注释等。 - `BASIC`:仅显示基本的执行计划信息,如操作类型和对象名称。 - `SERIAL`:类似于 `TYPICAL`,但不显示并行查询的相关信息。 - `PARALLEL`:显示并行查询的详细信息。 - `ADVANCED`:显示更详细的执行计划信息,包括分区信息、谓词表达式和注释等[^3]。 #### 3. 使用示例 以下是一个完整的示例,展示如何使用 `DBMS_XPLAN.DISPLAY` 查看执行计划: ```sql -- 生成执行计划 EXPLAIN PLAN SET STATEMENT_ID = 'example_001' FOR SELECT * FROM employees WHERE department_id = 10; -- 查看执行计划 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(NULL, 'example_001', 'ALL')); ``` #### 4. 输出解释 `DBMS_XPLAN.DISPLAY` 的输出通常包括以下列: - **Plan Hash Value**:执行计划的哈希值,用于唯一标识该计划。 - **Id**:操作的编号,表示执行计划中各步骤的顺序。 - **Operation**:SQL 执行的操作类型,例如 `SELECT`, `TABLE ACCESS`, 或 `INDEX SCAN`。 - **Options**:操作的选项,例如索引扫描的类型。 - **Object Name**:涉及的对象名称,例如表或索引。 - **Cost**:优化器估算的操作成本。 - **Bytes**:优化器估算的返回数据量。 - **Rows**:优化器估算的返回行数。 #### 5. 注意事项 - 如果未创建 `PLAN_TABLE` 表,可以使用 `UTLXPLAN.SQL` 脚本来创建它。 - 在多会话环境中,确保正确使用 `STATEMENT_ID` 来区分不同的执行计划。 - 使用 `FORMAT` 参数控制输出的详细程度,以便根据需求获取必要的信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谭祖爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值