none
Atualizar banco teste via script RRS feed

  • Pergunta

  • Boa tarde,

    Pessoal,

    Utilizo o SQL Server 2005 Standard, estou precisando de uma ajuda para montar a seguinte função.

    Tenho um banco de produção no servidor e tenho um banco para testes que na verdade é a cópia do produção, estou precisando montar um job que faça com que toda noite ele atualize o banco teste com base no banco produção. (Seria como se fizesse um banckup do banco produção e restaurasse no banco teste).


    Alguém poderia me auxiliar nesta implementação?


    Desde já agradeço,




    Wagner
    • Movido Gustavo Maia Aguiar segunda-feira, 18 de janeiro de 2010 17:41 (De:SQL Server - Desenvolvimento Geral)
    sexta-feira, 15 de janeiro de 2010 16:40

Respostas

  • Wagner,

    eu fiz algo parecido...

    no server de producao tem um job p/ o bkp da base para um diretorio, e no server teste montei um script de restore apontando para este arquivo na rede, e na madrugada ele é executado sem problemas...

    ALTER DATABASE YourDB
    SET SINGLE_USER WITH
    ROLLBACK IMMEDIATE
    
    
    ----Restore Database
    RESTORE DATABASE YourDB
    FROM DISK = 'D:BackUpYourBaackUpFile.bak'
    WITH MOVE 'YourMDFLogicalName' TO 'D:DataYourMDFFile.mdf',
    MOVE 'YourLDFLogicalName' TO 'D:DataYourLDFFile.mdf'
    

    at.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 15 de janeiro de 2010 16:49
    Moderador
  • Wagner,

    Aqui na empresa temos um script que realiza todo este procedimento, executa o backup e restore na base destino, veja abaixo o código de exemplo:

    USE MASTER

    -- Realizando o Backup Full do Banco CORPORERM
    BACKUP DATABASE CORPORERM
     TO DISK = 'F:\MSSQL_BACKUP\CORPORE_TESTE.BAK'
      WITH INIT,
      DESCRIPTION = 'Backup Full Database CORPORERM para restauração no Database CORPORERM_TESTE'
    Go

    -- Restaurando o Backup Full CORPORERM, sobrescrevendo o Banco CORPORE_TESTE2
    RESTORE DATABASE CORPORE_TESTE
     FROM DISK = 'F:\MSSQL_BACKUP\CORPORE_TESTE.BAK'
      WITH RECOVERY,
       REPLACE,
       FILE = 1,
       STATS = 10,
       MOVE 'Lt_Data' TO 'F:\MSSQL_DADOS\CORPORE_TESTE.mdf',
       MOVE 'Lt_Log' TO 'F:\MSSQL_DADOS\CORPORE_TESTE_log.ldf'
    Go

    --Conectando-se ao Banco CORPORERM_TESTE
    USE CORPORERM_TESTE
    go

    --Reconfigurando o SQL Server para permitir alteração em System Tables
    sp_configure 'allow updates', '1'
    go
    reconfigure with override
    go

    --Excluíndo usuários para evitar conflito
    delete sysusers where name = '\rm'
    delete sysusers where name = '\sysdba'
    delete sysusers where name = 'rm'
    delete sysusers where name = 'sysdba'
    go

    --Reconfigurando o SQL Server para bloquear alteração em System Tables
    sp_configure 'allow updates', '0'
    go
    reconfigure with override
    go

    --Adicionando os usuários no Role DBO
    Exec sp_addrolemember 'db_owner','rm'
    Exec sp_addrolemember 'db_owner','sysdba'
    go
    -- Criando Usuários
    sp_adduser sysdba,sysdba
    go
    sp_adduser rm,rm
    go

    -- Liberando acesso as tables de configuração do Banco CORPORERM_TESTE
    grant select on gparams to sysdba
    grant select on gusuario to sysdba
    grant select on gpermis  to sysdba
    grant select on gacesso  to sysdba
    grant select on gsistema  to sysdba
    grant select on gcoligada  to sysdba
    grant select on gusrperfil to sysdba
    go

    Print ''
    Print '----------------------------------------------------------------------------------------------------------------'
    Print 'Processo Realizado com sucesso!!!'


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 15 de janeiro de 2010 23:54
    Moderador
  • Boa Tarde,

    Isso ocorre porque você conecta no banco para fazer o RESTORE.
    Conecte-se no banco MASTER e tente novamente.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Recuperando o nome dos elementos em um documento XML no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!914.entry


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 18 de janeiro de 2010 17:41

Todas as Respostas

  • Wagner,

    eu fiz algo parecido...

    no server de producao tem um job p/ o bkp da base para um diretorio, e no server teste montei um script de restore apontando para este arquivo na rede, e na madrugada ele é executado sem problemas...

    ALTER DATABASE YourDB
    SET SINGLE_USER WITH
    ROLLBACK IMMEDIATE
    
    
    ----Restore Database
    RESTORE DATABASE YourDB
    FROM DISK = 'D:BackUpYourBaackUpFile.bak'
    WITH MOVE 'YourMDFLogicalName' TO 'D:DataYourMDFFile.mdf',
    MOVE 'YourLDFLogicalName' TO 'D:DataYourLDFFile.mdf'
    

    at.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 15 de janeiro de 2010 16:49
    Moderador
  • Obrigado pela resposta.


    Os dois bancos estão no mesmo servidor.

    Não entendi esta parte:


    ALTER DATABASE YourDB
    SET SINGLE_USER WITH
    ROLLBACK IMMEDIATE
    Wagner
    sexta-feira, 15 de janeiro de 2010 16:55
  • Vagner,

    nesta parte altero o banco p/ single user, e dou um rollbak, caso alguem deixou algo executando ou esta usando o backup nao vai funcionar, este comando força um rollbak p/ previnir este erro...

    esqueci de voltar o status p/ multi_user... no final adicione este script

    ALTER DATABASE YourDB SET MULTI_USER
    GO
    

    att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 15 de janeiro de 2010 17:11
    Moderador
  • Obrigado.

    Wagner
    sexta-feira, 15 de janeiro de 2010 17:24
  • Wagner,

    Aqui na empresa temos um script que realiza todo este procedimento, executa o backup e restore na base destino, veja abaixo o código de exemplo:

    USE MASTER

    -- Realizando o Backup Full do Banco CORPORERM
    BACKUP DATABASE CORPORERM
     TO DISK = 'F:\MSSQL_BACKUP\CORPORE_TESTE.BAK'
      WITH INIT,
      DESCRIPTION = 'Backup Full Database CORPORERM para restauração no Database CORPORERM_TESTE'
    Go

    -- Restaurando o Backup Full CORPORERM, sobrescrevendo o Banco CORPORE_TESTE2
    RESTORE DATABASE CORPORE_TESTE
     FROM DISK = 'F:\MSSQL_BACKUP\CORPORE_TESTE.BAK'
      WITH RECOVERY,
       REPLACE,
       FILE = 1,
       STATS = 10,
       MOVE 'Lt_Data' TO 'F:\MSSQL_DADOS\CORPORE_TESTE.mdf',
       MOVE 'Lt_Log' TO 'F:\MSSQL_DADOS\CORPORE_TESTE_log.ldf'
    Go

    --Conectando-se ao Banco CORPORERM_TESTE
    USE CORPORERM_TESTE
    go

    --Reconfigurando o SQL Server para permitir alteração em System Tables
    sp_configure 'allow updates', '1'
    go
    reconfigure with override
    go

    --Excluíndo usuários para evitar conflito
    delete sysusers where name = '\rm'
    delete sysusers where name = '\sysdba'
    delete sysusers where name = 'rm'
    delete sysusers where name = 'sysdba'
    go

    --Reconfigurando o SQL Server para bloquear alteração em System Tables
    sp_configure 'allow updates', '0'
    go
    reconfigure with override
    go

    --Adicionando os usuários no Role DBO
    Exec sp_addrolemember 'db_owner','rm'
    Exec sp_addrolemember 'db_owner','sysdba'
    go
    -- Criando Usuários
    sp_adduser sysdba,sysdba
    go
    sp_adduser rm,rm
    go

    -- Liberando acesso as tables de configuração do Banco CORPORERM_TESTE
    grant select on gparams to sysdba
    grant select on gusuario to sysdba
    grant select on gpermis  to sysdba
    grant select on gacesso  to sysdba
    grant select on gsistema  to sysdba
    grant select on gcoligada  to sysdba
    grant select on gusrperfil to sysdba
    go

    Print ''
    Print '----------------------------------------------------------------------------------------------------------------'
    Print 'Processo Realizado com sucesso!!!'


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 15 de janeiro de 2010 23:54
    Moderador
  • Boa tarde,

    Está me dando uma mensagem de erro na parte do Restore


    Message
    Executed as user: DELTAENGENHARIA\9280. RESTORE cannot process database 'vetorh_teste' because it is in use by this session. It is recommended that the master database be used when performing this operation. [SQLSTATE 42000] (Error 3102)  RESTORE DATABASE is terminating abnormally. [SQLSTATE 42000] (Error 3013).  The step failed.




    Wagner
    segunda-feira, 18 de janeiro de 2010 16:57
  • Boa Tarde,

    Isso ocorre porque você conecta no banco para fazer o RESTORE.
    Conecte-se no banco MASTER e tente novamente.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Recuperando o nome dos elementos em um documento XML no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!914.entry


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 18 de janeiro de 2010 17:41
  • Ola wagner,

    por isto que em meu script eu coloco o banco em single user e no final volto para multi user....


    att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    segunda-feira, 18 de janeiro de 2010 17:42
    Moderador