none
Como fazer backup de todas as bases de dados somente com o "sa" acessando o servidor ? RRS feed

  • Pergunta

  • Prezados,

    Estou precisando fazer um backup de todas as bases de dados de um servidor, porém, apesar do backup ser um procedimento que se pode fazer com as bases sendo acessadas, no meu caso, eu preciso que ninguém esteja acessando base nenhuma.

    Sei que se pode colocar cada base de dados no modo "dbo use only" (Restricted User), a fim de que somente o owner (no meu caso seria o "sa") de cada base possa acessá-la, mas isso teria que ser feito base por base (são 92 no meu caso).

    Por isso gostaria de saber se existe alguma configuração que eu faça no servidor que não permita que ninguém, além do "sa" se conecte a ele, pois assim eu poderia realizar o backup de todas as bases da maneira que eu preciso.

    Será que eu consigo esse objetivo clicando com o botão direito sobre o nome do servidor no SSMS, escolhendo "Properties" e depois a opção "Connections" e no campo "Maximum number of concurrent connections" colocar "1" ?

    Agradeço desde já a colaboração.

    José Luiz

     


    • Editado José Luiz SP quinta-feira, 10 de novembro de 2011 19:23
    quinta-feira, 10 de novembro de 2011 19:22

Todas as Respostas

  • José,

    Você poderia configurar o seu banco de dados como Single User, sendo assim, somente o SA poderá ter acesso!!!!

     

    Mas, sinceramente eu não entendi o que você esta querendo fazer, porque este tipo de necessidade?


    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]
    quinta-feira, 10 de novembro de 2011 23:23
    Moderador
  • Junior,

    Obrigado pela atenção.

    Mas nessa solução que você me dá, eu teria que colocar, banco por banco, no modo "single user", só que são 92 bancos de dados no servidor. Por isso que pergunto uma forma de se fazer esta configuração no servidor. A opção que dei, restringindo as "Connections" funcionaria ?

    Quanto ao porquê de eu querer que somente o "sa" esteja acessando o servidor para fazer backup de todas as bases, é porque eu quero ter certeza de que quando eu rodar o meu "Maintenance Plan" para fazer o backup de todas as bases não haverá o risco de, após o job já ter feito o backup de um determinado banco, algum usuário não acesse o sistema depois deste momento e inclua novas informações neste banco. Ou seja, quero ter certeza de que todos os arquivos de backup de cada banco sejam atuais.

    Espero que tenha ficado claro pra você.

    Sds,

    José Luiz

    sexta-feira, 11 de novembro de 2011 12:17
  • Bom Dia,

    É possível colocar todo o servidor em single user, mas isso exige uma parada da instância inteira e um segundo restart para retirar o servidor de single user. Já teríamos um problema, pois, o servidor em single user não seria possível que o SQL Agent trabalhasse corretamente, já que se houver mais de um job na mesma hora, apenas um poderá utilizá-lo.

    Honestamente não vejo isso como uma boa implementação. Os bancos de dados primam por taxas de disponibilidades cada vez maiores e indisponibilizar um servidor inteiro para fazer backup vai completamente de encontro com essas premissas. Fica parecendo até às épocas em que só havia backup offline, ou seja, é preciso parar para tirar backup.

    Não entendo a questão do "risco do usuário acessar o sistema e incluir novas informações". O backup não deve indisponibilizar a base enquanto ele é retirado, pois, o usuário em princípio não deve ter que parar por conta do backup. Se você realmente quer que o usuário não possa alterar a base até que o backup finalize, a questão não é o single user, mas sim colocar a base em readonly.

    Há algum razão de negócio que impeça que o usuário trabalhe a base durante o backup ?

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 11 de novembro de 2011 13:27
  • Junior,

    Deixa eu explicar melhor : o meu backup rotineiro é feito normalmente com o servidor disponível para todos acessarem.

    O motivo pelo qual estou querendo fazer um backup de todos os bancos dessa forma é porque os servidores serão transportados de um CPD para o outro. Haverá mudança de local físico do CPD e eu vou fazer um backup dessa forma uma ÚNICA vez por causa desse motivo. Não vai ser rotina isso e, como eu disse antes, meus jobs de backup não são feitos assim, mas sim com tudo no ar !

    Só estou querendo fazer o backup desta forma pra garantir que, em caso de acidente nesta mudança dos servidores, eu tenho certeza de que restaurando estes backups ninguém correrá o risco de perder nada.

    Será que desta vez consegui me fazer entender e você entender o real motivo pelo qual tenho essa dúvida ? Espero que sim.

    Caso contrário, pergunte de novo.

    Sds,

    José Luiz

     

    sexta-feira, 11 de novembro de 2011 13:43
  • Pode ser uma solução meio esdrúxula, mas talvez possa ajudar.

    Se tu executar o result dessa query antes de rodar teu backup.

     

     

    select 'alter login [' + name + '] disable;' from sys.syslogins where name <> 'sa' and loginname not like '##%'
    

     


    Depois agenda pra habilitar eles de volta.

    Espero que ajuda.

    Vlew.

     

    ... ahh na query seria importante verificar se já não estão desabilitados pra não habilitar depois os users que tu tenha realmente desabilitado.


    sexta-feira, 11 de novembro de 2011 17:15
  • Boa Noite,

    Eu iria partir para uma estratégia mais direta

    - Logue local no servidor
    - Despluge os cabos de rede
    - Efetue o backup

    Se essa estratégia não puder ser realizada por qualquer motivo, colocar a instância em Single User e efetuar o backup é a melhor saída. Só que nesse caso, não vai dar pra fazer isso via JOB. Você teria que parar o serviço, colocá-lo em single user, logar e efetuar os backups.

    Uma outra estratégia é utilizar o backup de log na modalidade Tail Log. Ele iria fazer o último backup de log e já deixar a base indisponível.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    sábado, 12 de novembro de 2011 21:41
  • Obrigado, Gustavo e a todos que me responderam...

    Como informativo, deixo registrado que a opção de "desplugar" o servidor da rede não seria possível fazer, pois os servidores ficam em local muito remoto em relação ao escritório em que estou. Ou seja, o CPD fica longe e eu acesso as máquinas através da opção "Conexão de área de trabalho remoto" do Windows.

    A melhor opção foi mesmo incluir o parâmetro "-m", nos "Startup Parameters" do SQL SERVER e dar o "start" nele desta forma. Depois fazer o backup.

    Valeu !

    José Luiz

    domingo, 13 de novembro de 2011 16:02