- vừa được xem lúc

Giới thiệu về Change Data Capture

0 0 45

Người đăng: Huyền Trang

Theo Viblo Asia

Hiện tại, có nhiều cách để thực hiện việc lưu lại change data khi thực hiện Insert, Update, Delete như : triggers , so sánh bảng nguồn và bảng đích, cdc, change tracking, Row version, time stamps,… Mỗi solution đều có ưu và nhược điểm, và nhà phát triển cần lựa chọn cho phù hợp với từng hệ thống Tài liệu này sẽ giới thiệu về cdc

  1. Cơ chế hoạt động

Khi enable cdc, ta sẽ có 2 job. 1 capture job thực hiện ghi nhận thay đổi và 1 clean job thực hiện clear log thay đổi, để tránh quá tải hệ thống

Thứ nhất là Job capture:
Job này sẽ thực hiện exec sp sys.sp_MScdc_capture_job để xác định parameter sau:

Continuous (default 1): 1 nếu capture job cấu hình chạy liên tục, 0 nếu chỉ chạy 1 lần

Maxtrans (default 500): số lượng transaction tối đa trong mỗi lượt scan log

Maxscans (default 10): số lượt scan log trong mỗi scan phase trước khi pausing (nếu continuous = 1) hoặc ngừng hẳn ( nếu continuous = 0)

Pollinginterval (default 5): thời gian pausing (giây) giữa mỗi scan phase

Sau khi xác định các param thì exec sp sys.sp_cdc_scan. Sp này thực hiện 2 việc là exec sp sys.sp_replcmds để đọc log, và insert log vào các bảng cdc. Mỗi lần thực hiện xong 2 việc trên là 1 lần scan maxtrans hay còn gọi là 1 log scan session

Vì Capture Process (đọc log và viết log ra bảng cdc) đọc dữ liệu từ transaction log, nên sẽ có độ trễ giữa thời điểm transaction xảy ra và thời điểm Capture Process ghi nhận thay đổi cũng như thời điểm log được ghi nhận trên cdc.table_CT. Ta sẽ nói rõ hơn về việc tối ưu độ trễ ở mục cấu hình job cdc ở phần dưới

Với Cleanup Job: thực hiện clean các bảng change table và mặc định là chạy định kì lúc 2h sáng để change data chỉ lưu tối đa 3 ngày. Job này sẽ được cấu hình bởi 2 tham số

Retention: thời gian(phút) bản ghi log được lưu lại trên bảng cdc

Threshold: số lượng tối đa bản ghi log trên bảng cdc bị delete ở mỗi lươt cleanup. Mỗi lần clean job chạy, sẽ có nhiều lượt cleanup để đảm bảo giá trị Retention

  1. Cấu hình cdc

Để enble cdc, ta thực hiện enable cdc trên database và trên table mà ta muốn capture change data USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO
USE MyDB
GO

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@role_name = N'MyRole',
@filegroup_name = N'MyDB_CT',
@supports_net_changes = 1
GO
Để kiểm tra các tham số cấu hình job, ta select ở bảng msdb.dbo.cdc_jobs

Để thay đổi các tham số trên, ta thực hiện câu lệnh sau:

EXEC sp_cdc_change_job @job_type='capture', @maxtrans = 500, @maxscans = 10, @continuous = 1, @pollinginterval = 5

EXEC sp_cdc_change_job @job_type='cleanup', @retention = 4320, @threshold = 5000

Chú ý: sau khi setup lại các tham số trên, cần stop và start lại capture job

Để disable cdc trên bảng hoặc trên cả database USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO
USE MyDB
GO
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@capture_instance = N'dbo_MyTable'
GO
3. Kết luận

Như vậy, ta đã nắm được cơ chế hoạt động và cách cấu hình cdc. Ở bài tiếp theo, chúng ta sẽ tìm hiểu cách tối ưu các tham số trong cdc

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Stored Procedure trong SQL Server

Stored Procedure là 1 phần không thể thiếu của SQL Server. Chúng có thể hỗ trợ rất nhiều cho lập trình và cấu hình cơ sở dữ liệu.

0 0 134

- vừa được xem lúc

sử dụng index trong sql query

Index là một trong những yếu tố quan trọng nhất góp phần vào việc nâng cao hiệu suất của cơ sở dữ liệu. Index trong SQL tăng tốc độ của quá trình truy vấn dữ liệu bằng cách cung cấp phương pháp truy xuất nhanh chóng tới các dòng trong các bảng, tương tự như cách mà mục lục của một cuốn sách giúp bạn

0 0 178

- vừa được xem lúc

Hướng dẫn sửa lỗi không cài được SQL Server

Hôm qua do yêu cầu môn học, mình có cài lại Microsoft SQL Server. Trước đó mình có cài rồi, nhưng rồi lâu không dùng nên gỡ ra cho nhẹ máy. Bây giờ có dịp cần nên mình mới cài lại. Chi tiết lỗi mình gặp phải.

0 0 119

- vừa được xem lúc

Bạn nên tránh sử dụng Soft Delete khi có thể, và đây là lý do tại sao

Con người luôn luôn mắc sai lầm. Vì vậy, việc "lo xa" trước mọi tình huống xấu nhất chưa bao giờ là thừa.

0 0 126

- vừa được xem lúc

Sử dụng trigger trong SQL qua ví dụ cơ bản.

Trigger là gì . Cú pháp của Trigger. CREATE TRIGGER tên_trigger ON tên_bảng. FOR {DELETE, INSERT, UPDATE}.

0 0 144

- vừa được xem lúc

Khác biệt giữa khóa chính và khóa ngoại trong SQL

Các khoá chính và khóa ngoại là hai loại ràng buộc có thể được sử dụng để thực thi toàn vẹn dữ liệu trong các bảng SQL Server và đây là những đối tượng cơ sở dữ liệu quan trọng. Trong bài này, tôi muố

0 0 131