none
Consulta entre dos instancias con diferente autenticación RRS feed

  • Pregunta

  • hola. tengo una pregunta:

    en la empresa donde laboro, el servidor cuenta con dos instancias de SQL Server 2008 R2

    instancia1: BD1 autenticación mediante usuario y contraseña

    instancia2: BD2 autenticación de windows

    quisiera saber cómo crear la consulta. he intentado varias formas, linkeando el servidor, pero me dice que ya existe la conexión. encontré otra opción que se llema servidores registrados, pero no puedo llamarlo en mi consulta principal.

    ya he probado también  SERVIDOR\INSTANCIA\BASE DE DATOS\TABLA pero me dice que no se encuentra el nombre del servidor

    alguien que me ayude por favor

    lunes, 21 de mayo de 2018 17:17

Respuestas

  • Si quieres hacer una única consulta que abarque a dos instancias, tienes que configurar un "servidor vinculado" que permita a una instancia enviar consultas a la otra. Ese "vínculo" permite configurarle el modo de autenticación, por lo que puedes dejarle grabadas unas credenciales que sean reconocidas por el servidor de destino.

    La conexión la abres a la instancia que contiene el vínculo, usando el tipo de autenticación comprendido por dicha instancia.

    Y luego, a través de esa conexión, escribes las tablas usando un nombre de cuatro partes:

    Select ... from enlace.baseDeDatos.esquema.tabla ...

    Siendo "enlace" el nombre que tiene ese vínculo que antes creaste entre los dos servidores.

    • Propuesto como respuesta webJose miércoles, 23 de mayo de 2018 2:05
    • Marcado como respuesta Pablo RubioModerator lunes, 8 de octubre de 2018 15:40
    lunes, 21 de mayo de 2018 17:47
  • Hola ObedCampos:

    Antes de hacer nada en master, te recomiendo, que hagas una copia de seguridad por si acaso, para que ocurra lo que ocurra estes siempre a buen recaudo.

    Lo segundo, si el servidor esta en producción, antes de aplicar ningún cambio, valora lo que haces, y los riesgos.

    Y si ya estas seguro, pero tienes que estar seguro, de que ese servidor no lo usas para replicar nada, puedes probar esto.

    https://www.sqlservercentral.com/Forums/Topic642850-338-1.aspx

    Un saludo

    martes, 22 de mayo de 2018 15:36
  • Para obtener la consulta que necesitas primero debes vincular tu servidor 
    -- para hacer el vinculo puedes realizar lo siguiente
    
    EXEC SP_ADDLINKEDSERVER
    @server = 'NOMBRE_DEL_SERVER_VINCULADO',
    @srvproduct = '',
    @provider = 'MSDASQL',
    @provstr = 'DRIVER={SQL Server};SERVER=SERVIDORAVINCULAR;UID=USUARIO(sa);PWD=CONTRASEÑA'
    
    -- tu consulta a ejecutar quedaria de la siguiente forma
    
    SELECT T1.*,T2.*
    FROM ServerLocal.Basededatos.Esquema.Tabla T1
        JOIN NOMBRE_DEL_SERVER_VINCULADO.Basededatos.Esquema.Tabla T2 ON t1.ID = T2ID
    


    Damian C M

    lunes, 21 de mayo de 2018 17:59
  • Hola ObedCampos:

    Instancia 1 WS-149

    Instancia 2: WS-149\ESTUDIO2017.

    Cuando creas el servidor vinculado, en Seguridad es donde estableces el tipo de autenticación.

    ejecución de consulta.

    lunes, 21 de mayo de 2018 18:03
  • estoy intentando crear el vínculo, pero en la cadena del proveedor no es con el usuario sa, sino con autenticación de windows.

    cuando le doy aceptar me dice: excepción al ejecutar una instrucción o un proceso por lotes Transact-SQL

    the server 'COMPAC' already exists

    lunes, 21 de mayo de 2018 18:07
  • Hola ObedCampos:

    El error de que el server 'XX' already exits, indica que ya esta registrado (bien o mal).

    Verifícalo de este modo.

    Conectate a la instancia 1 y ejecuta

    use [master]
    go
    select * from sys.servers

    Te devolverá un registro server_id 0 que corresponde a la instancia donde estas, y si te devuelve más registros, probablemente uno que se llama COMPAC, que en una columna dispone de la marca IS_LINKED = 1

    Solo por recabar datos, antes de hacer nada, realiza la misma operación en la otra instancia.

    Si aparece, tienes que eliminar ese servidor vinculado

    exec sp_dropserver @server='NOMBRE'

    https://docs.microsoft.com/es-es/sql/relational-databases/system-stored-procedures/sp-dropserver-transact-sql?view=sql-server-2017

    Una vez eliminado, ya puedes volver a intentarlo.

    Un saludo

    hola amigo, ejecute el comando y me aparecieron varios servidores, ya los eliminé y dejé el server_id 0 y 1 que lo uso con MySQL, pero me queda uno que se llama precisamente COMPAC, ejecuto el comando 

    exec sp_dropserver @server='COMPAC' y me muestra el siguiente error

    Mens 20581, Nivel 16, Estado 1, Procedimiento sp_MSrepl_check_server, Línea 22
    Cannot drop server 'COMPAC' because it is used as a Distributor in replication.

    entonces intento ejecutar un UPDATE

    UPDATE sys.servers
    SET is_distributor = '0'
    WHERE name = 'COMPAC'

    y me muestra el siguiente mensaje

    Mens. 259, Nivel 16, Estado 1, Línea 1
    Ad hoc updates to system catalogs are not allowed.

    martes, 22 de mayo de 2018 14:31

Todas las respuestas

  • Si quieres hacer una única consulta que abarque a dos instancias, tienes que configurar un "servidor vinculado" que permita a una instancia enviar consultas a la otra. Ese "vínculo" permite configurarle el modo de autenticación, por lo que puedes dejarle grabadas unas credenciales que sean reconocidas por el servidor de destino.

    La conexión la abres a la instancia que contiene el vínculo, usando el tipo de autenticación comprendido por dicha instancia.

    Y luego, a través de esa conexión, escribes las tablas usando un nombre de cuatro partes:

    Select ... from enlace.baseDeDatos.esquema.tabla ...

    Siendo "enlace" el nombre que tiene ese vínculo que antes creaste entre los dos servidores.

    • Propuesto como respuesta webJose miércoles, 23 de mayo de 2018 2:05
    • Marcado como respuesta Pablo RubioModerator lunes, 8 de octubre de 2018 15:40
    lunes, 21 de mayo de 2018 17:47
  • Para obtener la consulta que necesitas primero debes vincular tu servidor 
    -- para hacer el vinculo puedes realizar lo siguiente
    
    EXEC SP_ADDLINKEDSERVER
    @server = 'NOMBRE_DEL_SERVER_VINCULADO',
    @srvproduct = '',
    @provider = 'MSDASQL',
    @provstr = 'DRIVER={SQL Server};SERVER=SERVIDORAVINCULAR;UID=USUARIO(sa);PWD=CONTRASEÑA'
    
    -- tu consulta a ejecutar quedaria de la siguiente forma
    
    SELECT T1.*,T2.*
    FROM ServerLocal.Basededatos.Esquema.Tabla T1
        JOIN NOMBRE_DEL_SERVER_VINCULADO.Basededatos.Esquema.Tabla T2 ON t1.ID = T2ID
    


    Damian C M

    lunes, 21 de mayo de 2018 17:59
  • Hola ObedCampos:

    Instancia 1 WS-149

    Instancia 2: WS-149\ESTUDIO2017.

    Cuando creas el servidor vinculado, en Seguridad es donde estableces el tipo de autenticación.

    ejecución de consulta.

    lunes, 21 de mayo de 2018 18:03
  • estoy intentando crear el vínculo, pero en la cadena del proveedor no es con el usuario sa, sino con autenticación de windows.

    cuando le doy aceptar me dice: excepción al ejecutar una instrucción o un proceso por lotes Transact-SQL

    the server 'COMPAC' already exists

    lunes, 21 de mayo de 2018 18:07
  • al intentar hacer el vínculo me marca que el servidor ya existe. supongo que es porque no está en otro servidor, sino en una instancia en el mismo servidor; o al menos eso entiendo
    lunes, 21 de mayo de 2018 18:09
  • Mi ejemplo es en el mismo servidor.

    Pega la ventana del servidor, porque eso de excepcion al ejecutar una instrucción, supongo que te dará más detalles.

    Un saludo

    lunes, 21 de mayo de 2018 18:48
  • eso intento poner las imagenes pero la pagina me dice que no se puede hasta que se verifique mi cuenta

    lunes, 21 de mayo de 2018 20:47
  • Hola ObedCampos:

    El error de que el server 'XX' already exits, indica que ya esta registrado (bien o mal).

    Verifícalo de este modo.

    Conectate a la instancia 1 y ejecuta

    use [master]
    go
    select * from sys.servers

    Te devolverá un registro server_id 0 que corresponde a la instancia donde estas, y si te devuelve más registros, probablemente uno que se llama COMPAC, que en una columna dispone de la marca IS_LINKED = 1

    Solo por recabar datos, antes de hacer nada, realiza la misma operación en la otra instancia.

    Si aparece, tienes que eliminar ese servidor vinculado

    exec sp_dropserver @server='NOMBRE'

    https://docs.microsoft.com/es-es/sql/relational-databases/system-stored-procedures/sp-dropserver-transact-sql?view=sql-server-2017

    Una vez eliminado, ya puedes volver a intentarlo.

    Un saludo

    martes, 22 de mayo de 2018 4:21
  • Hola ObedCampos:

    El error de que el server 'XX' already exits, indica que ya esta registrado (bien o mal).

    Verifícalo de este modo.

    Conectate a la instancia 1 y ejecuta

    use [master]
    go
    select * from sys.servers

    Te devolverá un registro server_id 0 que corresponde a la instancia donde estas, y si te devuelve más registros, probablemente uno que se llama COMPAC, que en una columna dispone de la marca IS_LINKED = 1

    Solo por recabar datos, antes de hacer nada, realiza la misma operación en la otra instancia.

    Si aparece, tienes que eliminar ese servidor vinculado

    exec sp_dropserver @server='NOMBRE'

    https://docs.microsoft.com/es-es/sql/relational-databases/system-stored-procedures/sp-dropserver-transact-sql?view=sql-server-2017

    Una vez eliminado, ya puedes volver a intentarlo.

    Un saludo

    hola amigo, ejecute el comando y me aparecieron varios servidores, ya los eliminé y dejé el server_id 0 y 1 que lo uso con MySQL, pero me queda uno que se llama precisamente COMPAC, ejecuto el comando 

    exec sp_dropserver @server='COMPAC' y me muestra el siguiente error

    Mens 20581, Nivel 16, Estado 1, Procedimiento sp_MSrepl_check_server, Línea 22
    Cannot drop server 'COMPAC' because it is used as a Distributor in replication.

    entonces intento ejecutar un UPDATE

    UPDATE sys.servers
    SET is_distributor = '0'
    WHERE name = 'COMPAC'

    y me muestra el siguiente mensaje

    Mens. 259, Nivel 16, Estado 1, Línea 1
    Ad hoc updates to system catalogs are not allowed.

    martes, 22 de mayo de 2018 14:31
  • Hola ObedCampos:

    Antes de hacer nada en master, te recomiendo, que hagas una copia de seguridad por si acaso, para que ocurra lo que ocurra estes siempre a buen recaudo.

    Lo segundo, si el servidor esta en producción, antes de aplicar ningún cambio, valora lo que haces, y los riesgos.

    Y si ya estas seguro, pero tienes que estar seguro, de que ese servidor no lo usas para replicar nada, puedes probar esto.

    https://www.sqlservercentral.com/Forums/Topic642850-338-1.aspx

    Un saludo

    martes, 22 de mayo de 2018 15:36