none
Linked Server para acessar outro SQL Server na Rede RRS feed

  • Pergunta


  • Como eu faria pra acessar por exemplo, o Banco = REPOSITORIO no servidor = 192.168.1.2 com Login do Sql = Master e senha = xxx

     

    Estou em outro servidor na mesma rede local.

     

    Pelo que andei estudando, terei que usar a procedure

    sp_addlinkedserver

    Mas não estou conseguindo encontrar os parâmetros.

     

    Obrigado

    • Movido Gustavo Maia Aguiar quarta-feira, 23 de fevereiro de 2011 16:30 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 23 de fevereiro de 2011 12:25

Respostas

Todas as Respostas

  • Daniel,

     

    Sim, pode ser utilizada esta procedure para se criar o link server, os parametros da mesma são:

    sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] 
         [ , [ @provider= ] 'provider_name' ]
         [ , [ @datasrc= ] 'data_source' ] 
         [ , [ @location= ] 'location' ] 
         [ , [ @provstr= ] 'provider_string' ] 
         [ , [ @catalog= ] 'catalog' ] 
    Segue link oficial : http://msdn.microsoft.com/en-us/library/ms190479.aspx
    Link via ferramenta grafica: http://mscerts.net/sql_server/setting%20up%20linked%20servers%20using%20sql%20server%20management%20studio%20.aspx


    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    quarta-feira, 23 de fevereiro de 2011 12:29
    Moderador
  • Como ficaria minha procedure adaptada aos parametros que voce passou? Com os dados que eu preciso indicar?
    quarta-feira, 23 de fevereiro de 2011 12:47
  • Algo parecido com isso:

     

    EXEC sp_addlinkedserver 
    @server='nome_no_local', 
    @srvproduct='', 
    @provider='SQLOLEDB', 
    @datasrc='server_name_desejado' 
    GO
     

     

    Veja este link: http://forum.devmedia.com.br/viewtopic.php?t=54379&sid=15c9da75ad6d4063333a1c9802954c77 ou este http://sql-server-performance.com/Community/forums/p/17119/17119.aspx


    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    quarta-feira, 23 de fevereiro de 2011 12:52
    Moderador
  • server_name_desejado seria o endereço IP do outro servidor?
    quarta-feira, 23 de fevereiro de 2011 13:00
  • O nome dele, o nome da instancia, o sql vai enxergar a instancia, se for uma instancia nomeada seria host\NomeDaInstancia, se for a default, apenas o host do servidor.
    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    quarta-feira, 23 de fevereiro de 2011 13:03
    Moderador
  • sp_addlinkedserver @server = N'CONCENTRADOR',
        @srvproduct = N' ',
        @provider = N'SQLOLEDB',
        @datasrc = N'192.168.1.2',
        @catalog = N'REPOSITORIO '

     

    Consegui desta forma, nem precisou passar usuario e senha. Nesse caso ele usou login e senha da instancia de origem?

    Testei em 2 bancos com a mesma estrutura, mas se o banco for diferente, com usuario e senhas diferentes, como eu faria pra acessar?

    • Marcado como Resposta Daniel Ianegitz quarta-feira, 9 de março de 2011 12:43
    quarta-feira, 23 de fevereiro de 2011 13:43
  • Daniel,

     

    Neste caso é preciso uma outra proc, sp_addlinkedsrvlogin,  link oficial: http://msdn.microsoft.com/pt-br/library/ms189811.aspx

    link bem explicado/completo...: http://shahamishm.blogspot.com/2008/12/spaddlinkedsrvlogin-to-modify-or-add.html


    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    • Marcado como Resposta Daniel Ianegitz quarta-feira, 9 de março de 2011 12:43
    quarta-feira, 23 de fevereiro de 2011 13:46
    Moderador
  • Criando um LinkedServerLogin não preciso fazer a ligação dele um Linked Server?

    O Linked Server ja vai encontrar o servidor?

     

    Preciso fazer o Linked Server Login antes do Linked Server correto?

     

    quarta-feira, 23 de fevereiro de 2011 14:22
  • Não, voce primeiro cria um linked server, depois adicina um login ao linked server, pense assim:

    No servidor a (onde é criado o linked server), voce especifica um caminho ( o proprio LS) e (Opcional se não me engano), um usuario, este usuario é o que ira "btare na porta do outro servidor", ou seja, no servidor B (Destino), a pessoa que utiliza o linked server sera "identificada" por este usuario adicionado ao linked server...


    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    quarta-feira, 23 de fevereiro de 2011 14:26
    Moderador
  • Daniel,

    para um SQL Server comunicar-se com outro server é necessário o Linkedserver. o que vc precisa fazer agora é garantir que o usuário do servidor de destino tenha acesso no outro servidor... caso não tenha vc precisa "mapear" o login no servidor de destino...
    Ex. conecato no servidor de origem com o login MARCELO, ele login deve existir no servidor de destino ou então um mapeamento (de para) informando que quando o login MARCELO tentar conecta-se auntenticar com o login FERNANDES por exemplo....

    vou pesquisar algo mais claro na internet (how to)... acho que minha explicação está um pouco confusa...

     

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 23 de fevereiro de 2011 14:30
    Moderador
  • segue um link que pode ajudar...

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

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quarta-feira, 23 de fevereiro de 2011 14:34
    Moderador
  • O que eu preciso é o seguinte:

     

    Uma trigger.


    Dentro da trigger, rodo um cursor (que percorre minha tabela onde tem as infos dos servidores que eu preciso conectar)

     

    Dentro desse cursor eu quero o seguinte:

     

    Criar o linked server, adicionar um registro, deletar o linked server.

     

    Seria possível esse cenário?

    quarta-feira, 23 de fevereiro de 2011 14:35
  • Daniel,

     

    Tentei dizer o que o Marcelo explicou (sinto que minha capacidade de escrita esta ruim rs...)... por que voce precisar ficar criando e deletando o linked server? não pode apenas cria-lo uma vez, dar o acesso necessario e ir utilizando quando necessario?


    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    quarta-feira, 23 de fevereiro de 2011 14:37
    Moderador
  • É que essa tabela será dinâmica, e alimentada via sistema.

    Por exemplo:

     

    Hoje não pode dar carga em servidor tal, o usuário altera na tela.
    Senão eu ficaria louco o tempo todo criando e apagando Linked servers direto no sql manager.

    quarta-feira, 23 de fevereiro de 2011 14:42
  • Daniel,

     

    Ainda não entendi direito acho, todo caso, um linked server é um "tunel", saindo um pouco do ambiente sql e indo para redes, pense em uma vpn (tunelament), quando voce acessa a vpn, voce tem acesso a todos os servidores na mesma (obvio que depedendo da permissao do seu usuario). O que quis dizer com isso:

    - voce tem o servidor A (Origem) e o B (Destino)

    - Voce criou um linked server chamado ls_serverb

    - O servidor B possui as bases (alem das de sistema claro) x, y e z

    - Voce adiciona um usuario ao linked server ls_serverb (usuario: DOMINIO\USUARIOC)

    - portanto, o DOMINIO\USUARIOC deve contem um login no servidor B

    - o Acesso as bases e objetos na mesma serão tratados como permissões para este usuario no servidor B

    E para se utilizar o linked server seria algo +- assim:

    Inserção via linked server:

    INSERT INTO ls_serverb.x.dbo.tabela select nome, id from tabela

    OBS: Veja que o linked server é apenas um caminho, a não ser que seu servidor fique mudando de ip/host, não entendi o por que o mesmo precisa ficar sendo recriado.


    ---------------------------------------------- Para dicas SQL Server e mais -> www.onlywhatmatters.wordpress.com
    quarta-feira, 23 de fevereiro de 2011 14:51
    Moderador
  • Consegui criar o linked server, consegui comunicar, fiz select update delete insert, tudo certinho.

     

     

    Mas somente funciona via query solta, quando coloco o mesmo insert dentro de uma trigger do meu banco, dá erro de compilação, ele não acha os campos (obviamente não encontra, pois são campos de outro banco com outra estrutura)

    Como colocar o insert dentro de uma trigger no meu banco?

     

     

    quinta-feira, 24 de fevereiro de 2011 12:16
  • Daniel, Você precisa informar o FQDN,

    EX. insert into NOME_LINKED.banco.dbo.tabela

    Att. Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quinta-feira, 24 de fevereiro de 2011 12:19
    Moderador
  • Estou fazendo isso Marcelo.
    Colei a mesma query que rodava na query editor dentro da trigger, mas a trigger não compila, pois não reconhece os campos.
    quinta-feira, 24 de fevereiro de 2011 12:27
  • Daniel,

    podria postar parte do codigo?

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quinta-feira, 24 de fevereiro de 2011 12:38
    Moderador