Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo encontrar el archivo SQL de la base de datos

Cómo encontrar el archivo SQL de la base de datos

Extraer la instrucción SQL del archivo de seguimiento implica dos pasos:

Primero, busque la instrucción SQL en sí y luego busque los valores de las variables de vinculación que pueden ser utilizadas por la declaración sql.

Este artículo asume que ha encontrado el archivo de seguimiento que informó el error.

Paso 1: busque la instrucción SQL

Vaya a la línea "Current actual:" (al principio de la sección "*** Cursor Dump ***"). Anote el número asociado con el cursor actual (consulte el ejemplo a continuación para obtener más detalles).

Si el número del cursor actual es 0, significa que actualmente no hay ninguna declaración SQL. En este caso, es mejor consultar la sección Seguimiento de la pila de llamadas que se encuentra anteriormente en el archivo de seguimiento, que nos indica qué estábamos haciendo cuando ocurrió el error. En circunstancias normales, el soporte técnico de Oracle comprobará el archivo de seguimiento al solucionar el problema.

Si el cursor actual es un valor distinto de cero, busque la línea que comienza con "Cursor n" en la parte posterior del archivo de seguimiento. n representa el número de cursor que está buscando. y versiones posteriores, busque líneas que comiencen con "Cursor#n". Después de encontrarlo, en la siguiente línea verá "nombre del cursor:", seguido de la declaración SQL.

Nota:

Normalmente, puede localizar rápidamente el SQL buscando "Declaración SQL actual para esta sesión:", que suele estar en la parte frontal del archivo de seguimiento.

Si la instrucción SQL no utiliza variables de enlace (por ejemplo, ":b1", ":b2", etc.), puede omitir el segundo paso.

Paso 2: Encuentre el valor de la variable de vinculación

Si la instrucción SQL usa variables de vinculación, puede ubicar la parte de texto específica según la instrucción SQL en el cursor, y valor asociado con cada variable de vinculación. Cada parte del texto comienza con "vincular x:", donde x varía de 0 a n-1, donde n representa el número de variables de vinculación.

Puede haber una gran cantidad de volcado de memoria entre la instrucción SQL y la variable de vinculación, y esta información se puede ignorar.

Cada variable de vinculación tendrá muchas listas de atributos, la siguiente es una lista parcial que nos interesa:

a.) dty se refiere al tipo de datos, valores comunes​ ​son:

1 VARCHAR2 o NVARCHAR2

2 NÚMERO

8 LARGO

11 ROWID

12 FECHA

23 RAW

24 LARGO RAW

96 CHAR

112 CLOB o NCLOB

113 BLOB

114 BFILE

b.) mxl se refiere a la longitud máxima, es decir, el número máximo de bytes ocupados por la variable, dty=2 y mxl=22 significa NÚMERO(22) columnas

c.) scl se refiere al número de dígitos (para NÚMERO columnas)

d.) pre se refiere al número de decimales (para NÚMERO columnas)

e.) el valor se refiere al valor de la variable de vinculación

Corresponde directamente el valor de la variable de vinculación en el volcado del cursor al valor de la variable de vinculación en la instrucción SQL:

:b1 ~ enlazar 0

:b2 ~ enlazar 1

:b3 ~ enlazar 2

Y así sucesivamente...

Las variables de enlace se pueden llamar: 1, :2, etc., o: a1, :a2, etc. Lo más importante es que el orden de disposición en la declaración SQL debe ser exactamente el mismo que el orden en la parte de volcado de las variables.

Ahora deberías poder encontrar la variable de enlace (incluyendo longitud, longitud del valor, precisión) y el valor correspondiente.

Ejemplo:

Aquí damos un ejemplo de cómo extraer sentencias SQL en el archivo de seguimiento.

Nota especial:

Si utiliza valores literales en lugar de variables de enlace, el optimizador elegirá diferentes rutas de consulta, por lo que es posible que el problema no vuelva a aparecer.

Ejemplo 1:

********************* Volcado del cursor *********** *************

Cursor actual: 2, pgadep: 1

Volcado del cursor:

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

Encontramos el cursor 2:

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

Cursor 2 ( 20139ad0): CURFETCH curiob: 2013bca4

curflg: 7 curpar: 20139ab0

curusr: 0 curses 587a250c

nombre del cursor: selecciona texto de la vista $ donde rowid= :1

PIN infantil: 50a5b650, bloqueo infantil: 50a5a628,

bloqueo parental: 50a5a844

xscflg: 20141466, identificador principal: 4f348490, xscfl2: 400

nxt: 2.0x0000006c nxt: 1.0x000001d8

Cursor

volcado de asignación de fotogramas:

frm: ---- ---- Comentario -------- Tamaño Seg Off

bhp size: 52/560

bind 0: dty=11 mxl=16(16) mal= 00

scl=00 pre=00 oacflg=18 oacfl2=1 tamaño=16

offset=0

bfp=2013e9f4 bln=16 avl=16 flg =05

value=0000138C.0046.0004

Declaración SQL actual:

seleccione texto de la vista$ donde rowid=:1

Enlazar La variable fija es convertido en:

:1 ~ bind 0 - ROWID (dty=11), valor = 0000138C.0046.0004

Entonces obtenemos la siguiente declaración SQL original:

seleccione texto de la vista$ donde filaid=0000138C.0046.0004

Ejemplo 2:

********************* *** * Volcado del cursor **********************

Cursor actual: 11, pgadep: 1

Volcado de cursor:

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

Buscar cursor 11:

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

Cursor 11 (202cb9f0): CURBOUND curiob: 202f8b04

curflg: dd curpar:

0 curusr: 0 curses 30

047c7c

nombre del cursor: SELECCIONE LOCKID FROM DBMS_LOCK_ALLOCATED WHERE NAME =

:b1 PARA ACTUALIZAR

PIN secundario:

0, bloqueo infantil : 300dc9b4, bloqueo principal: 301730b8

xscflg: 1151421, identificador principal: 3025b4dc

bind 0: dty=1 mxl=32(00) mal=00 scl=00 pre=00 oacflg=01

No hay búferes de enlace asignados

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

Sentencia SQL actual:

SELECT LOCKID FROM DBMS_LOCK_ALLOCATED WHERE NAME = :b1 FOR UPDATE

La variable de enlace :b1 es del tipo VARCHAR2(32) (dty=1, mxl=32), pero a la variable no se le asignó un valor en el momento del volcado ("No se asignaron búferes de enlace

Ejemplo"). 3:

************************ Volcado del cursor *************** *********

Cursor actual: 2, pgadep: 0

Volcado del cursor:

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

...

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

Cursor 2 (20140444) : CURNULL curiob: 0

curflg: 44 curpar: 0 curusr: 0 curses 701dc94c

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

En este caso, no se ejecuta ningún SQL al realizar el volcado

Ejemplo 4:

*********************** Volcado del cursor *********************** *

Cursor actual: 1, pgadep: 0

pgactx: ccf361c0

ctxcbk: 0 ctxqbc: 0 ctxrws: 0

Cursor Volcado:

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

Cursor 1 (400d9478): CURBOUND curiob:

400e43d8

curflg: 4c curpar: 0 curusr: 0 curses d5348f80

nombre del cursor: BEGIN myparser .convert ('/tmp','workflow000_2.log',2);

END;

pin infantil: d14a4d70, bloqueo infantil: d1589968, bloqueo parental: d14c64a0

xscflg: 100064, identificador principal: d083f1c0, xscfl2: 4040408

nxt: 1.0x000000a8

Volcado de asignación de marco de cursor:

frm: --- ----- Comentario -------- Tamaño Seg Desactivado

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

Las variables de enlace no se utilizan, por lo que la instrucción SQL es un bloque PL/SQL:

BEGIN myparser.convert( '/tmp','workflow000_2.log',2); Fuente de esta información: CAD Education Network www.cadedu.com