Mirroring con servidores Vinculados

16/04/2008 - 17:11 por Carlos Goya | Informe spam
Buenas tardes,

He montado Mirroring en 2 servidores, el problema surge al llamar desde otro
servidor de SQL desde un procedimiento almacenado utilizando conexión por
servidor vinculado.

Al cambiar de principal --> Espejo me dan errores los procedimientos
almacenados:

El proveedor OLE DB "SQLNCLI" para el servidor vinculado "ServidorSQL"
devolvió el mensaje "Error no especificado".
Mens. 954, Nivel 14, Estado 1, Línea 1
No se puede abrir la base de datos "Tareas". Está actuando como base de
datos reflejada.

Como podría resolver esto???

Lo tengo con Seguridad ALTA y TESTIGO para el cambio pero el testigo
cada vez que se instalan los parches de seguridad se cambia la base de datos
de Principal a Reflejada y pierdo el servidor Vinculado.

Gracias.

Preguntas similare

Leer las respuestas

#1 Maxi Accotto
17/04/2008 - 04:46 | Informe spam
Hola, pero ojo que la base espejada no puede ser accesible a menos que este
online. Usted si la prueba la hace con la base del espejo en un stado de
mirror no podra tener acceso a ella. Si quiere tener acceso debera usar otro
metodo como por ejemplo log_shipping


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Carlos Goya" <Carlos escribió en el mensaje
de noticias:
Buenas tardes,

He montado Mirroring en 2 servidores, el problema surge al llamar desde
otro
servidor de SQL desde un procedimiento almacenado utilizando conexión por
servidor vinculado.

Al cambiar de principal --> Espejo me dan errores los procedimientos
almacenados:

El proveedor OLE DB "SQLNCLI" para el servidor vinculado "ServidorSQL"
devolvió el mensaje "Error no especificado".
Mens. 954, Nivel 14, Estado 1, Línea 1
No se puede abrir la base de datos "Tareas". Está actuando como base de
datos reflejada.

Como podría resolver esto???

Lo tengo con Seguridad ALTA y TESTIGO para el cambio pero el testigo
cada vez que se instalan los parches de seguridad se cambia la base de
datos
de Principal a Reflejada y pierdo el servidor Vinculado.

Gracias.


Respuesta Responder a este mensaje
#2 Carlos Goya
17/04/2008 - 09:36 | Informe spam
Hola Maxi,

Estamos de acuerdo que no puedo acceder a la base de datos si esta
espejada

He creado un servidor vinculado con llamada a SystemDSN para que me haga el
balanceo desde un procedimiento almacenado.

¡¡Pero tampoco funciona!! No funciona la configuración en el ODBC desde un
procedimiento almacenado, no encuentra el FailOver Partner para ir al
servidor principal.

El problema sigue siendo el mismo como acceder desde un procedimiento
almacenado y saber cual es el servidor principal para hacer la llamada
correctamente.

Ej:

- 2 servidores en mirroring ServidorSQL1 y ServidorSQL2

Ejecuto este procedimiento desde el servidor SQLexterno:

EXEC ServidorSQL1.Tareas.dbo.Ejecucion

Si esta espejado falla...

Como balanceo el procedimiento almacenado al otro servidor?

Gracias de antemano.

Un saludo, Carlos

"Maxi Accotto" wrote:

Hola, pero ojo que la base espejada no puede ser accesible a menos que este
online. Usted si la prueba la hace con la base del espejo en un stado de
mirror no podra tener acceso a ella. Si quiere tener acceso debera usar otro
metodo como por ejemplo log_shipping


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Carlos Goya" <Carlos escribió en el mensaje
de noticias:
> Buenas tardes,
>
> He montado Mirroring en 2 servidores, el problema surge al llamar desde
> otro
> servidor de SQL desde un procedimiento almacenado utilizando conexión por
> servidor vinculado.
>
> Al cambiar de principal --> Espejo me dan errores los procedimientos
> almacenados:
>
> El proveedor OLE DB "SQLNCLI" para el servidor vinculado "ServidorSQL"
> devolvió el mensaje "Error no especificado".
> Mens. 954, Nivel 14, Estado 1, Línea 1
> No se puede abrir la base de datos "Tareas". Está actuando como base de
> datos reflejada.
>
> Como podría resolver esto???
>
> Lo tengo con Seguridad ALTA y TESTIGO para el cambio pero el testigo
> cada vez que se instalan los parches de seguridad se cambia la base de
> datos
> de Principal a Reflejada y pierdo el servidor Vinculado.
>
> Gracias.
>
>

Respuesta Responder a este mensaje
#3 Enrique Catala Bañuls
17/04/2008 - 21:43 | Informe spam
Hola Carlos, si estas utilizando una versión Enterprise de SQL Server, puedes
crear un snapshot de BBDD de tu BBDD espejada y acceder a ella.

Si esta solución no se ajusta a lo que buscas, conocer el estado de una BBDD
es tan facil como preguntar al catálogo del sistema sys.database_mirroring y
ver el estado.


SELECT *
FROM sys.database_mirroring
WHERE mirroring_guid IS NOT NULL;

Un saludo.

Atentamente, Enrique Catala Bañuls


"Carlos Goya" wrote:

Hola Maxi,

Estamos de acuerdo que no puedo acceder a la base de datos si esta
espejada

He creado un servidor vinculado con llamada a SystemDSN para que me haga el
balanceo desde un procedimiento almacenado.

¡¡Pero tampoco funciona!! No funciona la configuración en el ODBC desde un
procedimiento almacenado, no encuentra el FailOver Partner para ir al
servidor principal.

El problema sigue siendo el mismo como acceder desde un procedimiento
almacenado y saber cual es el servidor principal para hacer la llamada
correctamente.

Ej:

- 2 servidores en mirroring ServidorSQL1 y ServidorSQL2

Ejecuto este procedimiento desde el servidor SQLexterno:

EXEC ServidorSQL1.Tareas.dbo.Ejecucion

Si esta espejado falla...

Como balanceo el procedimiento almacenado al otro servidor?

Gracias de antemano.

Un saludo, Carlos

"Maxi Accotto" wrote:

> Hola, pero ojo que la base espejada no puede ser accesible a menos que este
> online. Usted si la prueba la hace con la base del espejo en un stado de
> mirror no podra tener acceso a ella. Si quiere tener acceso debera usar otro
> metodo como por ejemplo log_shipping
>
>
> Microsoft MVP SQLServer
> www.sqltotalconsulting.com
> -
>
> "Carlos Goya" <Carlos escribió en el mensaje
> de noticias:
> > Buenas tardes,
> >
> > He montado Mirroring en 2 servidores, el problema surge al llamar desde
> > otro
> > servidor de SQL desde un procedimiento almacenado utilizando conexión por
> > servidor vinculado.
> >
> > Al cambiar de principal --> Espejo me dan errores los procedimientos
> > almacenados:
> >
> > El proveedor OLE DB "SQLNCLI" para el servidor vinculado "ServidorSQL"
> > devolvió el mensaje "Error no especificado".
> > Mens. 954, Nivel 14, Estado 1, Línea 1
> > No se puede abrir la base de datos "Tareas". Está actuando como base de
> > datos reflejada.
> >
> > Como podría resolver esto???
> >
> > Lo tengo con Seguridad ALTA y TESTIGO para el cambio pero el testigo
> > cada vez que se instalan los parches de seguridad se cambia la base de
> > datos
> > de Principal a Reflejada y pierdo el servidor Vinculado.
> >
> > Gracias.
> >
> >
>
Respuesta Responder a este mensaje
#4 Carlos Goya
18/04/2008 - 14:28 | Informe spam
Hola Enrique,

No me sierve ya que necesitaria cambiar el servidor vinculado

Pero con esto lo solucionamos... conseguimos saber si el servidor funciona y
cual es el Principal y Espejado Espero que os sirva de ayuda a otros:

Create PROCEDURE [dbo].[EXP_REVINCULA_DB01]
AS

/****************************************************************
EXP_REVINCULA_DB01

El objetivo de este procedimiento almacenado es conseguir que el servidor
ExternoSQL,
automáticamente crea un servidor vinculado al servidor de operativo en ese
momento.
de modo, que los procesos que se lanzan desde ExternoSQL hasta los
servidores que soporten sin problemas
el mirroring.

Resumen: Crea el servidor vinculado ServidorSQL apuntando a
192.168.1.6.(ServidorSQL01)
o 192.168.1.7.(ServidorSQL02), dependiendo de qué servidor esté
operativo
y de que la base de datos de intercambio esté ONLINE (Si las bases
de datos
están en mirroring la principal estará ONLINE y la Reflejada estárá
en RESTORING)

Si el servidor vinculado apunta al servidor que está levantado y la base de
datos
Intercambio está ONLINE, no es necesario revincular y por tanto no se hace
nada.

Si ambos servidores no están accesibles tampoco vale la pena revincular y no
se revincula


IMPORTANTE:
En ExternoSQL deben existir dos servidores vinculados:
192.168.1.6 apuntado a 192.168.1.6 (ServidorSQL01)
y
192.168.1.7 apuntado a 192.168.1.6 (ServidorSQL02)
para que este procedimiento funcione correctamente.
****************************************************************/


declare @Ping char(1)
declare @EstadoBBDD varchar(50)
declare @Data_Source varchar(4000)

set nocount on

exec @Ping = master.dbo.xp_cmdshell 'ping -n 1 192.168.1.6',no_output --
Valores devueltos: @ping = 0 (correcto) o 1 (error)
if @Ping = 0
begin -- 1*
set @EstadoBBDD = ''
select @EstadoBBDD= state_desc from [192.168.1.6].master.sys.databases
where name ='BasedeDatos'
if @EstadoBBDD = 'ONLINE'
begin -- 3*
select @Data_Source = Data_Source from master.sys.servers where
name = 'ServidorSQL' -- Dónde apunta el servidor vinculado
if @Data_Source <> '192.168.1.6' and @Data_Source <>
'ServidorSQL01'
begin -- 5*
(ServidorSQL01) que hace ping y tiene las bbdd ONLINE
/*** VINCULAMOS EL SERVIDOR 192.168.1.6
****************************************************************/
if exists (select * from master.sys.servers where name=
'ServidorSQL') EXEC sp_dropserver 'ServidorSQL','droplogins'
EXEC master.dbo.sp_addlinkedserver @server =
N'ServidorSQL', @srvproduct=N'SQLNCLI', @provider=N'SQLNCLI',
@datasrc=N'192.168.146.6', @catalog=N'master'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'collation compatible', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'rpc out', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'connect timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'collation name', @optvalue=null
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'query timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'use remote collation', @optvalue=N'true'
N'ServidorSQL', @locallogin = NULL , @useself = N'False'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname =
N'ServidorSQL', @locallogin = NULL , @useself = N'False',
@rmtuser = N'sa', @rmtpassword = N'xxxxxxx'

/***************************************************************************************************************/
end -- 5*
end -- 3*
else
begin -- 4*
EXEC BBDD.dbo.EXP_REVINCULA_DB02 -- Intentamos revincular hacia
192.168.1.7 (ServidorSQL02)
end -- 4*
end -- 1*
else
begin -- 2*
EXEC BBDD.dbo.EXP_REVINCULA_DB02 -- Intentamos revincular hacia
192.168.1.7 (ServidorSQL02)
end -- 2*



Create PROCEDURE [dbo].[EXP_REVINCULA_DB02]
AS

/****************************************************************
Este procedimiento forma parte de una estructura más amplia, es llamado por
el proced.
almacenado EXP_REVINCULA_DB01.


EXP_REVINCULA_DB02

Resumen: Crea un el servidor vinculado ServidorSQL apuntando a
192.168.1.7.(ServidorSQL02)
¡¡¡OJO!!! Antes desde el proc.alm. EXP_REVINCULA_DB01 se ha
intentado crear el
mismo servidor vinculado pero apuntando a 192.168.1.6.(ServidorSQL01)
Sólo al fracasar en este intento se llama a este proc.alm.

Detalle.:
Testea mediante un ping el servidor 192.168.1.7 y comprueba el estado de la
base de
datos "BasedeDatos". Si el ping es ok y la base de datos está ONLINE y el
servidor vinculado
no apunta a 192.168.1.7, se borra el servidor vinculado ServidorSQL y se
vuelve a crear
apuntando a 192.168.1.7
****************************************************************/

declare @Ping char(1)
declare @EstadoBBDD varchar(50)
declare @Data_Source varchar(4000)

set nocount on

exec @Ping = master.dbo.xp_cmdshell 'ping -n 1 192.168.1.7',no_output --
Valores devueltos: @ping = 0 (correcto) o 1 (error)

if @Ping = 0
begin -- 1*
set @EstadoBBDD = ''
select @EstadoBBDD= state_desc from [192.168.1.7].master.sys.databases
where name ='BasedeDatos'
if @EstadoBBDD = 'ONLINE'
begin -- 2*
select @Data_Source = Data_Source from master.sys.servers where
name = 'ServidorSQL' -- Dónde apunta el servidor vinculado
if @Data_Source <> '192.168.1.7' and @Data_Source <>
'ServidorSQL02'
begin -- 3*

/*** VINCULAMOS EL SERVIDOR 192.168.1.7
****************************************************************/
if exists (select * from master.sys.servers where name=
'ServidorSQL') EXEC sp_dropserver 'ServidorSQL','droplogins'
192.168.1.7
EXEC master.dbo.sp_addlinkedserver @server =
N'ServidorSQL', @srvproduct=N'SQLNCLI', @provider=N'SQLNCLI',
@datasrc=N'192.168.1.7', @catalog=N'master'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'collation compatible', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'rpc out', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'connect timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'collation name', @optvalue=null
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'query timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'ServidorSQL',
@optname=N'use remote collation', @optvalue=N'true'
N'ServidorSQL', @locallogin = NULL , @useself = N'False'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname =
N'ServidorSQL', @locallogin = NULL , @useself = N'False',
@rmtuser = N'sa', @rmtpassword = N'xxxxxxxx'

/***************************************************************************************************************/
end -- 3*
end -- 2*
end -- 1*



"Enrique Catala Bañuls" wrote:

Hola Carlos, si estas utilizando una versión Enterprise de SQL Server, puedes
crear un snapshot de BBDD de tu BBDD espejada y acceder a ella.

Si esta solución no se ajusta a lo que buscas, conocer el estado de una BBDD
es tan facil como preguntar al catálogo del sistema sys.database_mirroring y
ver el estado.


SELECT *
FROM sys.database_mirroring
WHERE mirroring_guid IS NOT NULL;

Un saludo.

Atentamente, Enrique Catala Bañuls


"Carlos Goya" wrote:

> Hola Maxi,
>
> Estamos de acuerdo que no puedo acceder a la base de datos si esta
> espejada
>
> He creado un servidor vinculado con llamada a SystemDSN para que me haga el
> balanceo desde un procedimiento almacenado.
>
> ¡¡Pero tampoco funciona!! No funciona la configuración en el ODBC desde un
> procedimiento almacenado, no encuentra el FailOver Partner para ir al
> servidor principal.
>
> El problema sigue siendo el mismo como acceder desde un procedimiento
> almacenado y saber cual es el servidor principal para hacer la llamada
> correctamente.
>
> Ej:
>
> - 2 servidores en mirroring ServidorSQL1 y ServidorSQL2
>
> Ejecuto este procedimiento desde el servidor SQLexterno:
>
> EXEC ServidorSQL1.Tareas.dbo.Ejecucion
>
> Si esta espejado falla...
>
> Como balanceo el procedimiento almacenado al otro servidor?
>
> Gracias de antemano.
>
> Un saludo, Carlos
>
> "Maxi Accotto" wrote:
>
> > Hola, pero ojo que la base espejada no puede ser accesible a menos que este
> > online. Usted si la prueba la hace con la base del espejo en un stado de
> > mirror no podra tener acceso a ella. Si quiere tener acceso debera usar otro
> > metodo como por ejemplo log_shipping
> >
> >
> > Microsoft MVP SQLServer
> > www.sqltotalconsulting.com
> > -
> >
> > "Carlos Goya" <Carlos escribió en el mensaje
> > de noticias:
> > > Buenas tardes,
> > >
> > > He montado Mirroring en 2 servidores, el problema surge al llamar desde
> > > otro
> > > servidor de SQL desde un procedimiento almacenado utilizando conexión por
> > > servidor vinculado.
> > >
> > > Al cambiar de principal --> Espejo me dan errores los procedimientos
> > > almacenados:
> > >
> > > El proveedor OLE DB "SQLNCLI" para el servidor vinculado "ServidorSQL"
> > > devolvió el mensaje "Error no especificado".
> > > Mens. 954, Nivel 14, Estado 1, Línea 1
> > > No se puede abrir la base de datos "Tareas". Está actuando como base de
> > > datos reflejada.
> > >
> > > Como podría resolver esto???
> > >
> > > Lo tengo con Seguridad ALTA y TESTIGO para el cambio pero el testigo
> > > cada vez que se instalan los parches de seguridad se cambia la base de
> > > datos
> > > de Principal a Reflejada y pierdo el servidor Vinculado.
> > >
> > > Gracias.
> > >
> > >
> >
Respuesta Responder a este mensaje
#5 Maxi Accotto
18/04/2008 - 14:51 | Informe spam
Hola, una base espejada no la podes acceder. Porque has seleccionado mirror?
que buscas exactamente hacer? ojo que SQL no tiene balanceo de carga


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Carlos Goya" escribió en el mensaje
de noticias:
Hola Maxi,

Estamos de acuerdo que no puedo acceder a la base de datos si esta
espejada

He creado un servidor vinculado con llamada a SystemDSN para que me haga
el
balanceo desde un procedimiento almacenado.

¡¡Pero tampoco funciona!! No funciona la configuración en el ODBC desde un
procedimiento almacenado, no encuentra el FailOver Partner para ir al
servidor principal.

El problema sigue siendo el mismo como acceder desde un procedimiento
almacenado y saber cual es el servidor principal para hacer la llamada
correctamente.

Ej:

- 2 servidores en mirroring ServidorSQL1 y ServidorSQL2

Ejecuto este procedimiento desde el servidor SQLexterno:

EXEC ServidorSQL1.Tareas.dbo.Ejecucion

Si esta espejado falla...

Como balanceo el procedimiento almacenado al otro servidor?

Gracias de antemano.

Un saludo, Carlos

"Maxi Accotto" wrote:

Hola, pero ojo que la base espejada no puede ser accesible a menos que
este
online. Usted si la prueba la hace con la base del espejo en un stado de
mirror no podra tener acceso a ella. Si quiere tener acceso debera usar
otro
metodo como por ejemplo log_shipping


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Carlos Goya" <Carlos escribió en el
mensaje
de noticias:
> Buenas tardes,
>
> He montado Mirroring en 2 servidores, el problema surge al llamar desde
> otro
> servidor de SQL desde un procedimiento almacenado utilizando conexión
> por
> servidor vinculado.
>
> Al cambiar de principal --> Espejo me dan errores los procedimientos
> almacenados:
>
> El proveedor OLE DB "SQLNCLI" para el servidor vinculado "ServidorSQL"
> devolvió el mensaje "Error no especificado".
> Mens. 954, Nivel 14, Estado 1, Línea 1
> No se puede abrir la base de datos "Tareas". Está actuando como base de
> datos reflejada.
>
> Como podría resolver esto???
>
> Lo tengo con Seguridad ALTA y TESTIGO para el cambio pero el
> testigo
> cada vez que se instalan los parches de seguridad se cambia la base de
> datos
> de Principal a Reflejada y pierdo el servidor Vinculado.
>
> Gracias.
>
>

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida