Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Concurrencia en sql server

Estas en el tema de Concurrencia en sql server en el foro de SQL Server en Foros del Web. Hola a todos,mi duda es la siguiente, estoy trabajando con sql server 2005 y queria sabar si este gestor trabaja internamente con algun tipo de ...
  #1 (permalink)  
Antiguo 18/09/2007, 01:55
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 258
Antigüedad: 19 años, 10 meses
Puntos: 0
Concurrencia en sql server

Hola a todos,mi duda es la siguiente, estoy trabajando con sql server 2005 y queria sabar si este gestor trabaja internamente con algun tipo de concurrencia (optimista,pesimista,...) y si se puede configurar con el tipo de concurrencia que quieres que trabaje.O esto de la concurrencia lo hay que controlar desde el programa que se conecta a la BBDD????
__________________
Inmuebles de Galicia:www.inmueblevirtual.net
Compartir piso en Galicia:www.inmueblevirtual.net/foro
  #2 (permalink)  
Antiguo 23/09/2007, 18:52
 
Fecha de Ingreso: noviembre-2005
Mensajes: 658
Antigüedad: 18 años, 5 meses
Puntos: 3
Re: Concurrencia en sql server

Esto lo conteste en otro foro; pero aca lo explico de nuevo para que todos los que no tienen claro esto que es por lo demas muy complejo, se hagan de una idea

El control de la concurrencia se programa usando las transacciones SQL; las cuales son una o varias sentencias sql que se ejecutan como una sola LUW (unidad logica de trabajo)
El control de transacciones concurrentes en una base de datos brinda un eficiente desempeño en un Motor de Datos, puesto que permite controlar la ejecución de transacciones que operan en paralelo, accesando a información compartida y, por lo tanto, interfiriendo potencialmente unas con otras...
Junto con la programacion transaccional es recomendable a veces cambiar el bloqueo (tipo de acceso que se permite a un elemento) .... el defecto es nivel de pagina ; por lo que cambiarlo a nivel de Row ayudaria bastante (esto ultimo depende del motor que estas usando; ya que no todos permiten a nivel de fila).
Ahora voy a poner un ejemplo de una transaccion en un procedimiento almacenado para que se hagan de una idea de que significa trabajar con aplicaciones sql que manejen la concurrencia...
la clave es el BEGIN TRAN ... COMMIT o ROLLBACK END TRAN

create procedure spa_adp_eli_anotaciones (
@cd_empresa smallint,
@id_proyecto int,
@fc_anotacion datetime)
AS
BEGIN TRAN

declare @error int,
@msg varchar(255)

-- Elimina Anotacion

delete from SGC_ANOTACIONES
where cd_empresa = @cd_empresa
and id_proyecto = @id_proyecto
and fc_anotacion = @fc_anotacion

select @error=@@error

if @error != 0
begin
select @msg = "*** ERROR AL ELIMINAR ANOTACION ***"
goto fin
end


-- Commit de transaccion

commit tran
select 0 RETORNO, @msg MSG
return


-- Subrutinas
fin:
rollback tran
select -1 RETORNO, @msg MSG
return
go

Espero les ayude

En el ejemplo puse solo un delete; pero la idea es agrupar varias sentencias que pueden ser select, insert, delete, etc... y siempre controlando el exito o fracaso de ellas .. si todo exitoso entonces se hace COMMIT que indica que se grabara la información en las tablas; si falla ROLLBACK y devuelve todo ... con esto se logra el control perfecto de la integridad que es muy pero muy importante

Saludos
  #3 (permalink)  
Antiguo 27/09/2007, 09:49
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Concurrencia en sql server

El control de visibilidad es configurable. Dentro de TSQL tienes sentencias como

SET TRANSACTION ISOLATION LEVEL

Que te permiten ajustar precisamente ese valor. Tú mismo decides como quieres que se comporte el motor bajo las circunstancias de tus querys.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:05.