locked
Qual é o impacto de "substituir" uma base (+ recente) ? RRS feed

  • Pergunta

  • Qual é o impacto de "substituir" uma base ?

    Estou implementando um esquema aqui (Sql Server 2005), terá de semana em semana fazer esse processo. Como sou novo em SQL Server não sei se o procedimento comentado abaixo, trará algum impacto.

    Quero "substituir" uma base da produção por outra, com + dados recentes (é bom citar isso por que senão terá questionamentos).

    É acho que é melhor renomear ela. Restaurar a outra, e depois eliminar a antiga.
    Por exemplo, vou em Databases, seleciono a base em produção, e na opção renomear, escolho de contabilidade para contabilidadeOld (nome lógico). Só que o nome contabilidade.mdf continua o mesmo.

    Restauro a outra Database com o nome lógico de contabilidade, porem o nome fisico nao pode ficar o mesmo contabilidade.mdf, então deixei contabilidade20090605.mdf. Deixar o nome físico assim, será uma boa pratica?

    Pergunta: As query se baseia pelo nome logico então não terei problema ?
    Pergunta: Como é o passo para aproveitar as storedProcedures e as permissoes dos usuarios todas as vezes que fizer isso.

    Valew !
    sexta-feira, 5 de junho de 2009 18:23

Respostas

  • Boa Noite Anetao,

    É possível fazer esse procedimento, mas no momento de substituir o banco é preciso que ele esteja sem nenhum acesso (exclusive mode). Você pode derrubar os usuários antes para garantir que nenhum acesso está sendo feito com as instruções abaixo:

    ALTER DATABASE Banco SET READ_ONLY WITH ROLLBACK IMMEDIATE
    ALTER DATABASE Banco SET READ_WRITE WITH ROLLBACK IMMEDIATE


    Posteriormente faça a restauração. Não há nenhum problema em ter nomes físicos diferentes (nem o nome lógico fará influência).
    Para garantir que os logins e usuários estejam mapeados, você deve utilizar o comando ALTER USER ou a stored procedure sp_change_users_login

    [ ]s,

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

    Como eliminar linhas duplicadas e repetições no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!584.entry


    Classifique as respostas. O seu feedback é imprescindível
    domingo, 7 de junho de 2009 02:43

Todas as Respostas

  • Será que dá certo renomear, por que veja o que ocorreu ...
    TITLE: Microsoft SQL Server Management Studio
    ------------------------------

    Unable to rename ODSx. (ObjectExplorer)

    ------------------------------
    ADDITIONAL INFORMATION:

    Rename failed for Database 'ODS'.  (Microsoft.SqlServer.Smo)

    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.4035.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Rename+Database&LinkId=20476

    ------------------------------

    An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------

    The database could not be exclusively locked to perform the operation. (Microsoft SQL Server, Error: 5030)

    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.4035&EvtSrc=MSSQLServer&EvtID=5030&LinkId=20476

    ------------------------------
    BUTTONS:

    OK
    ------------------------------
    sexta-feira, 5 de junho de 2009 18:49
  • aNetão,

    Esta substituição não seria simplesmente restaurar um backup sobre este banco?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 5 de junho de 2009 19:48
    Moderador
  • Tipo assim, é parecido com isso.

    Entao, o backup sempre terá que ser do tipo full !!! (nao será necessario entrar nesse merito)

    Ai, estava pensando em fazer isso renomear a base antiga, restaurar a nova com o mesmo nome ! Para qualquer coisa ter como voltar atras.


    Pergunto, agora. Esse procedimento que já descrevi (em outro post acima) é possivel ou não ? Por que nao deu para renomear a base ?

    Em outro banco que eu usava as vezes, é possivel fazer dessa forma descrita.
    sábado, 6 de junho de 2009 14:35
  • Boa Noite Anetao,

    É possível fazer esse procedimento, mas no momento de substituir o banco é preciso que ele esteja sem nenhum acesso (exclusive mode). Você pode derrubar os usuários antes para garantir que nenhum acesso está sendo feito com as instruções abaixo:

    ALTER DATABASE Banco SET READ_ONLY WITH ROLLBACK IMMEDIATE
    ALTER DATABASE Banco SET READ_WRITE WITH ROLLBACK IMMEDIATE


    Posteriormente faça a restauração. Não há nenhum problema em ter nomes físicos diferentes (nem o nome lógico fará influência).
    Para garantir que os logins e usuários estejam mapeados, você deve utilizar o comando ALTER USER ou a stored procedure sp_change_users_login

    [ ]s,

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

    Como eliminar linhas duplicadas e repetições no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!584.entry


    Classifique as respostas. O seu feedback é imprescindível
    domingo, 7 de junho de 2009 02:43
  • Gustavo,
    então, como não sabia dessas instruções que vc passou, fiz no desenvolvimento.

    Executei:
    ALTER DATABASE ODS SET READ_ONLY WITH ROLLBACK IMMEDIATE
    Retornou:
    Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.

    Tentei consultar vi, e comprovei que ele corta as conexoes. Depois:
    ALTER DATABASE ODS SET READ_WRITE WITH ROLLBACK IMMEDIATE
    
    Voltei a consultar normalmente.

    Voltei com a instrução:
    ALTER DATABASE ODS SET READ_ONLY WITH ROLLBACK IMMEDIATE
    
    Ai, foi renomear a base (ODS20090615). Veja, ...
    TITLE: Microsoft SQL Server Management Studio
    ------------------------------

    Unable to rename ODS20090615. (ObjectExplorer)

    ------------------------------
    ADDITIONAL INFORMATION:

    Rename failed for Database 'ODS'.  (Microsoft.SqlServer.Smo)

    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.1399.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Rename+Database&LinkId=20476

    ------------------------------

    An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------

    To change the NAME, the database must be in state in which a checkpoint can be executed. (Microsoft SQL Server, Error: 902)

    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.1399&EvtSrc=MSSQLServer&EvtID=902&LinkId=20476

    ------------------------------
    BUTTONS:

    OK
    ------------------------------

    Quero renomear, para qualquer ter a base antiga, ainda!

    E dps, ia fazer uma restauração Full.


    Se eu estiver respondendo a sua pergunta, e a mesma tiver utilidade. Vote com útil. Se for minha dúvida, e você me ajudar na solução, terei o maior prazer em votar como útil. Esse é o espírito do Forum MSDN !!! Valew !
    segunda-feira, 15 de junho de 2009 15:26