2011-01-20 26 views
6

Trong SQL Server, trên "bên đăng ký", làm thế nào bạn có thể biết nếu một bảng đang được nhân rộng/đăng ký?Máy chủ SQL: đăng ký: làm thế nào để biết nếu một bảng đang được sao chép/đăng ký

Bất kỳ ý tưởng nào?

+0

Tôi vừa mới được xây dựng và rách xuống sao chép nhiều lần để thử và tìm thấy một số câu trả lời, và tôi vẫn không hài lòng với những gì tôi đã đăng: - | –

Trả lời

6

Tôi không chắc chắn có một câu trả lời đơn giản cho điều này và tôi nghĩ rằng các câu trả lời có thể khác nhau dựa trên loại nhân rộng. Tôi nghĩ rằng bạn có thể phải dựa vào chẩn đoán để trả lời nó.

Để sao chụp nhanh, tôi không thể nghĩ ra bất kỳ thứ gì có thể cung cấp cho trò chơi. Rõ ràng, sự hiện diện của các bảng sao chép (ví dụ: MSreplication_objects) cho bạn biết rằng bản sao đang xảy ra trong cơ sở dữ liệu, nhưng không có bất kỳ manh mối cụ thể nào về các bảng, cho đến khi tôi biết.

Đối với nhân rộng giao dịch (không cập nhật), bạn có thể đi qua MSreplication_objects (mà sẽ liệt kê một số procs lưu trữ) và sau đó sử dụng sys.sql_dependencies để xác định vị trí các bảng rằng những liên quan đến

Đối với sao chép giao dịch (cập nhật) , bạn có thể tìm trong MSsubscription_articles (hoặc tìm kiếm sự hiện diện của các thuê bao cập nhật trigger chống lại bảng)

đối với bản sao hợp nhất, bạn có thể tìm trong sysmergearticles, nhưng bạn cũng sẽ phải nhìn vào sysmergesubscriptions để xác định rằng bạn' ở bên đăng ký.

0

Cách đơn giản nhất là tạo máy chủ được liên kết đến máy chủ chính và truy vấn bảng [phân phối]. [Dbo]. [MSarticles].

-1

Hãy xem DATABASEPROPERTYEX. Nó có một tùy chọn 'IsSubscribed' mà nên làm những gì bạn muốn nó làm.

+0

Điều đó sẽ cho bạn biết nếu cơ sở dữ liệu là người đăng ký, nhưng sẽ không cho phép bạn xác định bảng nào là một phần của đăng ký. Cơ sở dữ liệu đăng ký có thể chứa các bảng của riêng chúng mà không phải là một phần của ấn phẩm. –

+0

Rất tiếc ... bạn đã đúng. Tôi hiểu sai câu hỏi là "làm thế nào để biết cơ sở dữ liệu có phải là người đăng ký" hay không. –

3

Chuyển đến kiểm tra cơ sở dữ liệu thuê bao cho bảng dbo.MSreplication_subscriptions. Nếu cơ sở dữ liệu là subscriber, bạn sẽ tìm thấy bảng này. Ngoài ra, để tìm hiểu các bài báo sử dụng này trong cơ sở dữ liệu subscribed

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

tôi đã sử dụng ý tưởng của Damien tin Chúa (1) để tạo ra mã này mà làm việc cho tôi

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 
Các vấn đề liên quan