Primero que nada he tenido problemas de cómo llamar este artículo, ya que trata de la Ejecución del Asistente de Optimización SQL Tuning Advisor, aunque he visto que cada vez que se desea acceder a las recomendaciones de SQL Tuning Advisor, nos da varios errores en las cuales destacan: ora-13605, ora-13717, ora-06512.
Aunque quizás lo conveniente de llamar este artículo debería ser: como resolver los errores para usar SQL Tuning Advisor o llamarlo con los errores ora-13605, ora-13717, ora-06512.
Por tal razón tal, espero que este tutorial logre solventar estos problemas al usar SQL Tuning Advisor y que sea de gran utilidad.
Resumen del contenido:
Conectarse siempre con el usuario SYSTEM para:
- Si se desea ejecutar SQL Tuning Advisor al usuario: SYSTEM realizar
alter system set CONTROL_MANAGEMENT_PACK_ACCESS='DIAGNOSTIC+TUNING';
Si se desea otorgarle privilegios a otro usuario por ejemplo: PRUEBA
alter system set CONTROL_MANAGEMENT_PACK_ACCESS='DIAGNOSTIC+TUNING';
grant advisor, administer sql tuning set, select any dictionary to prueba;
Conectarse luego con el usuario: PRUEBA y utilizar SQL Tuning Advisor.
Tutorial pasó a paso y explicación:
Primero que nada debemos de conectarnos en la base de datos con el usuario: SYSTEM (actualmente estoy usando SQLDEVELOPER y rDBMS: Oracle XE).
connect system
Si deseamos aplicamos SQL Tuning Advisor de una vez para el usuario: SYSTEM. Pero además es posible proporcionar privilegios y extracción de las estadísticas existentes para algún usuario en concreto, para ello me conectare con otro usuario llamado: PRUEBA.
connect user
Ahora utilizare las relaciones (tablas) que existen en el esquema HR del ejemplo de Oracle, he hecho una consulta y que será ejecutada con el usuario: PRUEBA (esta consulta hay que realizarle tuning).
select *
from dept d, emp e
order by e.deptno;
grant advisor to prueba;
Antes de ejecutar la consulta anterior es necesario dar privilegios SQL tuning advisor.
grant advisor to prueba;
grant advisor to user
También debemos de darle privilegios de administrador de SQL tuning.
grant administer sql tuning set to PRUEBA;
grant administer sql tuning set to user
Asimismo otorgamos algunos privilegios acceso al diccionario:
grant select any dictionary to PRUEBA
grant select any dictionary to user
Estos tres privilegios que le dimos al usuario: PRUEBA nos permitirá el uso de SQL Tuning Advisor. Nos conectamos con nuevamente con el usuario: PRUEBA, clic de nuevo en el Asesor de Ajustes SQL.
Ejecutemos la Consulta:
select *
from dept d, emp e
order by e.deptno;
producto cartesiano select from
Si todo funciona ¡en hora buena!, aunque si les muestra los siguientes errores ora-13605 y ora-6512 es porque existen problemas.
ORA-13605 ORA-06512
Los errores que lanzo al momento de usar SQL Tuning Advisor son:
ORA-13605: The specified task or object string does not exist for the current user.
Este error corresponde que la tarea que se está ejecutando, o cadena de objeto no existe para el usuario actual.
ORA-06512: at string, line string
La pila se desborda por excepciones no controladas, para ello es necesario utilizar un manejador de excepciones, contactarse con el DBA.
Explicación:
Estos dos errores, por ejemplo ora-13605 significan en este caso, se estaba creando un objeto y por alguna razón no fue posible la creación del objeto, mientras ora-06512 que cuando se ejecuto la tarea anterior se desbordo porque no existe un controlador de excepciones (en la imagen anterior muestra un listado ejemplo: at sys.DBMS_SYS_ERROR).
Si realizamos clic en aceptar, seguidamente quizás, nos saldrá otra ventana de dialogo.
ORA-13717 ORA-06512
Los errores que lanzo fueron:
Nuevamente ORA-06512: at string, line string
La pila se desborda por excepciones no controladas, para ello es necesario utilizar un manejador de excepciones, contactarse con el DBA.
Y ahora ORA-13717: Tuning Package License is needed for using this feature. Se necesita Tuning Package License para utilizar la característica.
Explicación:
ORA-06512, de nuevo se desbordo la pila porque no puedo realizar actividades de creación de objeto y ahora con la salvedad ORA-13717 la cual indica que no tenemos una licencia para realizar el tuning o no estamos autorizados para realizarlo puede ser que el DBA lo haya desactivado como media de seguridad.
Un poco de análisis:
Si bien es cierto alguien diría que tal vez aun nos faltan otorgamos más privilegios al usuario: PRUEBA. Sin embargo como ejercicio, si ejecutamos la misma consulta pero ahora para el usuario: SYSTEM.
select *
from dept d, emp e
order by e.deptno;
También nos mostrara los errores anteriores, la solución es que debemos de modificar el acceso al paquete de diagnóstico y ajustes (CONTROL_MANAGEMENT_PACK_ACCESS) y así autorizar el uso SQL Tuning Advisor para ello debemos de cambiar parámetros del sistema de gestor de base de datos para soluciona todos los errores que provocados.
Para revisar que parámetros tenemos configurada actualmente en CONTROL_MANAGEMENT_PACK_ACCESS.
Ejecutamos esta consulta con el usuario: SYSTEM.
SELECT name, value
FROM gv$parameter
WHERE name LIKE 'control_management_pack_access';
select from parameter
Vemos en que la consulta nos devuelve las tuplas (registros) en la columna VALUE como: ‘NONE’
En el CONTROL_MANAGEMENT_PACK_ACCESS puede establecer este parámetro en uno de los siguientes valores:
DIAGNOSTIC+TUNING: Paquete de diagnóstico y paquete de ajuste funcionalmente está habilitada en el servidor de base de datos.
DIAGNOSTIC: Sólo funcionalidad este Paquete de diagnóstico si está habilitado en el servidor.
NONE: Paquete diagnóstico y ajuste funcionalmente está desconectado en el servidor de base de datos.
Para cambiar estos parámetros basta con ejecutar esta sentencia en el usuario: SYSTEM.
alter system set CONTROL_MANAGEMENT_PACK_ACCESS='DIAGNOSTIC+TUNING';
alter system set CONTROL_MANAGEMENT_PACK_ACCESS=DIAGNOSTIC+TUNING
La consulta ejecutada anteriormente implica que usaremos el diagnóstico y el tuning de este paquete. Y si volvemos a revisar los parámetros CONTROL_MANAGEMENT_PACK_ACCESS en la columna VALUE ya cambiado por ‘DIAGNOSTIC+TUNING’
SELECT name, value
FROM gv$parameter
WHERE name LIKE 'control_management_pack_access';
DIAGNOSTIC+TUNING select from parameter
Nos conectamos con el usuario: PRUEBA y ahora ejecutamos la consulta.
connect user
select *
from dept d, emp e
order by e.deptno;
realizando un SQL tuning advisor
Y en hora buena, ya nos presenta el resultado de usar SQL Tuning Advisor, en este caso en particular la consulta genera un producto cartesiano.
Como podemos ver en la imagen existen Tipos de Implementación:
Estadísticas, Perfil SQL, Índices, Reestructura SQL.
Espero que les sirva.