Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nội bộ sao chép giao dịch SQL Server

SQL Server Transactional Replication là một trong những kỹ thuật sao chép phổ biến nhất được sử dụng để chia sẻ, sao chép hoặc phân phối dữ liệu đến nhiều đích. Trong bài viết này, chúng ta sẽ thảo luận về Nhân bản, các kiểu Nhân bản khác nhau và đặc biệt chú ý đến công việc Nhân bản Giao dịch.

Sao chép giao dịch SQL là gì?

Sao chép là công nghệ SQL Server để sao chép hoặc phân phối dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong khi duy trì tính nhất quán của Dữ liệu.

Bản sao có thể được sử dụng để chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác

  • trên cùng một phiên bản hoặc một phiên bản khác trong cùng một máy chủ;
  • hoặc trên nhiều Máy chủ ở một vị trí hoặc nhiều vị trí.

Đầu tiên, chúng ta nên xem qua Kiến trúc Nhân bản và hiểu các thuật ngữ Nhân bản.

Kiến trúc và thuật ngữ sao chép máy chủ SQL

  • Nhà xuất bản là cá thể Cơ sở dữ liệu nguồn xuất bản các thay đổi dữ liệu có thể được phân phối đến cơ sở dữ liệu khác. Dữ liệu từ một Nhà xuất bản duy nhất có thể được gửi đến một Người đăng ký duy nhất hoặc nhiều Người đăng ký .
  • Người đăng ký là Phiên bản Cơ sở dữ liệu Đích nơi chúng tôi phân phối các thay đổi dữ liệu được ghi lại từ Cơ sở dữ liệu Nhà xuất bản. Người đăng ký có thể là Phiên bản nhà xuất bản hoặc một phiên bản khác trong Máy chủ nhà xuất bản / Máy chủ khác ở cùng một vị trí / vị trí xa. Trước khi các thay đổi dữ liệu được phân phối đến phiên bản Cơ sở dữ liệu người đăng ký, những dữ liệu này được lưu trữ trong Nhà phân phối .
  • Nhà phân phối là Cơ sở dữ liệu lưu trữ nhật ký thay đổi được thu thập từ cơ sở dữ liệu của Nhà xuất bản. Khi một Máy chủ được kích hoạt làm Nhà phân phối, nó sẽ tạo Cơ sở dữ liệu hệ thống có tên là cơ sở dữ liệu phân phối .

Theo vị trí của cơ sở dữ liệu phân phối, chúng có thể được phân loại là nhà phân phối địa phương hoặc từ xa.

- Nhà phân phối địa phương là một cơ sở dữ liệu phân phối nằm trên phiên bản cơ sở dữ liệu Nhà xuất bản.
- Nhà phân phối từ xa là cơ sở dữ liệu phân phối nằm trong phiên bản cơ sở dữ liệu Người đăng ký hoặc trong bất kỳ phiên bản SQL Server nào khác ngoài phiên bản cơ sở dữ liệu Publisher.

Yếu tố quyết định là nơi đặt cơ sở dữ liệu Phân phối trên cá thể Publisher (phiên bản khác). nó phụ thuộc vào tài nguyên Máy chủ có sẵn để xử lý tải Phân phối dữ liệu.

Theo cách dữ liệu sẽ được gửi từ cơ sở dữ liệu Phân phối đến cá thể Người đăng ký, nó có thể được phân loại thành Đẩy hoặc Kéo đăng ký .

- Đẩy đăng ký có nghĩa là cơ sở dữ liệu Phân phối chịu trách nhiệm đẩy dữ liệu đến cá thể cơ sở dữ liệu Người đăng ký.
- Kéo đăng ký có nghĩa là phiên bản cơ sở dữ liệu Người đăng ký chịu trách nhiệm lấy dữ liệu có sẵn từ cơ sở dữ liệu Phân phối và áp dụng nó vào cơ sở dữ liệu Người đăng ký.

  • Bài báo là đơn vị cơ bản của Replication. Nó chỉ ra bất kỳ thay đổi dữ liệu nào trên đối tượng cơ sở dữ liệu hoặc bài viết này sẽ được sao chép từ Nhà xuất bản sang Người đăng ký. Bài viết có thể là Bảng, Dạng xem, Dạng xem được Lập chỉ mục, Thủ tục được Lưu trữ hoặc Chức năng do Người dùng Xác định.
  • Ấn phẩm là tập hợp một hoặc nhiều Bài viết từ cơ sở dữ liệu trong Publisher.
  • Đăng ký xác định những gì Ấn phẩm sẽ được nhận. Ngoài ra, nó xác định từ Ấn phẩm nào và dữ liệu được sao chép theo lịch trình nào. Đăng ký có thể là Đẩy hoặc Kéo (từ Xuất bản đến Đăng ký).
  • Tác nhân nhân rộng là các chương trình độc lập chịu trách nhiệm theo dõi các thay đổi và phân phối dữ liệu từ Nhà xuất bản đến Nhà phân phối và Người đăng ký. Tất cả Tác nhân nhân bản thực thi dưới dạng Công việc trong Tác nhân máy chủ SQL. Do đó, nó có thể được quản lý thông qua SSMS trong SQL Server Agent Jobs hoặc Replication Monitor. Có các loại Đại lý nhân bản sau:
  • Tác nhân Ảnh chụp nhanh - Được sử dụng bởi hầu hết tất cả các loại Replication. Tác nhân Ảnh chụp nhanh chạy từ Máy chủ chứa cơ sở dữ liệu phân phối. Nó chuẩn bị Lược đồ và dữ liệu ban đầu của tất cả các Bài báo có trong Ấn phẩm trên một Nhà xuất bản. Ngoài ra, nó tạo các tệp Ảnh chụp nhanh trong thư mục ảnh chụp nhanh và ghi lại chi tiết Đồng bộ hóa trong cơ sở dữ liệu Phân phối.
  • Tác nhân đọc nhật ký - Được sử dụng bởi Transactional Replication. Mục đích là đọc các thay đổi dữ liệu của các bài báo được kích hoạt sao chép từ Nhật ký giao dịch của cơ sở dữ liệu nhà xuất bản và được lưu trữ vào cơ sở dữ liệu phân phối. Tác nhân đọc nhật ký chạy từ Máy chủ nhà phân phối.
  • Đại lý phân phối - Được sử dụng bởi Transactional và Snapshot Replication. Nó áp dụng các tệp Ảnh chụp ban đầu và các giao dịch đang chờ xử lý gia tăng hoặc có sẵn từ cơ sở dữ liệu Phân phối vào cơ sở dữ liệu Người đăng ký. Đại lý phân phối chạy từ Máy chủ nhà phân phối cho Đăng ký đẩy và Máy chủ đăng ký cho Đăng ký kéo.
  • Tác nhân hợp nhất - Chỉ được sử dụng bởi Merge Replication. Nó áp dụng các tệp ảnh chụp nhanh ban đầu và đối chiếu các thay đổi khác biệt hoặc gia tăng giữa Nhà xuất bản hoặc Người đăng ký. Tác nhân hợp nhất chạy trên Máy chủ phân phối để đẩy nhân rộng và từ Máy chủ người đăng ký để kéo đăng ký.
  • Tác nhân đọc hàng đợi - Queue Reader Agent được sử dụng bởi Transactional Replication với tùy chọn cập nhật xếp hàng đợi. Nó chuyển các thay đổi từ Người đăng ký sang Nhà xuất bản. Tác nhân đọc hàng đợi chạy từ Máy chủ nhà phân phối.
  • Công việc Bảo trì Nhân rộng - Như đã giải thích trước đó, tất cả các Tác nhân nhân bản là các chương trình độc lập được thiết lập trong khi định cấu hình Nhân bản. Chúng chạy dưới dạng các công việc trong SQL Server Agent Jobs. Một số công việc quan trọng cần lưu ý là Dọn dẹp hệ thống phân phối:Phân phối, Dọn dẹp lịch sử đại lý:Phân phối và Dọn dẹp gói đăng ký hết hạn.

Các loại sao chép trong SQL Server

Bây giờ khi chúng ta biết thuật ngữ, hãy đi sâu vào các loại Sao chép.

  1. Sao chép Giao dịch . Như tên cho thấy, mọi giao dịch hoặc thay đổi dữ liệu trong phạm vi giao dịch trên Publisher sẽ được gửi đến Người đăng ký trong thời gian gần thực với độ trễ nhỏ tùy thuộc vào băng thông mạng và tài nguyên máy chủ. Sao chép giao dịch sử dụng Tác nhân đọc nhật ký để đọc các thay đổi dữ liệu từ Nhật ký giao dịch của cơ sở dữ liệu nhà xuất bản. Nó cũng sử dụng Đại lý phân phối để áp dụng các thay đổi cho Người đăng ký. Đôi khi nó có thể sử dụng Snapshot Agent để lấy dữ liệu Snapshot ban đầu của tất cả các bài báo được sao chép. Xuất bản Nhân bản Giao dịch có thể thuộc các danh mục dưới đây:
    • Sao chép Giao dịch Chuẩn - Người đăng ký là cơ sở dữ liệu chỉ đọc từ quan điểm Nhân rộng Giao dịch. Bất kỳ thay đổi nào được thực hiện bởi bất kỳ ai trên cơ sở dữ liệu Người đăng ký sẽ không được theo dõi và cập nhật vào Cơ sở dữ liệu nhà xuất bản. Bản sao giao dịch tiêu chuẩn thường được gọi là bản sao giao dịch.
    • Nhân rộng giao dịch với các đăng ký có thể cập nhật là một Cải tiến của sao chép giao dịch tiêu chuẩn theo dõi các thay đổi dữ liệu diễn ra trên Đăng ký. Bất cứ khi nào các thay đổi về dữ liệu được thực hiện trên một Đăng ký có thể cập nhật, chúng sẽ được phổ biến trước tiên cho Nhà xuất bản và sau đó đến những Người đăng ký khác.
    • Sao chép ngang hàng là một Cải tiến của việc Nhân rộng Giao dịch Chuẩn. Nó truyền bá những thay đổi nhất quán về giao dịch trong thời gian gần thực trên nhiều phiên bản máy chủ.
    • Sao chép hai chiều là một Cải tiến của Tái tạo giao dịch tiêu chuẩn cho phép hai máy chủ (giới hạn chỉ 2 Máy chủ và do đó được đặt tên là Hai chiều) trao đổi các thay đổi dữ liệu giữa nhau với bất kỳ máy chủ nào đóng vai trò là Nhà xuất bản (để gửi thay đổi đến Máy chủ khác) hoặc với tư cách Người đăng ký (để nhận các thay đổi từ máy chủ khác).
  2. Nhân rộng Hợp nhất - Hỗ trợ nắm bắt các thay đổi dữ liệu diễn ra trên cả Nhà xuất bản và Người đăng ký và phân phối nó đến Máy chủ khác. Bản sao Hợp nhất yêu cầu ROWGUID trên Bảng Các Bài báo liên quan đến Nhân rộng Hợp nhất. Nó sử dụng Trình kích hoạt để nắm bắt các thay đổi dữ liệu giữa Nhà xuất bản và Người đăng ký. Ngoài ra, nó cung cấp các thay đổi trên Máy chủ khi cả Nhà xuất bản và Người đăng ký được kết nối với mạng. Merge Replication sử dụng Merge Agent để sao chép các thay đổi dữ liệu giữa Nhà xuất bản và Người đăng ký.
  3. Sao chép Ảnh chụp nhanh - Như tên cho thấy, Sao chép Ảnh chụp nhanh không dựa vào Nhật ký giao dịch hoặc Trình kích hoạt để nắm bắt các thay đổi. Nó chụp nhanh các bài báo liên quan đến Xuất bản và áp dụng nó cho Người đăng ký với các bản ghi có sẵn tại thời điểm chụp nhanh. Bản sao ảnh chụp nhanh sử dụng Tác nhân ảnh chụp nhanh để chụp ảnh nhanh về Nhà xuất bản và sử dụng Đại lý phân phối để áp dụng các bản ghi này cho Người đăng ký.

Sao chép giao dịch SQL Server

Nhân bản Giao dịch thường được ưu tiên trong các tình huống mà cơ sở dữ liệu Nhà xuất bản OLTP có nhiều hoạt động CHÈN / CẬP NHẬT và / hoặc XÓA Dữ liệu.

Vì phiên bản máy chủ Nhà xuất bản có DISK IO rất lớn đang xảy ra, việc tạo Báo cáo có thể gây ra tắc nghẽn nghiêm trọng. Nó cũng có thể ảnh hưởng đến hiệu suất của Máy chủ. Do đó, một Máy chủ khác có dữ liệu gần thời gian thực sẽ tốt cho việc giảm tải các yêu cầu Báo cáo.

Một trong những yêu cầu cơ bản để sao chép giao dịch là các bảng được sao chép phải có sẵn Khóa chính.

Chúng tôi có thể tóm tắt cách hoạt động của Transactional Replication. Hãy xem sơ đồ Kiến trúc sao chép giao dịch dưới đây được lấy từ tài liệu chính thức của Microsoft.

Ấn phẩm được tạo trên cơ sở dữ liệu Nhà xuất bản bao gồm danh sách các Bài báo để sao chép sang cơ sở dữ liệu Người đăng ký.

Bản sao Giao dịch thường sẽ được khởi tạo từ Nhà xuất bản đến Nhà phân phối thông qua Snapshot Agent hoặc Full Backup. Tác nhân Ảnh chụp nhanh được hỗ trợ thông qua Trình hướng dẫn cấu hình sao chép. Sao lưu đầy đủ được hỗ trợ thông qua Câu lệnh TSQL để khởi tạo Nhân bản giao dịch.

Tác nhân Trình đọc Nhật ký quét Nhật ký Giao dịch của cơ sở dữ liệu Nhà xuất bản để tìm các Bài viết được theo dõi. Sau đó, nó sao chép các thay đổi dữ liệu từ Nhật ký giao dịch sang cơ sở dữ liệu phân phối.

Cơ sở dữ liệu phân phối có thể nằm trong Nhà xuất bản hoặc Người đăng ký; nó cũng có thể là hoặc một phiên bản SQL Server độc lập khác.

Cũng cần lưu ý những điều sau:

  • Tác nhân Trình đọc Nhật ký chạy liên tục từ Máy chủ Nhà phân phối để quét các lệnh mới được đánh dấu sao chép. Tuy nhiên, nếu bạn không muốn chạy liên tục và thay vào đó muốn chạy theo lịch trình, chúng tôi có thể thay đổi Công việc SQL của tác nhân trình đọc nhật ký sẽ được tạo.
  • Tác nhân đọc nhật ký chọn tất cả các bản ghi được đánh dấu sao chép từ các lô Nhật ký giao dịch và gửi chúng đến cơ sở dữ liệu phân phối.
  • Tác nhân đọc nhật ký chỉ chọn các giao dịch đã cam kết từ Nhật ký giao dịch của Cơ sở dữ liệu nhà xuất bản. Vì vậy, bất kỳ truy vấn lâu dài nào trên cơ sở dữ liệu của Nhà xuất bản đều có thể ảnh hưởng trực tiếp đến tính năng Sao chép vì nó đang đợi giao dịch hoạt động hoàn tất.

Đại lý phân phối chọn tất cả các lệnh mới chưa được phân phối từ cơ sở dữ liệu Phân phối và áp dụng chúng vào cơ sở dữ liệu Đăng ký thông qua Cơ chế Đẩy hoặc Kéo. Như đã đề cập trước đó, nếu Nhà phân phối Đăng ký Đẩy có quyền sở hữu để áp dụng các thay đổi từ cơ sở dữ liệu Phân phối cho Người đăng ký thì trong cơ sở dữ liệu Người đăng ký Kéo sẽ có quyền sở hữu để tìm nạp các thay đổi từ cơ sở dữ liệu Phân phối đến Người đăng ký.

Khi các bản ghi được phân phối thành công từ cơ sở dữ liệu Phân phối đến Người đăng ký, chúng sẽ được đánh dấu là Đã phân phối và được đánh dấu để xóa khỏi cơ sở dữ liệu Phân phối. Một trong những công việc Bảo trì Nhân bản Chính có tên là Dọn dẹp Phân phối:Công việc Phân phối chạy 10 phút một lần để xóa các bản ghi đã phân phối khỏi cơ sở dữ liệu Phân phối để duy trì kích thước cơ sở dữ liệu Phân phối trong tầm kiểm soát.

Với phần giải thích chi tiết về các khái niệm Nhân bản và Nhân bản Giao dịch, chúng ta có thể bắt tay vào thực hiện bằng cách định cấu hình Nhân bản cho AdventureWorks cơ sở dữ liệu và xác minh Bản sao cho mọi thành phần được thảo luận về mặt lý thuyết.

Định cấu hình từng bước bản sao giao dịch (thông qua SSMS GUI)

Cấu hình sao chép giao dịch bao gồm 3 bước chính:

  1. Định cấu hình cơ sở dữ liệu phân phối
  2. Tạo ấn phẩm
  3. Tạo Đăng ký

Trước khi cố gắng định cấu hình Nhân bản, hãy đảm bảo rằng Thành phần Nhân bản được cài đặt như một phần của cài đặt SQL Server hoặc sử dụng phương tiện SQL Server để cài đặt Thành phần Nhân bản, vì chúng cần thiết cho tác vụ.

Trong SSMS, kết nối với Phiên bản cơ sở dữ liệu nhà xuất bản và nhấp chuột phải vào Replication :

Phân phối không được định cấu hình ngay bây giờ. Do đó, chúng tôi có tùy chọn Định cấu hình phân phối. Chúng tôi có thể Định cấu hình cơ sở dữ liệu Phân phối bằng cách sử dụng trình hướng dẫn Định cấu hình phân phối hoặc thông qua trình hướng dẫn Tạo ấn phẩm.

Để định cấu hình cơ sở dữ liệu Phân phối và Ấn phẩm, hãy làm theo các bước sau:

Mở rộng Nhân rộng và nhấp chuột phải vào Ấn bản mới .

Trình hướng dẫn xuất bản mới Sẽ khởi chạy. Nhấp vào Tiếp theo để xem Nhà phân phối tùy chọn cấu hình.

Theo mặc định, nó chọn máy chủ Publisher để giữ cơ sở dữ liệu phân phối. Nếu bạn muốn sử dụng cơ sở dữ liệu phân phối từ xa, hãy chọn tùy chọn thứ hai. Nhấp vào Tiếp theo .

Tùy chọn tiếp theo dành cho việc định cấu hình Thư mục Ảnh chụp nhanh . Thay đổi nó vào thư mục cần thiết. Nếu không, nó sẽ được tạo trên đường dẫn thư mục cài đặt SQL Server theo mặc định. Nhấp vào Tiếp theo .

Chọn Cơ sở dữ liệu xuất bản (đây là AdventureWorks ) và nhấp vào Tiếp theo .

Chọn Loại xuất bản - Sao chép giao dịch . Nhấp vào Tiếp theo .

Chọn Bài viết cho ấn phẩm này. Đối với mục đích thử nghiệm, hãy chọn tất cả Bảng Lượt xem :

Trước khi nhấp vào Tiếp theo , hãy mở rộng các bảng một lần nữa để xác minh một số vấn đề.

Một số bảng được đánh dấu bằng các biểu tượng màu đỏ. Khi nhấp vào các bảng đó, chúng tôi thấy cảnh báo cho biết rằng bảng không thể được sao chép bởi vì bảng đó không có Khóa chính, một trong những yêu cầu quan trọng để sao chép giao dịch. Sau đó chúng ta sẽ đi vào chi tiết hơn. Bây giờ, hãy nhấp vào Tiếp theo .

Trang có Vấn đề về bài viết liên quan đến các phụ thuộc sẽ xuất hiện. Nhấp vào Tiếp theo .

Tùy chọn tiếp theo là Lọc các hàng trong bảng - vì chúng tôi đang thử nghiệm bản sao cơ bản, chúng tôi có thể bỏ qua nó. Nhấp vào Tiếp theo .

Định cấu hình tác nhân chụp nhanh - bỏ qua và nhấp vào Tiếp theo .

Đại lý Cài đặt - nhấp vào Cài đặt bảo mật để định cấu hình tài khoản để thực thi tác nhân Snapshot và tác nhân đọc nhật ký bên dưới nó.

Sau đó, thay đổi Quy trình tác nhân ảnh chụp nhanh để chạy trong Tài khoản dịch vụ tác nhân SQL Server.

Đặt Tác nhân đọc nhật ký với Kết nối với Nhà xuất bản> Bằng cách mạo danh Tài khoản Quy trình . Nhấp vào OK .

Bảo mật Đặc vụ sẽ được cập nhật.

Do đó, chúng tôi đã định cấu hình Nhà phân phối và tất cả các yếu tố của Ấn phẩm như Bài báo , Tác nhân chụp nhanh , Tác nhân đọc nhật ký Chứng khoán đại lý . Chúng tôi gần như đã hoàn thành việc tạo Ấn phẩm thông qua Wizard.

Nếu bạn cần nghiên cứu thêm về các tập lệnh TSQL được sử dụng để tạo Ấn phẩm, chúng tôi có thể kiểm tra mục Tạo tệp tập lệnh để tạo Ấn phẩm lựa chọn. Nếu không, hãy nhấp vào Tiếp theo .

Vì tôi đã chọn lưu tệp, trình hướng dẫn cho phép tôi đặt Đường dẫn tệp tập lệnh tên . Cung cấp các chi tiết này và nhấp vào Tiếp theo .

Cuối cùng, Wizard cũng yêu cầu Tên nhà xuất bản , Tôi đã đặt tên nó là AdventureWorks_pub với tên cơ sở dữ liệu và các từ khóa để chỉ ra nó như một ấn phẩm để dễ dàng xác định hơn.

Xác minh tất cả dữ liệu được cung cấp trên Tóm tắt và nhấp vào Hoàn tất .

Trình hướng dẫn sẽ hiển thị tiến trình trong Tạo ấn phẩm . Khi quá trình hoàn tất, chúng tôi sẽ thấy xác nhận. Nhấp vào Đóng .

Để xác minh việc tạo thành công Nhà phân phối (Cơ sở dữ liệu phân phối), mở rộng cơ sở dữ liệu hệ thống:

Để xác minh việc tạo thành công Ấn phẩm , mở rộng Xuất bản địa phương :

Chúng tôi đã định cấu hình Cơ sở dữ liệu phân phối và tạo cơ sở dữ liệu Ấn phẩm trên cơ sở dữ liệu AdventureWorks thành công. Bây giờ chúng tôi có thể tiếp tục với Đăng ký sự sáng tạo

Nhấp chuột phải vào Ấn phẩm mới chúng tôi vừa tạo và chọn Đăng ký mới :

Trình hướng dẫn đăng ký mới sẽ xuất hiện. Để bắt đầu quá trình, hãy nhấp vào Tiếp theo .

Ấn phẩm trang yêu cầu đảm bảo rằng cả Ấn phẩm Nhà xuất bản cơ sở dữ liệu được chọn. Nhấp vào Tiếp theo .

Đặt Đại lý phân phối sang Đẩy hoặc Kéo Đăng ký. Chúng tôi sẽ sử dụng Máy chủ nhà xuất bản với tư cách là Người đăng ký và loại đó sẽ không có bất kỳ tác động nào. Do đó, chúng tôi để mặc định Đẩy Đăng ký. Nhấp vào Tiếp theo .

Chọn Người đăng ký (cơ sở dữ liệu). Tôi đang chọn AdventureWorks_REPL được khôi phục từ cùng một bản sao lưu Cơ sở dữ liệu AdventureWorks. Nhấp vào Tiếp theo .

Đặt Bảo mật tác nhân :

Vì tôi sẽ làm mọi thứ trong một Máy chủ duy nhất nên tôi đang sử dụng tài khoản dịch vụ Đại lý .

Cửa sổ tiếp theo trình bày Bảo mật của tác nhân phân phối các giá trị đã được định cấu hình. Nhấp vào Tiếp theo .

Lịch biểu đồng bộ hóa - để mặc định. Nhấp vào Tiếp theo .

Khởi tạo đăng ký - để nó với các giá trị mặc định. Nhấp vào Tiếp theo .

Sau khi bạn cung cấp tất cả các chi tiết cần thiết, bạn sẽ có thể hoàn tất quá trình tạo Đăng ký. Kiểm tra Tạo tệp Tập lệnh… để nghiên cứu các tập lệnh sau và nhấp vào Tiếp theo .

Cung cấp đường dẫn để lưu tệp, nhấp vào Tiếp theo .

Hãy xem bản tóm tắt và kiểm tra tất cả các giá trị đã định cấu hình. Sau khi được xác minh, hãy nhấp vào Hoàn tất .

Tạo Đăng ký đã hoàn tất. Nhấp vào Đóng .

Bây giờ chúng ta có thể thấy Đăng ký được hiển thị dưới Ấn phẩm của chúng tôi .

Định cấu hình Snapshot Agent

Bước tiếp theo của chúng tôi là làm việc trên Ảnh chụp nhanh Đại lý để gửi dữ liệu ban đầu từ Nhà xuất bản tới Người đăng ký .

Trước khi bước vào nó, chúng ta cần chú ý đến Giám sát nhân bản . Công cụ quan trọng này có sẵn trong SSMS để xem trạng thái Sao chép ở các cấp khác nhau, Cấp máy chủ, cấp Cơ sở dữ liệu nhà xuất bản, cấp Đăng ký và cấp Đại lý nhân bản.

Nhấp chuột phải vào Replication / Ấn bản địa phương / Đăng ký cục bộ / Xuất bản hoặc Đăng ký chúng tôi đã tạo để khởi chạy Giám sát nhân bản như hình dưới đây:

Trong Giám sát sao chép , mở rộng Máy chủ nhà xuất bản (RRJ)> Xuất bản ([AdventureWorks]:AdventureWorks_pub) để hiển thị chi tiết Đăng ký. Nhấp chuột phải vào Đăng ký và chọn Xem chi tiết .

Như chúng ta có thể thấy, thông tin về Ảnh chụp ban đầu cho ấn phẩm AdventureWorks_pub của chúng tôi vẫn chưa có sẵn. Chúng tôi sẽ cần thực hiện công việc tác nhân Ảnh chụp nhanh để gửi dữ liệu ban đầu đến cơ sở dữ liệu Người đăng ký .

Giữ cửa sổ này mở để xem tiến trình của Snapshot sau khi bắt đầu công việc của Snapshot Agent .

Nhấp chuột phải vào Ấn phẩm > Xem Trạng thái Tác nhân Ảnh chụp nhanh :

Tác nhân chưa bao giờ được chạy thông báo nói rằng chúng tôi chưa bao giờ thực thi Snapshot Agent. Nhấp vào Bắt đầu .

Trong khi Snapshot Agent đang thực thi, bạn có thể xem tiến trình:

Khi tất cả các ảnh chụp nhanh được tạo, nó sẽ tạo ra thông báo xác nhận:

Chúng tôi có thể thấy các tệp Ảnh chụp nhanh được tạo mới trong thư mục Ảnh chụp nhanh mà chúng tôi đã cung cấp đường dẫn trước đó.

Sau khi tất cả các ảnh chụp nhanh được Đại lý phân phối áp dụng vào Cơ sở dữ liệu người đăng ký , nó sẽ hiển thị trạng thái bên dưới trong Giám sát nhân bản đang mở cửa sổ:

Chúc mừng! Chúng tôi đã định cấu hình thành công Nhân bản giao dịch bằng Snapshot Agent.

Lưu ý :Nếu chúng tôi có Cơ sở dữ liệu nhà xuất bản khổng lồ, việc tạo ảnh chụp nhanh có thể mất rất nhiều thời gian. Do đó, bạn nên sử dụng bản sao lưu đầy đủ của cơ sở dữ liệu Nhà xuất bản thay vì thực thi Snapshot Agent - chúng tôi sẽ đề cập đến vấn đề này trong các bài viết tiếp theo.

Xác minh các thành phần sao chép

Mọi Thành phần Nhân bản đều có thể được xác minh bằng cả truy vấn SSMS GUI và TSQL. Chúng tôi sẽ thảo luận về vấn đề này trong các bài viết tiếp theo và ở đây chúng tôi sẽ giải thích nhanh cách xem các thuộc tính của các thành phần bên dưới.

Nhà xuất bản

Trong SSMS, nhấp chuột phải vào Sao chép > Thuộc tính nhà xuất bản > Cơ sở dữ liệu xuất bản :

Để xem chi tiết về Nhà xuất bản , thực hiện các truy vấn dưới đây đối với cơ sở dữ liệu phân phối.

USE distribution
GO
exec sp_helpdistpublisher
GO
select * from MSpublisher_databases
GO

Người đăng ký

Thông tin người đăng ký có thể được lấy bằng truy vấn dưới đây trong SSMS.

USE distribution
GO
exec sp_helpsubscriberinfo
GO
select * from MSsubscriber_info

Nhà phân phối

Trong SSMS, nhấp chuột phải vào Sao chép > Nhà phân phối Thuộc tính :

Nhấp vào Nhà xuất bản để hiển thị danh sách tất cả các Nhà xuất bản sử dụng cơ sở dữ liệu Phân phối này.

Trong SSMS, chúng tôi có thể chạy truy vấn dưới đây để có được các chi tiết tương tự.

USE distribution
GO
exec sp_helpdistributor
GO
exec sp_helpdistributiondb
GO	

Bài báo

Nhấp chuột phải vào Ấn phẩm > Thuộc tính xuất bản > Bài báo . Bạn sẽ thấy danh sách tất cả các Bài báo có sẵn. Các thuộc tính của từng bài viết có thể được sửa đổi bằng cách nhấp vào Thuộc tính bài viết nữa.

USE AdventureWorks
GO
-- To View all articles available under a Publication
exec sp_helparticle @publication = 'Adventureworks_pub'
GO
-- To View all article columns for a particular article available under a Publication
exec sp_helparticlecolumns @publication = 'Adventureworks_pub', @article = 'Address'
GO
USE distribution
GO
SELECT * from MSArticles

Xuất bản

Nhấp chuột phải vào Ấn phẩm > Thuộc tính :

Trong SSMS, chúng tôi có thể chạy truy vấn bên dưới để xem các thuộc tính Xuất bản :

USE AdventureWorks
GO
exec sp_helppublication
GO
USE distribution
GO
SELECT * FROM MSPublications

Đăng ký

Nhấp chuột phải vào Đăng ký > Thuộc tính đăng ký :

Trong SSMS, chúng tôi có thể thực thi tập lệnh dưới đây để nhận thông tin Đăng ký:

USE AdventureWorks
GO
exec sp_helpsubscription
GO
USE distribution
GO
SELECT * FROM MSsubscriptions
GO

Tác nhân nhân rộng

Trong Công việc tác nhân SQL Server , chúng tôi có thể tìm thấy Công việc cụ thể được tạo cho tất cả các Đại lý nhân bản:

Trong SSMS, chúng tôi có thể thực hiện truy vấn để tìm ra công việc nào là cần thiết Công việc tác nhân đọc nhật ký , Công việc đại lý ảnh chụp nhanh Công việc đại lý phân phối . Bên cạnh đó, chúng ta có thể thấy công việc Dọn dẹp đại lý phân phối và một số công việc khác liên quan đến Nhân bản được tạo trong khi chúng tôi đang thiết lập Xuất bản và Đăng ký trong nội bộ.

Cách hoạt động của Tác nhân đọc nhật ký

Tác nhân đọc nhật ký đọc tất cả dữ liệu đã cam kết từ nhật ký giao dịch của cơ sở dữ liệu Nhà xuất bản và đẩy nó vào cơ sở dữ liệu Nhà phân phối. Mặc dù Microsoft không cung cấp cách chính thức để đọc Nhật ký giao dịch, nhưng có một số chức năng không có tài liệu như fn_dblog () fn_dump_dblog () có thể đọc dữ liệu từ Tệp nhật ký. Tuy nhiên, các chức năng này không có tài liệu và không được hỗ trợ bởi Microsoft. Do đó, chúng tôi sẽ không khám phá thêm về chúng.

Cách Đại lý phân phối cung cấp các thay đổi dữ liệu cho cơ sở dữ liệu người đăng ký

Sau khi dữ liệu được ghi vào cơ sở dữ liệu Phân phối, chúng ta có thể đọc cách dữ liệu đó được lưu trữ trong các bảng phân phối. Đối với điều đó, chúng tôi áp dụng sp_browsereplcmds thủ tục - nó tìm nạp các bản ghi qua MSrepl_commands MSrepl_transactions bảng.

Đối với mục đích học tập, hãy lấy một bảng có 3 cột có tên Person.ContactType :

Đăng ký được tạo sẽ thực hiện 3 quy trình cho mọi bài viết là một phần của Xuất bản trong cơ sở dữ liệu của Người đăng ký với các quy ước đặt tên dưới đây:

  • dbo.sp_MSins_
  • dbo.sp_MSupd_
  • dbo.sp_MSdel_

Đối với bài viết Bảng Person.ContactType, chúng ta có thể thấy các quy trình dưới đây được tạo trong cơ sở dữ liệu Người đăng ký:

  • dbo.sp_MSins_PersonContactType - CHÈN các bản ghi mới được ghi lại từ cơ sở dữ liệu Nhật ký giao dịch của nhà xuất bản và sau đó được truyền sang cơ sở dữ liệu phân phối.
  • dbo.sp_MSupd_PersonContactType - CẬP NHẬT các thay đổi được ghi lại từ cơ sở dữ liệu Nhật ký giao dịch của nhà xuất bản và sau đó được truyền sang cơ sở dữ liệu phân phối.
  • dbo.sp_MSdel_PersonContactType - XÓA records captured from Transaction Logs of Publisher database and then propagated to the distribution database.

Script of the dbo.sp_MSins_PersonContactType Procedure

As you can see, it’s a straightforward INSERT statement that comes out of the distribution database:

ALTER procedure [dbo].[sp_MSins_PersonContactType]
    @c1 int,
    @c2 nvarchar(50),
    @c3 datetime
as
begin  
	insert into [Person].[ContactType] (
		[ContactTypeID],
		[Name],
		[ModifiedDate]
	) values (
		@c1,
		@c2,
		@c3	) 
end  
GO

Script of the dbo.sp_MSupd_PersonContactType Procedure

The script relies on the Primary Key values to identify the unique record for updating:

ALTER procedure [dbo].[sp_MSupd_PersonContactType]
		@c1 int = NULL,
		@c2 nvarchar(50) = NULL,
		@c3 datetime = NULL,
		@pkc1 int = NULL,
		@bitmap binary(1)
as
begin  
	declare @primarykey_text nvarchar(100) = ''
update [Person].[ContactType] set
		[Name] = case substring(@bitmap,1,1) & 2 when 2 then @c2 else [Name] end,
		[ModifiedDate] = case substring(@bitmap,1,1) & 4 when 4 then @c3 else [ModifiedDate] end
	where [ContactTypeID] = @pkc1
if @@rowcount = 0
    if @@microsoftversion>0x07320000
		Begin
			if exists (Select * from sys.all_parameters where object_id = OBJECT_ID('sp_MSreplraiserror') and [name] = '@param3')
			Begin
				
				set @primarykey_text = @primarykey_text + '[ContactTypeID] = ' + convert(nvarchar(100),@pkc1,1)
				exec sp_MSreplraiserror @errorid=20598, @param1=N'[Person].[ContactType]', @[email protected]_text, @param3=13233 
			End
			Else
				exec sp_MSreplraiserror @errorid=20598
		End
end 
GO

Script of the dbo.sp_MSdel_PersonContactType Procedure

This script relies on the Primary Key values to identify a unique record for deleting records from the Subscriber :

ALTER procedure [dbo].[sp_MSdel_PersonContactType]
		@pkc1 int
as
begin  
	declare @primarykey_text nvarchar(100) = ''
	delete [Person].[ContactType] 
	where [ContactTypeID] = @pkc1
if @@rowcount = 0
    if @@microsoftversion>0x07320000
		Begin
			if exists (Select * from sys.all_parameters where object_id = OBJECT_ID('sp_MSreplraiserror') and [name] = '@param3')
			Begin
				
				set @primarykey_text = @primarykey_text + '[ContactTypeID] = ' + convert(nvarchar(100),@pkc1,1)
				exec sp_MSreplraiserror @errorid=20598, @param1=N'[Person].[ContactType]', @[email protected]_text, @param3=13234 
			End
			Else
				exec sp_MSreplraiserror @errorid=20598
		End
end  
GO

This clearly explains why Transactional Replication enforces the Primary Key as a key requirement for tables to be added as part of Replication .

Now, let’s see the Transactional Replication in action. Let’s change some data in the Publisher database. For simplicity, I’ll take the same Person.ContactType bảng.

Executing the SELECT statement on the table yields 20 records:

Next, I INSERTed a sample record into the Person.ContactType bảng:

And, I UPDATE the newly inserted record:

DELETE the newly inserted record from the table:

We need to verify these transactions in Replication using sp_browsereplcmds

Changes from Person.ContactType were captured from the Transactional Logs of Publisher Database (AdventureWorks ) and sent to the Distribution database in the same order. Later, it was propagated to the Subscriber Database (AdventureWorks_REPL ).

Kết luận

Thanks for reading this long power-packed article! We have gone through a variety of topics, such as:

  • Replication Architecture and Terminologies
  • SQL Server Replication Types
  • SQL Server Transactional Replication in Detail
  • SQL Server Transactional Replication Configuration (Default approach)
  • SQL Server Transactional Replication Verification
  • SQL Server Transactional Replication in action

I hope that you’ve found lots of helpful information in this article. In subsequent parts, we’ll explore troubleshooting various issues that are frequently encountered in Replication, and learn how to handle them more efficiently.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hiệu quả nhất trong SQL Server để lấy ngày từ ngày + giờ?

  2. SQL Server 2008 Dữ liệu dọc sang ngang

  3. Cài đặt Azure Data Studio trên Ubuntu 18.04

  4. làm thế nào để tách chuỗi thành các cột khác nhau?

  5. Làm cách nào để tôi có thể bước vào một chương trình SQL Server được lưu trữ từ mã C # của tôi?