2011-01-20 16 views

Respuesta

6

No estoy seguro de que haya una respuesta simple a esto, y creo que las respuestas pueden variar según el tipo de replicación. Creo que deberás depender de la heurística para responderla.

Para la replicación de instantáneas, no puedo pensar en nada que pueda alegrar el juego. Obviamente, la presencia de las tablas de replicación (por ejemplo, MSreplication_objects) le dice que la replicación está ocurriendo dentro de la base de datos, pero no hay pistas específicas sobre tablas, que yo sepa.

Para la replicación transaccional (no actualización), que puede ser capaz de ir a través de MSreplication_objects (que mostrará una lista de algunos procedimientos almacenados) y luego usar sys.sql_dependencies para localizar las tablas que estén relacionados con

Para la replicación de transacciones (actualización) , se puede ver en MSsubscription_articles (o buscar la presencia de la suscripción actualizar disparadores contra la mesa)

para la réplica de mezcla, se puede ver en sysmergearticles, pero también se tendría que mirar en sysmergesubscriptions para determinar que usted' re en el lado de la suscripción.

0

La manera más simple sería crear un servidor vinculado al servidor principal y consultar la tabla [distribución]. [Dbo]. [MSarticles].

-1

Eche un vistazo a DATABASEPROPERTYEX. Tiene una opción 'IsSubscribed' que debería hacer lo que usted quiere que haga.

+0

Eso le dirá si la base de datos es suscriptora, pero no le permitirá determinar qué tablas son parte de la suscripción. Las bases de datos de suscripción pueden contener sus propias tablas que no son parte de la publicación. –

+0

Vaya ... tienes razón. Leí mal la pregunta como "cómo saber si una base de datos es suscriptora". –

3

Vaya a la base de datos del suscriptor y compruebe la tabla dbo.MSreplication_subscriptions. Si la base de datos es subscriber, encontrará esta tabla. Además, para averiguar los artículos usan esto en la base de datos subscribed

SELECT publisher,Publisher_Db,publication,article 
FROM dbo.MSreplication_objects 
0

Solía ​​idea de Damien del Incrédulo (1) para producir el código que trabajó para mí

SELECT DISTINCT 
    ot.object_id 
    ,ot.schema_id 
    ,r.publisher 
    ,r.publisher_db 
    ,r.publication 
    ,r.article 
FROM 
    dbo.MSreplication_objects R 
     INNER JOIN sys.objects so ON r.object_name = so.name AND so.type = 'P' --stored procedures 
     INNER JOIN sys.sql_dependencies dp ON so.object_id = dp.object_id 
     INNER JOIN sys.objects ot ON dp.referenced_major_id = ot.object_id --objects 
           AND r.article = ot.name 
Cuestiones relacionadas