Rol PLUSTRACE

En esta ocasión, voy a tratar algo bastante sencillo, pero que conociéndolo, les hará evitar un error al momento de querer ver el plan de ejecución en modo caracter dentro del SQL Plus.

Ok, para ver un plan de ejecución de una consulta en el SQL Plus, podemos usar el comando set autotrace traceonly. Sin embargo, puede llegar a dar problemas por no tener el usuario “mortal” con el que estamos conectados, el privilegio suficiente.

Así, veamos este caso de error:

SQL> conn prueba/prueba
Connected.
SQL>
SQL> set autotrace traceonly
SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report

Como se puede apreciar, nos marca un error por un rol llamado PLUSTRACE. Para solventar este problema, debemos correr como SYSDBA un script que viene como parte de los binarios de la base de datos de Oracle: el plustrce.sql. En las siguientes líneas, podremos ver un ejemplo de esto:

SQL> conn / as sysdba
Connected.
SQL>
SQL> star %ORACLE_HOME%\sqlplus\admin\plustrce
SQL>
SQL> drop role plustrace;
drop role plustrace
          *
ERROR at line 1:
ORA-01919: role 'PLUSTRACE' does not exist

SQL> create role plustrace;

Role created.

SQL>
SQL> grant select on v_$sesstat to plustrace;

Grant succeeded.

SQL> grant select on v_$statname to plustrace;

Grant succeeded.

SQL> grant select on v_$mystat to plustrace;

Grant succeeded.

SQL> grant plustrace to dba with admin option;

Grant succeeded.

SQL>
SQL> set echo off
SQL>
SQL> grant plustrace to prueba;

Grant succeeded.

SQL> conn prueba/prueba
Connected.
SQL> set autotrace traceonly SQL> select *
  2  from   emp
  3  where  empno = 7369;

Execution Plan
----------------------------------------------------------
Plan hash value: 2949544139

--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    87 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    87 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("EMPNO"=7369)

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
        730  bytes sent via SQL*Net to client
        374  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

Con esto, habremos solucionado el problema para ejecutar el set autotrace traceonly en nuestra base de datos. Bastará dar privilegios del role PLUSTRACE al usuario que desee ver los planes de ejecución.

Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: