none
Riscos em Parar o Serviço do SQL Server RRS feed

  • Pergunta

  • Olá,

    Tenho dúvida em relação a seguinte questão, Interromper/Parar o Serviço do SQLServer pode corromper o Banco de Dados se o mesmo estiver em uso?

    Obrigado.

    Abraço.

    terça-feira, 2 de julho de 2013 01:23

Respostas

  • Olá!

    Além do que nosso amigo Alexandre falou, outra saída seria você colocar sua base de dados em offline, e fazer a cópia dos arquivos. O comando seria o abaixo:

    alter database mydb set offline with rollback immediate

    Este comando ira realizar o rollback de todos processos abertos com a base imediatamente e levar a mesma para o status offline permitindo a cópia dos MDF's e LDF's.

    Abraço!


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    terça-feira, 2 de julho de 2013 23:26

Todas as Respostas

  • Só compartilhando experiência....

    Cara não sou DBA, muito menos especialista em SQL Server, uma vez (só fiz isso uma vez), rodando um JOB animal pra fazer um processo de ETL, estava demorando a execução, eu não podia esperar, tentei parar não parava acho que estava em processo de ROLLBACK, pensei em dar um stop na instância...

    Parou a instância, por algum motivo (o DBA na época não descobriu o porquê) mas corrompeu a base, ficamos o dia seguinte todo sem base...


    Leonardo Lourenço Silva
    MCT, MCSD, MCPD, MCTS, MCP, MTA
    netcoders.com.br
    leolosi.wordpress.com

    terça-feira, 2 de julho de 2013 01:31
  • Obrigado Leonardo,

    Este é meu receio, pois na realidade o que estou tentando fazer é o seguinte:

    * Tenho um sistema que faz Backups e estou desenvolvendo uma funcionalidade para fazer backup de bancos em SQl Server, pois então faço o backup via comando gero o arquivo .bak do SQl; Mas até por questão de garantia/precaução (acredito que não tenha tamanha necessidade) gostaria de copiar os arquivos .mdf e .ldf fisicamente, mas o que acontece é que quando vou copiar os arquivos eles estão em uso, e acaba não copiando os mesmos;

    Até pesquisando vi alguns casos que sugeriram em parar/iniciar o serviço que até funciona, mas meu medo é que nesse processo acabe ocorrendo algum problema como corromper uma base.

    Se alguém tiver alguma sugestão agradeço.

    Abraço.


    • Editado LBertuol terça-feira, 2 de julho de 2013 01:40 correção ortografica
    terça-feira, 2 de julho de 2013 01:38
  • Leonardo, bom dia !

    Realmente existe um risco da base ser corrompida mas acredito que este risco somente existe caso no momento so stop do serviço esteja executando algo que va alterar a estrutura da mesma, se forem processos normais trabalhando somente com dados o risco é muito pequeno pois quando o serviço do sql server subir novamente todas as transações que estavam abertas entram em rollback.

    Minha sugestão é voce fazer um backup FULL da sua base e então parar o serviço para fazer o que voce deseja e após isto iniciar o serviço novamente, caso algo de errado voce tem o backup full para restaurar e estará igual a antes de voce ter parado o serviço.


    Alexandre Matayosi Conde Mauricio.

    terça-feira, 2 de julho de 2013 10:29
  • Boa tarde pessoal,

    Este é o processo que eu faço, realizo um backup full da base e após dou um stop paralizo por 1 min a aplicação (sleep) dou um start sleep de 1 min novamente e realizo a cópia dos arquivos mdf e ldf fisicamente para outro diretório, até creio que esta cópia não seria necessária por ter o backup full do banco, faço isto somente para garantir mesmo.

    Uma informação válida é que o momento do backup será feito em horários onde não esteja em uso o sistema e se estiver são processos de consulta/inclusão/alteração/ exclusão de registros nada de alterações de estrutura na base. Faço este stop/start no serviço pois ao tentar copiar os arquivos mdf e ldf sem parar/iniciar o serviço não copia pois os arquivos estão em uso (erro retornado pelo win), mesmo tendo fechado a conexão utilizada  para passar o comando de backup full ainda me retorna em uso.

    Não conheço uma forma de liberar o uso fora o de stop/start do serviço, se alguém souber e sugerir agradeço.

    Utilizo delphi + ADO  para conectar no sql server e passar o comando de backup full

    Obrigado

    Abraço

    terça-feira, 2 de julho de 2013 19:30
  • Sempre que o serviço do sql server estiver iniciado os arquivos fisicos (.mdf e .ldf) sempre estarão em uso, não tem jeito, sempre que tiver que manusear estes arquivos terá que ser com o serviço interrompido.

    Alexandre Matayosi Conde Mauricio.

    terça-feira, 2 de julho de 2013 19:33
  • Olá!

    Além do que nosso amigo Alexandre falou, outra saída seria você colocar sua base de dados em offline, e fazer a cópia dos arquivos. O comando seria o abaixo:

    alter database mydb set offline with rollback immediate

    Este comando ira realizar o rollback de todos processos abertos com a base imediatamente e levar a mesma para o status offline permitindo a cópia dos MDF's e LDF's.

    Abraço!


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    terça-feira, 2 de julho de 2013 23:26
  • Obrigado novamente pessoal,

    a sugestão do André é uma alternativa, irei fazer alguns testes com esta. Só uma dúvida, realizando o rollback das transações abertas levando a base para offline com o comando sugerido, terei que levantar a base ou deixá-la online novamente para voltar ao uso normal?

    Obrigado.

    Abraço.

    quarta-feira, 3 de julho de 2013 00:31
  • Ola! Isso mesmo! Depois basta você trazer a base online novamente com o mesml comando, apenas trocando a palavra offline por online. Um abraço!

    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    quarta-feira, 3 de julho de 2013 00:41
  • André,

    Fiz alguns testes, a princípio é bem isso ai o que preciso, vou fazer mais alguns testes para garantir. Mas desta forma que me sugeristes não corro risco de corromper base, na pior das hipóteses o único risco que corre é de alguém estar em adição ou qualquer transação aberta e dar um rollback, mas ai já é outra questão. 

    Obrigado a todos pela ajuda.

    Abraço.

    quarta-feira, 3 de julho de 2013 00:53
  • Exato. Transacoes abertas serao desfeitas, sua base nao sera corrompida estruturalmente. Abraço!

    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    quarta-feira, 3 de julho de 2013 00:57
  • André,

    Surgiu um pequeno problema, desde a parte de passar para offline, copiar os arquivos mdf e ldf fisicamente tudo ok, porém quando tento conectar novamente no banco para deixá-lo online, não consigo por ele estar offline provavelmente.

    Me retornando:

    Não é possível abrir o banco de dados "MEUBANCO" solicitado pelo logon. Falha de logon

    Teria alguma sugestão?

    Abraço.

    valeu!

    quarta-feira, 3 de julho de 2013 02:09
  • A base de dados padrão do seu login é a base agora OFFLINE. Ja tentou se conectar usando outro usuário com poder administrativo?

    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    quarta-feira, 3 de julho de 2013 02:52
  • Sim a base que utilizo para login é a mesma que faço o bkp full e copio os arquivos mdf e ldf, sendo que está offline agora, quanto ao usuário estou conectando com autentificação do usuário windows e este usuário é adm, será que se conectar com outra base no login e passar o comando para online para base que fico off funciona??? Teria alguma forma de apenas abrir conexão com sqlserver para utilizar uma query sem especificar a base de login? Irei fazer mais testes a noite qualquer dúvida ou novidade posto!

    Obrigado,

    Abraço

    quarta-feira, 3 de julho de 2013 12:04
  • Exatamente! Voce so vai conseguir voltar a base para online disparando comando de outra base! Um abraço

    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    quarta-feira, 3 de julho de 2013 12:07
  • Olá,

    Você poderia usar o próprio sistema de backup do SQL Server usando o Management Studio, pois ele irá liberar as conexões ao banco e realizar o backup de forma correta.

    Realizar a cópia do MDF e LDF não seria a mais indicada. Veja mais informações nesse link:

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

    quarta-feira, 3 de julho de 2013 12:27
  • Bom dia, somente complementando a resposta do André, voce pode tamber utilizar a interface grafica do SSMS, clicando com o botão direito em cima da base de dados, depois em tasks, tem as 2 opções, "Take Offline" e "Bring online" que fazem a mesma coisa que o comando via T-SQL.

    Alexandre Matayosi Conde Mauricio.

    quarta-feira, 3 de julho de 2013 13:27
  • LBertuol,

    Tenha sempre em mente, que o risco pode e vai existir, mas para ocorrer este tipo de falha, por padrão somente procedimentos que estejam no momento fazer acesso direto a estrutura física do seu banco de dados, arquivo .mdf, flegroup, páginas de dados e extensões podem ser comprometidas.

    Isso se você estiver fazendo manipulação de dados ou alterações nas estruturas, mas um detalhe é muito importante, o SQL Server é tão fantástico e robusto, que caso aconteça este tipo de falha, no momento da inicialização do Serviço os bancos de dados que podem estar com falha são marcados como Suspect ou Emergency, com isso, o processo de Rollback e Recovery é realizado para reverter qualquer falha de integridade física e lógica.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 3 de julho de 2013 18:55
    Moderador