procedimiento multiple ejemplos ejecutar developer comandos columns almacenado 10g sql oracle

multiple - Cómo ver la declaración de Oracle SQL real que se está ejecutando



pivot oracle ejemplos (6)

- Utilizo algo como esto, con conceptos y algún código robado de asktom.
-- Sugerencias para mejorar son bienvenidas

CON
sess AS
(
SELECCIONAR *
DESDE V $ SESSION
DONDE NOMBRE DE USUARIO = USUARIO
PEDIDO POR SID
)
SELECCIONE si.SID,
si.LOCKWAIT,
si.OSUSER,
si.PROGRAMA,
si.LOGON_TIME,
si.ESTADO,
(
SELECCIONAR RONDA (USED_UBLK * 8 / 1024,1)
DE V $ TRANSACTION,
sess
DÓNDE sess.TADDR = V $ TRANSACTION.ADDR
AND sess.SID = si.SID

) rollback_remaining,

(
SELECT (MAX (DECODE (PIECE, 0, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 1, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 2, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 3, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 4, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 5, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 6, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 7, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 8, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 9, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 10, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 11, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 12, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 13, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 14, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 15, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 16, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 17, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 18, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 19, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 20, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 21, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 22, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 23, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 24, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 25, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 26, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 27, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 28, SQL_TEXT, NULL)) ||
MAX (DECODE (PIECE, 29, SQL_TEXT, NULL)))
DESDE V $ SQLTEXT_WITH_NEWLINES
WHERE ADDRESS = SI.SQL_ADDRESS Y
PIEZA <30
) SQL_TEXT
DESDE sess si;

Estoy usando una aplicación interna personalizada que genera un conjunto estándar de informes semanalmente. No tengo acceso al código fuente de la aplicación, y todos me dicen que no hay documentación disponible para el esquema de la base de datos Oracle. (¡Aargh!)

Me han pedido que defina las especificaciones para una variante de un informe existente (por ejemplo, aplicar filtros adicionales para restringir el conjunto de datos y modificar el diseño ligeramente). Esto suena bastante simple en principio, pero es difícil sin ninguna documentación existente.

Tengo entendido que los registros no pueden ayudarme porque el informe solo consulta la base de datos; en realidad, no inserta, elimina ni actualiza los valores de la base de datos, por lo que no hay nada que registrar (¿es correcto?).

Entonces mi pregunta es esta: ¿hay alguna herramienta o utilidad (Oracle u otra) que pueda usar para ver la declaración SQL real que se está ejecutando mientras el trabajo de generación de informes aún se está ejecutando? Me imagino que, si puedo ver qué tablas se están accediendo para generar el informe existente, tendré un buen punto de partida para explorar el esquema y determinar el SQL correcto que se usará para mi propio informe.


Creo que la tabla V $ SQLAREA contiene lo que estás buscando (ver columnas SQL_TEXT y SQL_FULLTEXT ).


En el lado del diccionario de datos hay muchas herramientas que puede usar como Schema Spy

Para ver qué consultas se están ejecutando, mire las vistas sys.v_ $ sql y sys.v_ $ sqltext. También necesitarás acceso a sys.all_users

Una cosa es notar que las consultas que usan parámetros aparecerán una vez con entradas como

and TABLETYPE=’:b16’

mientras que otros que no se mostrarán varias veces, como:

and TABLETYPE=’MT’

Un ejemplo de estas tablas en acción es el siguiente SQL para encontrar los 20 mejores cerdos de lectura de disco. Puede cambiar esto eliminando WHERE rownum <= 20 y quizás agregue el módulo ORDER BY . A menudo se encuentra que el módulo le dará una pista de pantano sobre qué software está ejecutando la consulta (por ejemplo: "TOAD 9.0.1.8", "JDBC Thin Client", "runcbl @ somebox (TNS V1-V3)", etc.)

SELECT module, sql_text, username, disk_reads_per_exec, buffer_gets, disk_reads, parse_calls, sorts, executions, rows_processed, hit_ratio, first_load_time, sharable_mem, persistent_mem, runtime_mem, cpu_time, elapsed_time, address, hash_value FROM (SELECT module, sql_text , u.username , round((s.disk_reads/decode(s.executions,0,1, s.executions)),2) disk_reads_per_exec, s.disk_reads , s.buffer_gets , s.parse_calls , s.sorts , s.executions , s.rows_processed , 100 - round(100 * s.disk_reads/greatest(s.buffer_gets,1),2) hit_ratio, s.first_load_time , sharable_mem , persistent_mem , runtime_mem, cpu_time, elapsed_time, address, hash_value FROM sys.v_$sql s, sys.all_users u WHERE s.parsing_user_id=u.user_id and UPPER(u.username) not in (''SYS'',''SYSTEM'') ORDER BY 4 desc) WHERE rownum <= 20;

Tenga en cuenta que si la consulta es larga ... tendrá que consultar v_ $ sqltext. Esto almacena toda la consulta. Tendrá que buscar la DIRECCIÓN y HASH_VALUE y recoger todas las piezas. P.ej:

SELECT * FROM sys.v_$sqltext WHERE address = ''C0000000372B3C28'' and hash_value = ''1272580459'' ORDER BY address, hash_value, command_type, piece ;


Perdón por la respuesta corta pero es tarde. Google "oráculo evento 10046 sql trace". Sería mejor rastrear una sesión individual porque calcular qué SQL pertenece a qué sesión de v $ sql no es fácil si se comparte sql y está siendo utilizado por múltiples usuarios.

Si desea impresionar a sus amigos de Oracle DBA, aprenda cómo establecer un seguimiento de oráculo con el evento 10046, interprete el significado de los eventos de espera y encuentre los mejores consumidores de CPU.

Quest tenía un producto gratuito que le permitía capturar el SQL tal como salía del lado del cliente, pero no estaba seguro de si funcionaba con su producto / versión de Oracle. Google "quest orracle sql monitor" para esto.

Buenas noches.


Sí, eso es definitivamente posible. Las vistas v $ sql contienen esa información. Algo así como este fragmento de código debería apuntarle en la dirección correcta. No he probado esa pieza específica de código, ni siquiera cerca de Oracle DB en este momento.

[Editar] Maldita dos otras respuestas ya. Debe escribir más rápido la próxima vez ;-)


Tuve (tuve) un problema similar en una aplicación Java. Escribí un contenedor de controladores JDBC alrededor del controlador de Oracle para que todos los resultados se envíen a un archivo de registro.