Compartilhar via


Multiuser Support in EDB

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

EDB fornece a capacidade de múltiplo segmentos pela múltiplo processos para acessar o mesmo banco de dados simultaneamente. Cada segmento que acessa o banco de dados é considerado um usuário. Porque edb oferece suporte a multiusuário acessar, ele deve suporte transações e bloqueando para evitar dados dano e colisões.

Observação

Somente edb oferece suporte a transações.CEDB não suporte transações ou bloqueando.Todas as operações com CEDB são atômicas.

As transações são usadas para GRUPO um conjunto de operações banco de dados em um único operação atômica, melhorando assim significativamente a confiabilidade de um aplicativo. Um operação atômica é aquele no quais todas as operações na GRUPO um bem-sucedida e serão confirmadas, ou falhar e são rolado voltar.

Observação

Se você bloqueio um objeto em uma transação, ele permanece bloqueado até que a transação será encerrada.Este pode bloco outros usuários acessem dados no banco de dados.

Usando transações com Edb

Em Edb, tudo o que acontece em uma transação, se você explicitamente iniciar uma transação ou uma transação é implicitamente iniciada internamente pelo edb quando uma função such as CeDeleteRecord (EDB) é chamado.

Observação

Se uma transação é explícita, ele pode conter muitas alterações; Se uma transação está implícita, ele contém apenas uma alteração.

Para usar transações, cada banco de dados envolvidos na transação devem ser participando a mesma sessão. Para fazer isso, primeiro crie um identificador sessão por chamado de função CeCreateSession (EDB) e então identificador recebida sessão transmitir quando você aberto cada banco de dados. Você também pode chamar a função CeGetDatabaseSession (EDB) para obter o identificador sessão para um banco de dados anteriormente abertos. Isso é útil ao executar uma transação entre dois bancos de dados.

Depois que você tiver um ou mais bancos de dados em uma sessão, começar uma transação por chamado a função CeBeginTransaction (EDB). Depois que você iniciar a transação, todas as alterações feitas aos bancos de dados são enfileirado até você finalizar a transação. Finalizar a transação por chamado a função CeEndTransaction (EDB). CeEndTransaction Permite que você a confirmação ou reverter todas as alterações na fila.

Ao usar transações, lembre-se a seguinte:

  • Transações não podem ser aninhadas. Em outras palavras, CeBeginTransaction não pode ser chamado se outra transação estiver sendo usada atualmente na sessão.
  • Todas as operações com base em dados, de exemplo, ler, gravar, inserir ou atualizações dados, são afetadas pelo escopo das instruções transação BEGIN/end.
  • Todas as operações que afetam a esquema de um banco de dados, such as adicionando propriedades para o banco de dados ou criar ordens classificar, não são afetados pelo escopo da transação. As mudanças de esquema são confirmadas mesmo se a transação será revertida.

Confirmar uma transação

Quando você chamar CeEndTransaction confirmação e as alterações feitas na transação, as alterações não são imediatamente salvas para disco. Como com todos os dados gravados o banco de dados, as alterações confirmadas são armazenados em cache até que ocorra um do seguinte:

  • O volume é explicitamente liberado. Para obter mais informações e, consulte CeFlushDBVol (EDB).
  • O liberado configuração intervalo para o volume for atingida.
  • O volume for desmontado.

Bloqueio Edb

EDB usa bloqueando para implementar transações. Se uma alteração é feita em uma linha durante uma transação, a linha será bloqueada até o final da transação. Qualquer página ordem classificar relevantes também está bloqueada. Embora a linha ou página está bloqueada, qualquer outra transação que tenta atualização a linha ou página falha com uma violação de compartilhamento. A transação que recebe a violação de compartilhamento pode repetir a operação ou pode falhar e exibir um erro.

Importante

Mesmo se uma transação é confirmada, Alguns bloqueios podem ainda ser mantidos no banco de dados.Para garantir que todos os bloqueios são liberados, fechar o identificador para o banco de dados.

Fora de transações, EDB não bloqueio quaisquer dados no banco de dados. Se você tiver um segmento que lê uma linha e, em seguida, atualiza, entre o tempo você ler a linha e enviar a atualização, outro segmento pode atualização de linha. A atualização, em seguida, substituirá as alterações do outro segmento, resultando em dados inesperados. Além disso, se seu aplicativo está posicionado em uma linha, outro segmento pode excluir essa linha, alterar sua posição linha. Para evitar esses problemas possíveis, use transações.

Níveis de Isolamento Edb

Embora as transações sejam úteis ao alterar dados em um banco de dados, você não precisará usá-los ao ler dados. EDB inclui um mecanismo para garantir que a versão mais recente confirmada é sempre versionamento ler por um segmento. No entanto, se você precisar garantir que uma linha que ler no início de uma transação não é modificado por outra transação, você deve proteger essa linha. Para proteger a linha, edb oferece suporte a transação de isolamento níveis. Depending on o nível de isolamento, a linha pode ser bloqueada assim dados é ler, assim, bloqueio outras transações alterem dessa linha.

Observação

Uma linha é protegida somente se você explicitamente buscar para ele ou se ocorre um buscar AutoIncrement implícito.

A seguinte tabela mostra os três níveis de isolamento com suporte por edb:

Isolamento nível Oferece suporte a um ler repetitivo Linhas de item fantasma podem ser introduzidas

SQLCEDB_ISOLEVEL_READCOMMITTED ou SQLCEDB_ISOLEVEL_DEFAULT

Não

Sim

SQLCEDB_ISOLEVEL_REPEATABLEREAD

Sim

Sim

SQLCEDB_ISOLEVEL_SERIALIZABLE

Sim

Não

Observação

Uma linha de item fantasma ocorre quando uma linha é adicionada para o banco de dados depois de ter ler as linhas.Quando você usar o nível de isolamento SQLCEDB_ISOLEVEL_SERIALIZABLE, nenhum outro segmento pode adicionar uma linha, evitando a introdução das linhas de item fantasma.

Para minimizar a sobrecarga de bloqueando, edb ocasionalmente reduz um grande número de linha-nível bloqueia a um bloqueio único no banco de dados inteiro. Isso pode afetar adversamente a simultaneidade. Para reduzir a probabilidade dessa transações construção que ocorre, que operam em pequenos conjuntos de dados e certifique-se de que eles são confirmados ou revertidos mais rápido possível.

Observação

Versão não aplicar para o CEVT_STREAM tipo de dados.

See Also

Reference

CeCreateSession (EDB)
CeGetDatabaseSession (EDB)
CeBeginTransaction (EDB)
CeEndTransaction (EDB)

Other Resources

EDB Database Support