none
acesso simultâneo RRS feed

  • Pergunta

  • Boa tarde, gostaria de saber como posso fazer o controlo de acessos simultâneos a uma BD  (SQL Server)...os acessos são efectuados através de uma aplicação desenvolvida em C# . Qual a forma mais correcta de efectuar o controlo dos acessos á BD?
    segunda-feira, 11 de fevereiro de 2008 15:14

Respostas

  • Bom Dia Tim,

     

    Se você optar por definir o nível de isolamento no C#, procure pela classe SQLTransaction ou OLEDBTransaction. Se for colocar no SQL Server (mais recomendável) procure pela instrução SET TRANSACTION ISOLATION LEVEL.

     

    Para entender um pouco mais sobre os detalhes do nível de isolamento procure conhecer também os fenômenos Dirty Read, NonRepeatable Read e Phantom Read.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 12 de fevereiro de 2008 10:51

Todas as Respostas

  • Boa Tarde,

     

    Felizmente você não terá que se preocupar com isso (pelo menos a princípio). O SQL Server, assim como qualquer outro banco de dados que se preze, já controla automaticamente os acessos simultâneos a bancos de dados. É possível (sem nenhuma configuração adicional, ou seja, de forma transparente para a aplicação), múltiplos usuários acessarem, atualizarem e consultarem o mesmo banco de dados.

     

    O acesso simultâneo já possui uma natureza conflitante. Quanto maior for a concorrência (número de usuários), menor tende a ser a consistência (qualidade da informação alterada e lida por múltiplos usuários). A forma de equilibrar a consistência x concorrência é definida através de níveis de isolamento. O nível padrão READ COMMITED já garante solução automática para praticamente todos os problemas, mas se precisar dê uma olhada em Transaction Isolation Level. Pode ser controlado tanto no SQL Server quanto diretamente no C#.

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 11 de fevereiro de 2008 15:52
  •  Gustavo Maia Aguiar wrote:

    Boa Tarde,

     

    Felizmente você não terá que se preocupar com isso (pelo menos a princípio). O SQL Server, assim como qualquer outro banco de dados que se preze, já controla automaticamente os acessos simultâneos a bancos de dados. É possível (sem nenhuma configuração adicional, ou seja, de forma transparente para a aplicação), múltiplos usuários acessarem, atualizarem e consultarem o mesmo banco de dados.

     

    O acesso simultâneo já possui uma natureza conflitante. Quanto maior for a concorrência (número de usuários), menor tende a ser a consistência (qualidade da informação alterada e lida por múltiplos usuários). A forma de equilibrar a consistência x concorrência é definida através de níveis de isolamento. O nível padrão READ COMMITED já garante solução automática para praticamente todos os problemas, mas se precisar dê uma olhada em Transaction Isolation Level. Pode ser controlado tanto no SQL Server quanto diretamente no C#.

     

    [ ]s,

     

    Gustavo

     



    Olá!
    Sim eu essa parte já sabia...penso que o meu problema está no facto de quando construo a string de conecção podem passar a existir user`s com o mesmo id...desta forma posso ter o "mesmo user" a efectuar operações diferentes. O SQL não faz o control de acessos se tiver dois utilizadores com o mesmo id?
    segunda-feira, 11 de fevereiro de 2008 17:09
  • Olá Tim,

     

    Mesmo que duas conexões usem o mesmo usuário (situação bastante comum), o banco as tratará como duas sessões totalmente diferentes. O isolamento entre elas ficará a cargo do nível de isolamento que você definir em suas transações. Quanto mais isoladas, menos uma interfere na outra, mas pior fica o acesso simultâneo. Quanto menos isoladas, melhor é o acesso simultâneo, mas a integridade fica ameaçada.

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 11 de fevereiro de 2008 22:52
  •  Gustavo Maia Aguiar wrote:

    Olá Tim,

     

    Mesmo que duas conexões usem o mesmo usuário (situação bastante comum), o banco as tratará como duas sessões totalmente diferentes. O isolamento entre elas ficará a cargo do nível de isolamento que você definir em suas transações. Quanto mais isoladas, menos uma interfere na outra, mas pior fica o acesso simultâneo. Quanto menos isoladas, melhor é o acesso simultâneo, mas a integridade fica ameaçada.

     

    [ ]s,

     

    Gustavo

     



    Olá Gustavo,
    Estive a pesquisar como definir o nivel de isolamento nas minhas trasações contudo não encontrei informação conclusiva...por acaso não sabes por onde posso encontrar informação que me seja util?
    terça-feira, 12 de fevereiro de 2008 10:20
  • Bom Dia Tim,

     

    Se você optar por definir o nível de isolamento no C#, procure pela classe SQLTransaction ou OLEDBTransaction. Se for colocar no SQL Server (mais recomendável) procure pela instrução SET TRANSACTION ISOLATION LEVEL.

     

    Para entender um pouco mais sobre os detalhes do nível de isolamento procure conhecer também os fenômenos Dirty Read, NonRepeatable Read e Phantom Read.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 12 de fevereiro de 2008 10:51