none
Consultar múltiplas instâncias do ssql server na mesma query RRS feed

  • Pergunta

  • Olá a todos.

    Gostaria de saber como consultar mais de uma instância (em servidores diferentes) na mesma query.

    Por exemplo: Instância padrão no servidor A tem um banco chamado dbteste. Instância padrão no servidor B tem um banco chamado dbteste2.

    Na mesma consulta quero retornar dados dos dois bancos. Além disso, é possível fazer essa consulta pelo sqlcmd?


    SMRBKP

    terça-feira, 31 de março de 2015 13:09

Respostas

  • Amigo,

    Do modo que o William indicou é possível você efetuar a consulta "semelhante", definindo apenas o nome do "linkedserver" e do "banco de dados". A vantagem neste caso é que você poderá utilizar essa instrução para consulta no "sqlcmd" da mesma forma que você utiliza no SSMS.

    Caso você precise realizar a mesma consulta "exatamente" da mesma forma entre duas instâncias com tabelas idêntidas cada um destes bancos de dados, então recomendo que você utilize o recurso do SSMS "multiple queries" usando a janela "Registered Servers" (menu "View" => "Registered Servers" ou teclas de atalho CTRL+ALT+G).

    Após abrir esta janela, clique com o botão direito em "Local Server Group" para obter as opções de configuração.

    Você poderá criar um novo "Server Group" e adicionar um "Server Registration" para cada instância SQL que você pretende consultar. Como opção para esta necessidade, você poderá definir na aba "Connection Properties" na janela "New Server Registration" um banco de dados específico para esta consulta (caso contrário, você estará consultando todos os bancos de dados). Veja na imagem abaixo:

    1 - Crie o Grupo;

    2 - Adicione um novo "Server Registration" para cada instância que deseja consultar;

    2.b - Selecione ou digite o nome de um banco de dados específico;

    3 - Abra uma nova consulta, selecionando a opção "New Query" e digite a instrução SELECT que você deseja.

    Nesta demonstração eu apenas fiz um COUNT de registros de duas tabelas com o mesmo nome, que existem em dois bancos de dados diferentes, em instâncias distintas. Veja na imagem abaixo:

    A única desvantagem para sua necessidade é que esta solução é exclusiva do SSMS, e não há algo semelhante no "sqlcmd" (talvez em PowerShell).

    Para maiores informações veja:

    https://msdn.microsoft.com/pt-br/library/ms190631.aspx

    https://msdn.microsoft.com/pt-br/library/ms188231.aspx

    https://technet.microsoft.com/pt-br/library/ms173574(v=sql.105).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"


    terça-feira, 31 de março de 2015 19:06
    Moderador

Todas as Respostas

  • Para isso vc vai ter que usar o linked server:

    https://technet.microsoft.com/pt-br/library/aa174516(v=sql.80).aspx?f=255&mspperror=-2147217396

    O link é para o SQL 2000, mas vale para todas as versoes.

    outros links que podem te ajudar:

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

    http://stackoverflow.com/questions/1144051/selecting-data-from-two-different-servers-in-sql-server

    aqui esta a documentaçao do sp_addlinkedserver :

    https://msdn.microsoft.com/en-us/library/ms190479.aspx

    uma vez criado o linked server em uma das suas instancias, voce pode fazer o union (ou join) desta forma:

    select
        campo1, campo
    from
        tabelaA
    union 
    select
        campo1, campo
    from
        [OtherServerName].[OtherDB].[dbo].[tabelaA]

    onde "OtherServerName" é o linked server.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    terça-feira, 31 de março de 2015 13:41
  • Amigo,

    Do modo que o William indicou é possível você efetuar a consulta "semelhante", definindo apenas o nome do "linkedserver" e do "banco de dados". A vantagem neste caso é que você poderá utilizar essa instrução para consulta no "sqlcmd" da mesma forma que você utiliza no SSMS.

    Caso você precise realizar a mesma consulta "exatamente" da mesma forma entre duas instâncias com tabelas idêntidas cada um destes bancos de dados, então recomendo que você utilize o recurso do SSMS "multiple queries" usando a janela "Registered Servers" (menu "View" => "Registered Servers" ou teclas de atalho CTRL+ALT+G).

    Após abrir esta janela, clique com o botão direito em "Local Server Group" para obter as opções de configuração.

    Você poderá criar um novo "Server Group" e adicionar um "Server Registration" para cada instância SQL que você pretende consultar. Como opção para esta necessidade, você poderá definir na aba "Connection Properties" na janela "New Server Registration" um banco de dados específico para esta consulta (caso contrário, você estará consultando todos os bancos de dados). Veja na imagem abaixo:

    1 - Crie o Grupo;

    2 - Adicione um novo "Server Registration" para cada instância que deseja consultar;

    2.b - Selecione ou digite o nome de um banco de dados específico;

    3 - Abra uma nova consulta, selecionando a opção "New Query" e digite a instrução SELECT que você deseja.

    Nesta demonstração eu apenas fiz um COUNT de registros de duas tabelas com o mesmo nome, que existem em dois bancos de dados diferentes, em instâncias distintas. Veja na imagem abaixo:

    A única desvantagem para sua necessidade é que esta solução é exclusiva do SSMS, e não há algo semelhante no "sqlcmd" (talvez em PowerShell).

    Para maiores informações veja:

    https://msdn.microsoft.com/pt-br/library/ms190631.aspx

    https://msdn.microsoft.com/pt-br/library/ms188231.aspx

    https://technet.microsoft.com/pt-br/library/ms173574(v=sql.105).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"


    terça-feira, 31 de março de 2015 19:06
    Moderador