none
Erro geral SQL. RRS feed

  • Pergunta

  • Bom dia pessoal,

    é o seguinte, estou com um servidor rodando o SQL SERVER 2008 R2 e utilizamos o banco para rodar nosso sistema da RM TOTVS. Deu uma queda de energia aqui  neste fim de semana e com isso os servidores reiniciaram, porém depois q o banco reiniciou sempre que abrimos um modulo especifico do RM aparece uma mensagem de erro dizendo o seguinte. 

    General SQL error.
    Could not continue scan with NOLOCK due to data movement.

    Já fiz todos os possíveis testes que o próprio fórum manda fazer sobre travamento de SQL e mesmo assim aparece o erro quando acessamos uma determinada aba do sistema listada logo abaixo no print.


    CharlesTI.

    segunda-feira, 1 de fevereiro de 2016 11:53

Respostas

  • Boa tarde a todos, fiz os metodos muito parecidos com o que vcs me indicaram...

    1º executei o comando para verificar os erros:

    DBCC CHECKDB(CORPORERM)
    GO

    NO MESMO ENCONTREI 12 ERROS.

    2º Em seguida executei a consulta para poder reparar os 12 erros deixando minha base em modo singer user, fazendo assim com que os outros usuários que estivessem usando a mesma base travasse seus processos para não causar mais problemas.

    USE CORPORERM
    GO
    ALTER DATABASE CORPORERM
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    DBCC CHECKDB(CORPORERM,repair_allow_data_loss)
    GO

    3º Logo apos aplicar correções voltei novamente a base para mult user:

    ALTER DATABASE CORPORERM
    SET MULTI_USER
    GO

    Obs.: Ocorreu problemas, normal já que esta reparação tem riscos, perdemos metade de inserções feitas na sexta-feira, mas pelo menos conseguimos restaurar as tabelas que estavam mais problematicas no sistema.

    Abraço a todos que me apoiaram: Logan Destefani MerazziTiago_Neves e Junior Galvão - MVP



    CharlesTI.

    • Marcado como Resposta CHARLES.PTU terça-feira, 2 de fevereiro de 2016 16:40
    terça-feira, 2 de fevereiro de 2016 16:40

Todas as Respostas

  • Charles bom dia,

    Você consegue acessar o banco e verificar se o banco esta online?

    Se o banco estiver online, valide a integridade executando um checkdb.

    DBCC CHECKDB

    Cara mais importante, antes de tomar alguma ação faça um backup.

    Se a base não estiver online não reinicie o servidor, pois pode piorar a situação.

    Mais duvidas vai falando por aqui.


    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    segunda-feira, 1 de fevereiro de 2016 11:59
  • Charles,

    Primeira coisa: rode um DBCC CHECKDB no banco (use o parâmetro with physical_only)

    Veja os erros que irão aparecer e onde se econtram. Com isso, poderemos ver se um rebuild nos indices pode resolver.

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    segunda-feira, 1 de fevereiro de 2016 12:08
  • Bom dia Tiago, 

    os nosso backup são feitos de formas automaticas sendo feitos 2 vezes por dia, um durante a tarde entre as 18 e 19 e outro feito durante horario de expediente entre as 12 e 13. Vou testar sim o comando. Abraços


    CharlesTI.

    segunda-feira, 1 de fevereiro de 2016 12:12
  • Charles,

    Você executou passando o nome da base?

    DBCC CHECKDB ('NomeDatabase') WITH ALL_ERRORMSGS


    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    segunda-feira, 1 de fevereiro de 2016 12:26
  • Desculpe Tiago,

    não fiz desse jeito, vou fazer agora e mandar novamente para vcs.


    CharlesTI.

    segunda-feira, 1 de fevereiro de 2016 12:30
  • DBCC results for 'CORPORERM'.
    Service Broker Msg 9675, State 1: Message Types analyzed: 14.
    Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.
    Service Broker Msg 9667, State 1: Services analyzed: 3.
    Service Broker Msg 9668, State 1: Service Queues analyzed: 3.
    Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.
    Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.
    Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.
    Service Broker Msg 9605, State 1: Conversation Priorities analyzed: 0.

    There are 95296 rows in 1327 pages for object "SZLOGATENDIMENTO".
    CHECKDB found 0 allocation errors and 12 consistency errors in database 'CORPORERM'.
    repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (CORPORERM).
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.


    CharlesTI.

    segunda-feira, 1 de fevereiro de 2016 12:49
  • Charles,

    Como você viu no resultado foram encontrados 12 erros na sua base, o que você pode fazer agora é executar um backup dos dados antes de qualquer coisa para garantir que vc volta os dados neste momento.

    Depois executa o checkdb novamente só que dessa vez utilizando o REPAIR_REBUILD.

    REPAIR_REBUILD

    <sentencetext xmlns="http://www.w3.org/1999/xhtml">Executa reparos que não têm nenhuma possibilidade de perda de dados.</sentencetext> Isso pode incluir reparos rápidos, como reparo de linhas perdidas em índices não clusterizados e reparos mais demorados, como a recriação de um índice.

    alter database NomeDatabase set single_user

    DBCC CHECKDB ('NomeDatabase',REPAIR_REBUILD


    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net


    • Editado Tiago_Neves segunda-feira, 1 de fevereiro de 2016 13:33
    segunda-feira, 1 de fevereiro de 2016 13:20
  • Charles,

    Uma possibilidade seria tentar através do comando DBCC CheckTable analisar a estrutura física e lógica das suas tabelas, se o banco de dados esta Online e você esta conseguindo fazer acesso ao mesmo, possa ser que exista alguma tabela que falha.

    Você esta conseguindo acessar o banco de dados? Tente utilizar o Management Studio.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 2 de fevereiro de 2016 11:42
  • Boa tarde a todos, fiz os metodos muito parecidos com o que vcs me indicaram...

    1º executei o comando para verificar os erros:

    DBCC CHECKDB(CORPORERM)
    GO

    NO MESMO ENCONTREI 12 ERROS.

    2º Em seguida executei a consulta para poder reparar os 12 erros deixando minha base em modo singer user, fazendo assim com que os outros usuários que estivessem usando a mesma base travasse seus processos para não causar mais problemas.

    USE CORPORERM
    GO
    ALTER DATABASE CORPORERM
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    DBCC CHECKDB(CORPORERM,repair_allow_data_loss)
    GO

    3º Logo apos aplicar correções voltei novamente a base para mult user:

    ALTER DATABASE CORPORERM
    SET MULTI_USER
    GO

    Obs.: Ocorreu problemas, normal já que esta reparação tem riscos, perdemos metade de inserções feitas na sexta-feira, mas pelo menos conseguimos restaurar as tabelas que estavam mais problematicas no sistema.

    Abraço a todos que me apoiaram: Logan Destefani MerazziTiago_Neves e Junior Galvão - MVP



    CharlesTI.

    • Marcado como Resposta CHARLES.PTU terça-feira, 2 de fevereiro de 2016 16:40
    terça-feira, 2 de fevereiro de 2016 16:40
  • Charles,

    Você tem o backup de sexta?

    Se for o caso restaure em outra base e copie o conteúdo de uma base para outra, essa pode ser uma possibilidade.

    Por isso eu indiquei a você primeiro tentar utilizar o DBCC CheckTable.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 2 de fevereiro de 2016 16:51
  • Charles,

    Voce deve ter perdido dados.

    Eu falei para vc usar o DBCC CHECKDB ('NomeDatabase',REPAIR_REBUILD ) 

    Vc tem um backup da base antes de executar o comando?


    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    terça-feira, 2 de fevereiro de 2016 17:02
  • Algum dos arquivos de índice do banco de dados SQL pode ter sido danificado. 

    Fêz algum BACKUP dos ARQUIVOS DE ÍNDICES DO BANCO DE DADOS?

    Fazendo um RESTORE somente desses arquivos de índices pode ser que resolva o problema.

    Depois, lá dentro do Microsoft SQL Server tem um local (na versão atual não sei onde fica)  onde se consegue fazer o SQL dar uma REINICIADA no BANCO DE DADOS e ao fazer isso os arquivos de índices são reordenados automaticamente, e o funcionamento do banco de dados, ele costumava voltar a funcionar normalmente.

    Eu já fiz isso na época que eu utilizava o sistema RM SISTEMAS de Contabilidade e Folha de Pagamento, há vários anos atrás.  E funcionou.  Nessa versão atual do Microsoft SQL Server, eu creio que funcionará também.

    Bom dia

    terça-feira, 2 de fevereiro de 2016 17:13
  • Guia de criação de índice do SQL Server = https://msdn.microsoft.com/pt-br/library/jj835095(v=sql.120).aspx

    Mover um índice existente para um grupo de arquivos diferente = https://msdn.microsoft.com/pt-br/library/ms175905(v=sql.120).aspx

    Colocando índices em grupos de arquivos = https://technet.microsoft.com/pt-br/library/ms190433(v=sql.105).aspx

    terça-feira, 9 de fevereiro de 2016 08:06