none
Locks RRS feed

  • Pergunta

  • Pessoal, tenho a seguinte dúvida: é possível que um database (todo o DB) seja locado por uma transação?
    • Movido Gustavo Maia Aguiar terça-feira, 15 de junho de 2010 15:18 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 15 de junho de 2010 13:41

Respostas

  • Bom Dia,

    Sua frase pode ter interpretações diferentes, mas vamos lá:

    Existem algumas operações específicas que necessitam "locar" o banco como operações que usem os comandos ALTER DATABASE e DROP DATABASE.

    Um SELECT especificamente não é capaz de locar uma base de dados. O SELECT pode no máximo locar uma tabela específica. O que pode acontecer é que um determinado processo pode locar essa tabela e os outros processos que dependem dela terem de ficar esperando. Por sua vez outros processos que dependam dos processos já bloqueados continuarão esperando e aí tem-se a sensação de um bloqueio generalizado. Em termos práticos "a base toda estará bloqueada", mas essa expressão está incorreta nesse caso. O que ocorre é que um determinado processo está bloqueando todos os demais processos da base (ainda que não esteja bloqueando a base).

    Se quiser achar o "culpado" não deixe de ler o artigo abaixo:

    Monitorando bloqueios com o uso de Recursive Common Table Expressions
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!885.entry

    Caso você seja mais adepto de ferramentas gráficas, o uso do Activity Monitor é uma opção.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Simulado para o Exame 70-433 - MCTS: Microsoft SQL Server 2008 - Database Development – Parte 03
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!1077.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 15 de junho de 2010 15:18

Todas as Respostas

  • Rafael, sim. existem alguns níveis de lock

    RID (Uma linha), KEY (Linha de indice), PAGE (Página), EXTENT (Grupo de 8 páginas), HOBT (páginas que não tenham indices custerizado), TABLE (Toda a tabela), ILE (Um ficheiro), APPLICATION (Recurso específico), METADATA (Metadados), ALLOCATION_UNIT (“application unit”) e por fim DATABASE (Todo o banco).

    terça-feira, 15 de junho de 2010 14:40
  • Nakane,

    Será que vc podería me dizer uma situação onde podería ocorrer esse evento? Tipo, um select podería causar um lock desses?

    att.

    Rafael

    terça-feira, 15 de junho de 2010 14:50
  • Bom Dia,

    Sua frase pode ter interpretações diferentes, mas vamos lá:

    Existem algumas operações específicas que necessitam "locar" o banco como operações que usem os comandos ALTER DATABASE e DROP DATABASE.

    Um SELECT especificamente não é capaz de locar uma base de dados. O SELECT pode no máximo locar uma tabela específica. O que pode acontecer é que um determinado processo pode locar essa tabela e os outros processos que dependem dela terem de ficar esperando. Por sua vez outros processos que dependam dos processos já bloqueados continuarão esperando e aí tem-se a sensação de um bloqueio generalizado. Em termos práticos "a base toda estará bloqueada", mas essa expressão está incorreta nesse caso. O que ocorre é que um determinado processo está bloqueando todos os demais processos da base (ainda que não esteja bloqueando a base).

    Se quiser achar o "culpado" não deixe de ler o artigo abaixo:

    Monitorando bloqueios com o uso de Recursive Common Table Expressions
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!885.entry

    Caso você seja mais adepto de ferramentas gráficas, o uso do Activity Monitor é uma opção.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Simulado para o Exame 70-433 - MCTS: Microsoft SQL Server 2008 - Database Development – Parte 03
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!1077.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 15 de junho de 2010 15:18
  • Obrigado Gustavo.

        Jah havía estudado algumas situaçoes onde uma tabela/registro... podería ser locado, mas não sabia em qual situacao isso podería acontecer com um DB. Tirou minha dúvida...

    att.

    Rafael

    terça-feira, 15 de junho de 2010 16:54