Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-02-2006
RaulChemical RaulChemical is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 59
Poder: 21
RaulChemical Va por buen camino
AllowPageLocks

Hola!!!!


Tengo un problemilla sobre bloqueos de pagina en SQLServer.

Al dar de alta datos desde la ventana principal de la aplicacion, insertamos registros en 10 tablas y en 7 de ellas, se lanza un trigger que inserta datos en otras 7 tablas paralelas a estas.

El problema que tengo es que cuando ejecuto las inserts, se me produce un bloqueo de pagina en cada una de las tablas, tanto en las 10 que yo trato desde la aplicacion, como en las otras 7 que saltan desde los triggers.

Me he estado documentando, y he encontrado una instruccion para que no bloquee estas tablas:

"EXEC sp_indexoption 'TABLA.PK_TABLA', AllowPageLocks, False".

He ejecutado la instruccion para cada una de las 17 tablas y he conseguido evitar el bloqueo de 10 de ellas (por suerte son las tablas que se auto insertan con los triggers y otras 3 mas), pero sigo teniendo otras 7 tablas que siguen estando bloqueadas a pesar de haber metido mi famosa instruccion.

¿Sabeis alguna forma de evitar esos bloqueos o si existe alguna otra forma de evitar bloqueos de pagina sin ejecutar el "EXEC sp_indexoption"?

El problema está llegando a ser cada vez mas agobiante dado que cada vez tenemos mas registros en las tablas y tengo al cliente un poco mosqueado.

Muchas gracias a todos.


Raul.
__________________
ash nazg durbatulûk
ash nazg gimbatul
ash nazg thrakatulûk
agh burzum-ishi krimpatul
Responder Con Cita
  #2  
Antiguo 07-02-2006
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
Imagino que no te estas conectando a MsSql con ADO.

Si lo estas haciendo, al menos yo, no tengo idea como ayudarte con la información que estas dando.

Pero si te dire, que antes de usar ADO, hace tiempo ya, tenia algun problema de bloqueos que nunca pude corregir... Por eso cambie a ADO y nunca más tuve problemas de bloqueos.

Saludos !
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #3  
Antiguo 07-02-2006
RaulChemical RaulChemical is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 59
Poder: 21
RaulChemical Va por buen camino
Gracias, pero...

Usamos ADO para conectarme a SQLServer2000.

Cuando insertamos en las tablas, usamos un .append, rellenamos campos y luego hacemos un .post.
__________________
ash nazg durbatulûk
ash nazg gimbatul
ash nazg thrakatulûk
agh burzum-ishi krimpatul
Responder Con Cita
  #4  
Antiguo 07-02-2006
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
Claro lo que pasa es que trabajamos de formas distintas...

Al iniciar la aplicación declaro un AdoCommand y a lo largo de toda la aplicación lo utilizo para insertar datos... algo como:

Código:
var 
  index: integer;
  i: string;
begin
   i := 'Insert into tabla xxxxxxxxxx values (xxxxxxx)';
   ADOComm.CommandText := i;
   ADOComm.Execute(index);
end
Me da la impresión que al declarar un objeto table y abrir la tabla para luego hacer un .append, ahí el ADO te esta generando un bloqueo, dado que estas insertando y que al existir un trigger en el SQL que necesita esos datos, se produce un error... Pero te repito, nunca he trabajado así, por lo cual solo estoy imaginando lo que puede pasar.

Espero que alguien más te pueda ayudar con el problema...
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #5  
Antiguo 07-02-2006
RaulChemical RaulChemical is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 59
Poder: 21
RaulChemical Va por buen camino
AllowPageLocks

Desde el visor de trazas de SQLServer he visto lo que hace por dentro el componente ADO que uso, justo en el momento de hacer el .Post se crea una "Insert into NoSeDonde Values (...)" que se ejecuta en la base de datos. El servidor, al recibir la insert, lanza el Trigger (after insert) y me genera los bloqueos de pagina.

Mi problema no es de la aplicacion cliente, si no de servidor, de ahi lo de "EXEC sp_indexoption 'TABLA.PK_TABLA', AllowPageLocks, False".

De todas formas, Xianto, muchas gracias por tu interes. En futuras versiones de la aplicacion propondré hacer las inserts con SQL, no con append y post.

Muchas Gracias de nuevo.
__________________
ash nazg durbatulûk
ash nazg gimbatul
ash nazg thrakatulûk
agh burzum-ishi krimpatul
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:49:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi