none
[Servidor] Como faço para atualizar meu servidor de dev a partir do servidor de produção? RRS feed

  • Pergunta

  • Olá,

    Tenho dois servidores de banco aqui. Um de dev e outro de prod.

    Quero então rodar uma SP em produção e, após isto pegar o resultado da SP e jogar direto em uma tabela na base de dev.

    Como posso fazer isto?

    É possível?

    Obrigado Feras do SQL


    K2rto'4 - Analista Sharepoint
    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善



    • Editado TI DEV quinta-feira, 30 de outubro de 2014 18:58
    quinta-feira, 30 de outubro de 2014 18:58

Respostas

  • K2rto'4,

    Crie um "linkedserver" no servidor de Produção para inserir os dados na tabela em seu ambiente de desenvolvimento.

    Para criar um linkedserver, utilize o script T-SQL abaixo:

    EXEC sp_addlinkedserver   
       @server=N'TESTE', 
       @srvproduct=N'',
       @provider=N'SQLNCLI', 
       @datasrc=N'SeuServidor\SuaInstancia';
    GO
    sp_addlinkedsrvlogin @rmtsrvname ='TESTE'
    , @useself = 'FALSE'
    , @locallogin = null
    , @rmtuser ='SeuUsuario'
    , @rmtpassword = 'SuaSenha'
    GO
    

    É necessário habilitar o RPC para manipular os dados entre os servidores.

    Abra o SSMS, selecione "Server Objects" => "Linked Servers" e selecione o LinkedServer que você criou. Clique com o botão direito em "Properties". Na janela, selecione a aba "Server Options" e habilite as opções de RPC. Veja na imagem abaixo:

    Então se a tabela for idêntica entre os ambientes, basta executar a instrução INSERT como indicado no exemplo abaixo:

    USE SeuBanco
    GO
    
    --EXEMPLO EXECUTANDO O SCRIPT NO SERVIDOR DE PRODUÇÃO
    INSERT INTO [TESTE].SeuBanco.dbo.TB_PESSOA (CD_PESSOA, NM_PESSOA)
    SELECT CD_PESSOA, NM_PESSOA FROM TB_PESSOA;
    GO

    Isto você pode executar através de um Job em horários específicos para não impactar os seus usuários de Produção.

    Para maiores informações veja:

    http://msdn.microsoft.com/en-us/library/ff772782.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sexta-feira, 31 de outubro de 2014 10:54
    Moderador

Todas as Respostas

  • Boa tarde,

    Você não pode fazer um backup no banco de produção e fazer o restore em dev?

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quinta-feira, 30 de outubro de 2014 19:56
  • Vamos lá:

    Sua máquina de produção "enxerga" a instância de DEV? Se sim, é possível. Vamos lá:

    INSERT INTO baseDEV.dbo.TabelaA
    EXEC ('sp_SUA_SP')

    Lembrando que a TabelaA deve ter a mesma estrutura do resultSet da sua SP.

    http://stackoverflow.com/questions/3502269/how-to-insert-table-values-from-one-database-to-another-database

    Se não, não acredito que seja possível fazer a carga diretamente. Uma opção neste caso é:

    Criar a TabelaA em produção (Lembrando que a TabelaA deve ter a mesma estrutura do resultSet da sua SP)

    INSERT INTO TabelaA
    EXEC ('sp_SUA_SP')

    Depois, exportar os dados da sua TabelaA usando XML, CSV ou qualquer outra forma suportada pelo SQL Server e então importar em DEV.

    Se nada disso for possível, só vejo a opção de backup, restore.

    Marque como resposta se foi útil.



    quinta-feira, 30 de outubro de 2014 20:01
  • K2rto'4,

    Crie um "linkedserver" no servidor de Produção para inserir os dados na tabela em seu ambiente de desenvolvimento.

    Para criar um linkedserver, utilize o script T-SQL abaixo:

    EXEC sp_addlinkedserver   
       @server=N'TESTE', 
       @srvproduct=N'',
       @provider=N'SQLNCLI', 
       @datasrc=N'SeuServidor\SuaInstancia';
    GO
    sp_addlinkedsrvlogin @rmtsrvname ='TESTE'
    , @useself = 'FALSE'
    , @locallogin = null
    , @rmtuser ='SeuUsuario'
    , @rmtpassword = 'SuaSenha'
    GO
    

    É necessário habilitar o RPC para manipular os dados entre os servidores.

    Abra o SSMS, selecione "Server Objects" => "Linked Servers" e selecione o LinkedServer que você criou. Clique com o botão direito em "Properties". Na janela, selecione a aba "Server Options" e habilite as opções de RPC. Veja na imagem abaixo:

    Então se a tabela for idêntica entre os ambientes, basta executar a instrução INSERT como indicado no exemplo abaixo:

    USE SeuBanco
    GO
    
    --EXEMPLO EXECUTANDO O SCRIPT NO SERVIDOR DE PRODUÇÃO
    INSERT INTO [TESTE].SeuBanco.dbo.TB_PESSOA (CD_PESSOA, NM_PESSOA)
    SELECT CD_PESSOA, NM_PESSOA FROM TB_PESSOA;
    GO

    Isto você pode executar através de um Job em horários específicos para não impactar os seus usuários de Produção.

    Para maiores informações veja:

    http://msdn.microsoft.com/en-us/library/ff772782.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sexta-feira, 31 de outubro de 2014 10:54
    Moderador
  • Só para constar, CUIDADO com isso de atualizar DEV e/ou PRODUÇÃO por LinkedServer.

    O LinkedServer é uma via de mão dupla, ou seja, se você faz um insert de PROD para DEV, pode-se fazer também de DEV para PROD.

    Preste muita, mas muita atenção com estes usuários e nas transações.

    Eu em particular não faço deste modo, pois já vi ambientes de produção pararem por erros com linkedserver de desenvolvimento.

    Prefiro o bom backup/restore quando necessário (como citado pelo Bruno Destro) ou outra solução pelo SSIS para ter um controle a nivel transacional no meu ambiente de DEV.

    sexta-feira, 31 de outubro de 2014 16:59
  • Olá,

    A intenção na verdade é a de testar uma solução em dev, mas com os dados de produção.

    Preciso pegar os dados de produção e jogar em uma tabela em dev.

    Após isto uma SP roda sobre a tabela alimentada com os dados de produção.

    Vou testar alguns procedimentos sugeridos aqui.

    Obs.: Não consigo fazer um backup diretamente. Caso precise de uma backup precisarei falar com o DBA.

    Obrigado


    K2rto'4 - Analista de Sistemas II

    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善




    • Editado TI DEV sexta-feira, 31 de outubro de 2014 17:44
    sexta-feira, 31 de outubro de 2014 17:34
  • Falem aí,

    Consigo fazer uma consulta no outro servidor, a partir de um servidor.

    Seguem:

    Servidor    :ServerA
    Banco : BancoA
    Grantor :dbo
    Tabela :TabelaA

    Servidor    :ServerB
    Banco : BancoB
    Grantor :dbo
    Tabela :TabelaB

    A partir do servidor B, faço:

    select *
    from [ServerA].[BancoA].[dbo].[TabelaA]

    Ainda não tentei um insert, mas acho que deve rolar. Só devo me atentar para a permissão.

    Abraços


    K2rto'4 - Analista de Sistemas

    "Hoje melhor do que ontem, amanhã melhor do que hoje!" 改 善



    • Editado TI DEV quarta-feira, 5 de novembro de 2014 13:57
    quarta-feira, 5 de novembro de 2014 13:56