none
Error no TempDB RRS feed

  • Pergunta

  • Pessoal, Boa Tarde !

    Estou com um problema na indexação de uma tabela temporária. A tabela temporária é criada na execução de uma procedure e ao tentar criar um índice agrupado, recebo a seguinte mensagem de erro:

    CREATE CLUSTERED INDEX IDX_RaizChavePlataforma_#tmpSelect ON tempdb..#tmpSelect(sRaiz,iPlataforma)

    Agora se colocar como "Não-agrupado", a execução e realizada com êxito:

    CREATE NONCLUSTERED INDEX IDX_RaizChavePlataforma_#tmpSelect ON tempdb..#tmpSelect(sRaiz,iPlataforma)

    Alguém sabe me dizer porque isso está acontecendo ?

    quarta-feira, 5 de novembro de 2014 16:39

Respostas

Todas as Respostas

  • Getulio,

    Deve ter algum problema com seu banco de dados. Execute o comando CHECKDB como indicado na mensagem de erro:

    USE SeuBanco
    GO
    
    DBCC CHECKDB()
    GO

    Eu criei uma tabela temporária com este índice clusterizado e foi executado sem problemas. Veja o print-screen como evidência de teste:

    Segue o script T-SQL utilizado para este teste:

    USE DBTest
    GO
    
    SELECT ID_EXEMPLO, NM_EXEMPLO
    INTO #tmpSelect
    FROM TB_EXEMPLO
    
    CREATE CLUSTERED INDEX IDX_RaizChavePlataforma_#tmpSelect ON tempdb..#tmpSelect(ID_EXEMPLO)
    
    USE tempdb
    GO
    
    SP_HELP #tmpSelect

    Para maiores informações sobre CHECKDB veja:

    http://msdn.microsoft.com/pt-br/library/ms176064.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 5 de novembro de 2014 16:59
  • Boa Tarde Getulio,

    Concordo com o Durval, coloque aqui o resultado do DBCC CheckDB para tentarmos te ajudar com um possível problema de inconsistência.


    Att, Bruno Silva.

    quarta-feira, 5 de novembro de 2014 17:51
  • Deleted
    quarta-feira, 5 de novembro de 2014 19:59
  • José, Bom Dia !

    Cara, até executei o CheckDB, mas não retornou nenhuma informação sobre inconsistência no banco de dados TempDB:

    quinta-feira, 6 de novembro de 2014 13:08
  • Deleted
    • Marcado como Resposta Getulio Torres S sexta-feira, 7 de novembro de 2014 17:51
    quinta-feira, 6 de novembro de 2014 13:34
  • Getúlio, o banco de dados tempDB é regerado a cada vez que o serviço de database engine do SQL Server é reiniciado. Por acaso, desde a última ocorrência de erro, o serviço foi reiniciado?

    O que acho estranho no comando
       CREATE CLUSTERED INDEX IDX_RaizChavePlataforma_#tmpSelect ON tempdb..#tmpSelect(sRaiz,iPlataforma)
    é  o uso do caractere # no nome do índice (sem ser na primeira posição). Não sei se isso geraria alguma inconsistência. Haveria algum problema em alterar o comando para
          CREATE CLUSTERED INDEX IDX_RaizChavePlataforma_tmpSelect ON #tmpSelect(sRaiz,iPlataforma)
    ?

    A linha 139 do procedimento SPR_SEL_ConfirmacaoEmail_1 é o comando de criação do  índice? Poderia transcrever para este tópico as linhas 136 a 144?

    Qual é a edição e versão do SQL Server?
     


        José Diz     Belo Horizonte, MG - Brasil



    José,

    Como você pode ver em um outro post deste tópico, eu criei este índice do mesmo modo que o Getúlio especificou (com "#") e não houve problemas.

    De qualquer forma, eu concordo com você quando você afirma: 

    o banco de dados tempDB é regerado a cada vez que o serviço de database engine do SQL Server é reiniciado

    Neste caso, o erro sobre o índice deste banco ID =2 (TempDB) deve também ter sido eliminado.

    Getulio,

    Eu te indiquei para fazer o CHECKDB em relação ao banco de dados de "origem" dos dados, mas na verdade o problema parece estar no TempDB. Você se você reiniciou o serviço SQL desta instância o "problema" e o seu conteúdo devem ter sido reciclados (resolvendo o erro) e então você poderá tentar gerar este script de índice novamente.

    O comando CHECKDB não retorna dados por padrão no banco de dados TempDB, simplesmente porque ele também utiliza o TempDB para alocação das informações durante a verificação de consistência de dados e da estrutura. Veja na documentação:

    http://msdn.microsoft.com/pt-br/library/ms176064.aspx

    Verifique a necessidade de adicionar um índice para esta tabela temporária. Se for realmente necessário, analise a possibilidade de tornar esta tabela como uma "user table" do seu banco de dados de usuário apenas para esta manipulação de dados, evitando assim uma perda de referência desta tabela temporária ou para o seu índice, que acabou causando este problema. 

    Não esqueça de marcar como resposta todos os posts que ajudaram na sua solução!

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quinta-feira, 6 de novembro de 2014 18:13
  • Deleted
    sexta-feira, 7 de novembro de 2014 09:37
  • Durval/Jose, Boa Tarde !

    Em relação ao "#", retirei no momento da criação do índice e o mesmo erro ocorre. O engraçado é que, nessa mesma procedure é criado uma outra tabela temporária, e para a mesma é criado um índice agrupado que não retorna o erro do indice anterior:

    CREATE CLUSTERED INDEX IDX_RaizChavePlataforma_#tmpDividaDocumentos ON TEMPDB..#tmpDividaDocumentos(sRaiz,sChave,iIdPlataforma)

    Segui a orientação do José e reiniciei o serviço. Agora o índice não estão mais retornando o erro quando é criado como agrupado.

    Obrigado a todos pelo empenho em ajudar.

    • Sugerido como Resposta Durval Ramos segunda-feira, 10 de novembro de 2014 14:45
    sexta-feira, 7 de novembro de 2014 17:50