Cuando nos muestra el siguiente mensaje y no sabemos cual es problema !
-425 - Database is currently opened by another user.
-107 - ISAM error: record is locked.
La Causa
No podía usar dbexport, porque hay al menos una sesión todavía conectada y manteniendo un bloqueo en un objeto.
Solución:
Buscar la sesión que esta ocasionando el bloqueo y matar la sesión.
Utilizamos la bases de administración :
database sysmaster
SET ISOLATION TO DIRTY READ;
SELECT "database lock" table_name,
l.type lock_type, l.keynum index_num, HEX(l.rowidlk) rowid,
s.sid session_id, s.username, s.pid, s.hostname,
q.sqs_statement statement
FROM syslocks l, sysdatabases d, syssessions s, syssqlstat q
WHERE d.name='database_name' AND l.rowidlk = d.rowid
AND l.owner = s.sid
AND dbsname = 'sysmaster' AND tabname = 'sysdatabases'
AND s.sid = q.sqs_sessionid
UNION ALL
SELECT l.tabname,
l.type, l.keynum, HEX(l.rowidlk),
s.sid, s.username, s.pid, s.hostname,
q.sqs_statement
FROM syslocks l, syssessions s, syssqlstat q
WHERE l.dbsname='database_name' AND l.owner = s.sid
AND s.sid = q.sqs_sessionid AND dbsname != 'sysmaster'
AND tabname != 'sysdatabases'
ORDER BY 5;
reemplazamos el database_name por el nombre de la base donde queremos ver la sesion que esta bloqueando.
nos muestra la siguiente información :
table_name database lock
lock_type X
index_num 0
rowid 0x00000205
session_id 5
username vgomes
pid 1832
hostname workstation1
statement DATABASE stores7 EXCLUSIVE
table_name
Es el nombre de la tabla que tiene un objeto bloqueado (fila, índice, tabla en sí) o será la frase 'bloqueo de base de datos' si toda la base de datos estaba bloqueada.
lock_type
Es el tipo de bloqueo, por ejemplo: X para Exclusivo, S para Compartido, U para Actualización. Consulte la información onstat -k en la Guía del administrador de IBM® Informix® Dynamic Server ™ (IDS) o para obtener más información sobre los tipos de bloqueo
index_num
EL número de clave de indice si se trata de un cloqueo.
rowid
El rowid (en hexadecimal) para el registro bloqueado en caso de que sea un registro fue bloqueado. Si una base de datos estaba completamente bloqueada, este es el rowid (en hexadecimal) para el registro correspondiente a esta base de datos bloqueada en la tabla sysmaster: sysdatabases.
session_id
El id de sesión para la sesión de base de datos que bloqueó el objeto.
username
Es el identificador de usuario asociado a la sesión que bloqueó el objeto.
pid
El identificador de proceso asociado a la sesión que bloqueó el objeto.
hostname
El nombre del equipo para la estación de trabajo o el host cliente que creó la sesión que bloqueó el objeto.
statement
La instrucción SQL que generó el bloqueo en el objeto.
Puedes ver con el detalle de la session con el siguiente comando:
onstat -g ses session_id
ejemplo:
onstat -g ses 5
Para desconectar la sesión lo puedes hacer con el siguiente comando:
onmode -z session_id
session_id
ejemplo:
onmode -z 5
Comentarios
Publicar un comentario