Usuário com melhor resposta
Error no TempDB

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 ?
Respostas
-
Deleted
- Marcado como Resposta Getulio Torres S sexta-feira, 7 de novembro de 2014 17:51
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" -
-
-
-
Deleted
- Marcado como Resposta Getulio Torres S sexta-feira, 7 de novembro de 2014 17:51
-
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" -
-
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