Những bảng nào bị ảnh hưởng bởi Change Data Capture


7

Chúng tôi đang xem xét sử dụng Change Data Capture trong SQL 2012. Chúng tôi đang cố gắng tìm ra nếu có một cách dễ dàng để tìm ra những bảng nào đã được thay đổi bởi một lsn nhất định. Có một hàm sẵn có, hoặc chúng ta sẽ cần truy vấn từng bảng cdc để xem lsn có ở đó không?

CẬP NHẬT để giải thích thêm một chút về những gì chúng tôi đang cố gắng làm:

Chúng tôi đang cố gắng xây dựng một quy trình xem dữ liệu cdc cho tất cả các bảng trong cơ sở dữ liệu (nghĩ 100). Quá trình này sẽ chạy theo lịch trình và sẽ biết lsn cuối cùng mà nó đã xử lý. Khi nó chạy, chúng tôi muốn làm một cái gì đó với mỗi bảng cdc đã có sự thay đổi kể từ lần ghi cuối cùng .

Chúng tôi có thể kiểm tra fn_cdc_get_all_changes_dbo_tablename(@lastlsn, @currentlsn, 'all'), nhưng vấn đề với điều đó là chúng tôi sẽ phải chạy nó 100 lần (một lần cho mỗi bảng). Có một nơi trung tâm chúng ta có thể kiểm tra?

Câu trả lời:


3

Đầu tiên bạn phải kích hoạt CDC ở mức cơ sở dữ liệu.

USE database_name
GO 
EXEC sys.sp_cdc_enable_db 
GO 

Sau đó, bạn phải kích hoạt CDC ở cấp độ bảng

USE database_name
GO 
EXEC sys.sp_cdc_enable_table 
@source_schema = N'dbo', 
@source_name   = N'table1', 
@role_name     = NULL 

Dưới đây truy vấn sẽ cho bạn biết những bảng nào đã bật cdc

SELECT [name], is_tracked_by_cdc  
FROM sys.tables 

cập nhật:

Những gì tôi đang cố gắng tìm là cho một Lsn nhất định, bảng cdc nào có bản ghi

Tôi đoán điều này không liên quan, vì khi kích hoạt CDC, bạn sẽ có

__ $ start_lsn

__ $ end_lsn

__ $ seqval

__ $ hoạt động

__ $ update_mask

Các __$start_lsn__$end_lsnsẽ tương ứng với bảng riêng của mình rằng bạn đã kích hoạt CDC ON.

Tôi không thấy bạn cần phải thực hiện tìm kiếm bảng dựa trên LSN để tìm ra tên bảng - trừ khi tôi không hiểu câu hỏi của bạn.

Bạn thậm chí có thể tra cứu trong các bảng hệ thống

cdc.captured_columns

cdc.change_tables

cdc.ddl_history

cdc.index_columns

cdc.lsn_time_mapping => Trả về một hàng cho mỗi giao dịch có các hàng trong bảng thay đổi. Bảng này được sử dụng để ánh xạ giữa các giá trị cam kết số thứ tự nhật ký (LSN) và thời gian giao dịch được cam kết.

dbo.systranschemas

Đọc lên: Giới thiệu về SQL Server 2008 Change Data Capture của Brad McGeheeGiới thiệu về Change Data Capture (CDC) trong SQL Server 2008 của Pinal Dave.


Xin lỗi, tôi có lẽ không đủ rõ ràng trong câu hỏi. Những gì tôi đang cố gắng tìm là cho một Lsn nhất định, bảng cdc có bản ghi
Greg

@Greg Tôi đã cập nhật câu trả lời của tôi.
Kin Shah

Tôi đã thêm một số thông tin cho câu hỏi có thể làm cho nó rõ ràng hơn một chút. Chúng tôi đang cố gắng tìm một phạm vi cụ thể trên cơ sở dữ liệu khi chúng tôi không biết họ đang ở đâu
Greg

1
Downvoters ... Xin vui lòng để lại nhận xét tại sao câu trả lời đã được bỏ phiếu?
Kin Shah

0

Như đã đề cập trong câu hỏi, chúng tôi đang cố gắng truy vấn nhiều bảng cdc và áp dụng một quy trình tương tự cho tất cả các bảng. Cách duy nhất để làm điều này là bằng cách truy vấn từng bảng riêng lẻ (sử dụng fn_cdc_get_all_changes_dbo_tablenamehàm), không có vị trí trung tâm để kiểm tra những gì đã thay đổi.


1
Bạn chỉ nên sử dụng tsql động trên bộ sys.tableslọc is_tracked_by_cdcvà sử dụng hàm để truy vấn những gì đã thay đổi.
Kin Shah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.