Compartilhar via


Função JetGetLock

Aplica-se a: Windows | Windows Server

Função JetGetLock

A função JetGetLock fornece um meio de reservar explicitamente a capacidade de atualizar uma linha, um bloqueio de gravação ou impedir explicitamente que uma linha seja atualizada por qualquer outra sessão, o bloqueio de leitura. Normalmente, os bloqueios de gravação de linha são adquiridos implicitamente como resultado da atualização de linhas. Bloqueios de leitura geralmente não são necessários devido ao controle de versão do registro. No entanto, em alguns casos, uma transação pode desejar bloquear explicitamente uma linha para impor a serialização ou garantir que uma operação subsequente seja bem-sucedida em virtude de que os bloqueios necessários já foram feitos.

JET_ERR JET_API JetGetLock(
  __in          JET_SESID sesid,
  __in          JET_TABLEID tableid,
  __in          JET_GRBIT grbit
);

Parâmetros

sesid

A sessão que será usada para essa chamada.

Tableid

O cursor que será usado para essa chamada.

grbit

Um grupo de bits que contém as opções a serem usadas para essa chamada, que incluem zero ou mais dos seguintes:

Valor

Significado

JET_bitReadLock

Esse sinalizador faz com que um bloqueio de leitura seja adquirido no registro atual. Bloqueios de leitura são incompatíveis com bloqueios de gravação já mantidos por outras sessões, mas são compatíveis com bloqueios de leitura mantidos por outras sessões.

JET_bitWriteLock

Esse sinalizador faz com que um bloqueio de gravação seja adquirido no registro atual. Os bloqueios de gravação não são compatíveis com bloqueios de gravação ou leitura mantidos por outras sessões, mas são compatíveis com bloqueios de leitura mantidos pela mesma sessão.

Valor Retornado

Essa função retorna o tipo de dados JET_ERR com um dos seguintes códigos de retorno. Para obter mais informações sobre os possíveis erros de ESE, consulte Erros extensíveis do mecanismo de armazenamento e parâmetros de tratamento de erros.

Código de retorno

Descrição

JET_errSuccess

A operação foi concluída com sucesso.

JET_errClientRequestToStopJetService

Não é possível concluir a operação porque todas as atividades na instância associada à sessão cessaram como resultado de uma chamada para JetStopService.

JET_errInstanceUnavailable

Não é possível concluir a operação porque a instância associada à sessão encontrou um erro fatal que exige que o acesso a todos os dados seja revogado para proteger a integridade desses dados. Esse erro só será retornado pelo Windows XP e versões posteriores.

JET_errInvalidgrbit

O grbit determinado não é JET_bitReadLock nem JET_bitWriteLock. Deve ser um desses dois sinalizadores.

JET_errNoCurrentRecord

O cursor deve estar em um registro para adquirir um bloqueio. Os bloqueios estão sempre em registros.

JET_errNotInitialized

Não é possível concluir a operação porque a instância associada à sessão ainda não foi inicializada.

JET_errNotInTransaction

Os bloqueios só podem ser adquiridos por sessões em uma transação.

JET_errPermissionDenied

O cursor não pode ser somente leitura e adquirir um bloqueio de gravação.

JET_errRestoreInProgress

Não é possível concluir a operação porque uma operação de restauração está em andamento na instância associada à sessão.

JET_errSessionSharingViolation

A mesma sessão não pode ser usada para mais de um thread ao mesmo tempo. Esse erro só será retornado pelo Windows XP e versões posteriores.

JET_errTermInProgress

Não é possível concluir a operação porque a instância associada à sessão está sendo desligada.

JET_errTransReadOnly

A sessão deve ter permissões de gravação para adquirir o bloqueio de gravação.

JET_errWriteConflict

O erro retornado quando um bloqueio conflitante é solicitado.

Em caso de êxito, a sessão adquiriu o bloqueio solicitado.

Em caso de falha, a sessão não adquiriu o bloqueio solicitado.

Comentários

Bloqueios de gravação não podem ser adquiridos com sessões ou cursores que tenham permissões somente leitura, mesmo que a sessão e o cursor não executem uma operação de atualização. A sessão e o cursor devem ter privilégios de gravação para adquirir um bloqueio de gravação.

Bloqueios de leitura e gravação são um meio de bloqueio pessimista. O bloqueio pessimista espera que várias sessões simultâneas entrem em conflito e adquiram bloqueios com antecedência para garantir que suas operações sejam bem-sucedidas.

A maioria das operações será serializável em virtude de bloqueios implicitamente tomados. No entanto, algumas operações não. Para ilustrar isso, considere as duas transações,

T1: R(A), U(B)

T2: R(B), U(A)

O controle de versão no nível do registro garantirá que cada transação quando executada simultaneamente verá os valores originais de A e B. Não há nenhuma ordem serial de execução que possa produzir os mesmos resultados para A e B no caso de os resultados dependerem da leitura dos dados. Para que o aplicativo torne essa transação serializável, ele deve adquirir um bloqueio de leitura explícito em A e B em cada transação quando o valor é lido.

Requisitos

Requisito Valor

Cliente

Requer Windows Vista, Windows XP ou Windows 2000 Professional.

Servidor

Requer o Windows Server 2008, o Windows Server 2003 ou o Windows 2000 Server.

Cabeçalho

Declarado em Esent.h.

Biblioteca

Use ESENT.lib.

DLL

Requer ESENT.dll.

Consulte Também

JET_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate