STL_UTILITYTEXT
Captura el texto de los comandos ejecutados en la base de datos que no son SELECT SQL.
Consulte la vista STL_UTILITYTEXT para capturar el siguiente subconjunto de instrucciones SQL que se ejecutaron en el sistema:
-
ABORT, BEGIN, COMMIT, END, ROLLBACK
-
ANALYZE
-
CALL
-
CANCEL
-
COMMENT
-
CREATE, ALTER, DROP DATABASE
-
CREATE, ALTER, DROP USER
-
EXPLAIN
-
GRANT, REVOKE
-
LOCK
-
RESET
-
SET
-
SHOW
-
TRUNCATE
Consulte también STL_DDLTEXT, STL_QUERYTEXT y SVL_STATEMENTTEXT.
Utilice las columnas STARTTIME y ENDTIME para averiguar qué instrucciones se registraron durante un periodo determinado. Los bloques grandes de texto de SQL se dividen en líneas de 200 caracteres. La columna SEQUENCE identifica los segmentos de texto que pertenecen a una única instrucción.
STL_UTILITYTEXT es visible para todos los usuarios. Los superusuarios pueden ver todas las filas; los usuarios normales solo pueden ver sus datos. Para obtener más información, consulte Visibilidad de datos en las tablas y vistas de sistema.
Algunos o todos los datos de esta tabla también están en la vista de monitoreo SYS SYS_QUERY_HISTORY. Los datos de la vista de monitoreo SYS están formateados para que sean más fáciles de usar y entender. Se recomienda utilizar la vista de monitoreo SYS para las consultas.
Columnas de la tabla
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
userid | integer | ID del usuario que generó la entrada. |
xid | bigint | ID de transacción. |
pid | integer | ID de proceso asociado a la instrucción de la consulta. |
etiqueta | character(320) | Ya sea el nombre del archivo utilizado para ejecutar la consulta o una etiqueta definida con un comando SET QUERY_GROUP. Si la consulta no se basa en archivos o si no se establece el parámetro QUERY_GROUP, el valor del campo queda en blanco. |
starttime | Marca de tiempo | Hora en UTC en que comenzó la consulta. El tiempo total incluye colas y ejecución. Con 6 dígitos de precisión para fracciones de segundo. Por ejemplo: 2009-06-12 11:29:19.131358 . |
endtime | Marca de tiempo | Hora en UTC en la que finalizó la consulta. El tiempo total incluye colas y ejecución. Con 6 dígitos de precisión para fracciones de segundo. Por ejemplo: 2009-06-12 11:29:19.131358 . |
sequence | integer | Cuando una única instrucción tiene más de 200 caracteres, se registran filas adicionales para esa instrucción. Secuencia 0 es la primera fila, 1 es la segunda y, así, sucesivamente. |
texto | character(200) | Texto SQL, en incrementos de 200 caracteres. El campo puede contener caracteres especiales como una barra inversa(\\ ) y una nueva línea (\n ). |
Consultas de ejemplo
La siguiente consulta devuelve el texto de los comandos "utility" que se ejecutaron el 26 de enero de 2012. En este caso, se ejecutaron algunos comandos SET y un comando SHOW ALL:
select starttime, sequence, rtrim(text)
from stl_utilitytext
where starttime like '2012-01-26%'
order by starttime, sequence;
starttime | sequence | rtrim
---------------------------+-----+----------------------------------
2012-01-26 13:05:52.529235 | 0 | show all;
2012-01-26 13:20:31.660255 | 0 | SET query_group to ''
2012-01-26 13:20:54.956131 | 0 | SET query_group to 'soldunsold.sql'
...
Reconstruir SQL almacenados
Para reconstruir el SQL almacenado en la columna text
de STL_UTILITYTEXT, ejecute una instrucción SELECT para crear SQL de 1 o más partes en la columna text
. Antes de ejecutar el SQL reconstruido, reemplace cualquier caracter especial (\n
) con una nueva línea. El resultado de la siguiente instrucción SELECT es filas de SQL reconstruido en el campo query_statement
.
SELECT LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END) WITHIN GROUP (ORDER BY sequence) as query_statement
FROM stl_utilitytext GROUP BY xid order by xid;
Por ejemplo, la siguiente búsqueda establece el query_group a una cadena de ceros. La búsqueda en si misma es más larga de 200 caracteres y se guarda en varias partes en STL_UTILITYTEXT.
set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000';
En este ejemplo, la búsqueda se guarda en 2 partes (filas) en la columna text
de STL_UTILITYTEXT.
select query, sequence, text
from stl_utilitytext where query=pg_last_query_id() order by query desc, sequence limit 10;
starttime | sequence | text
----------------------------+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2019-07-23 22:55:34.926198 | 0 | set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000
2019-07-23 22:55:34.926198 | 1 | 000000';
Para reconstruir el SQL almacenado en STL_UTILITYTEXT, ejecute el siguiente SQL.
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS query_statement
from stl_utilitytext where query=pg_last_query_id();
Para usar el SQL reconstruido resultante en su cliente, reemplace cualquier (\n
) caracter especial con una nueva línea.
query_statement
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000';