EngineeringSolution ArchitectAzure Playbooks

Azure Data Factory – Đồng bộ giữa hai cơ sở dữ liệu SQL

Kịch bản

Đồng bộ hóa dữ liệu từ một SQL Server on-premises lên Azure SQL Database (hoặc ngược lại) theo lịch trình, xử lý các thay đổi schema và tải dữ liệu tăng dần (incremental load).

Yêu cầu trước

  • Azure subscription với Data Factory đã được tạo.
  • Self‑hosted Integration Runtime (IR) được cài đặt trên máy on-premise (tải từ cổng ADF).
  • Kết nối mạng (VPN hoặc ExpressRoute) để IR có thể truy cập DB on-premise.
  • Service principal với quyền Contributor trên Data Factory.

Các bước thực hiện

  1. Tạo Linked Services
    • Azure SQL: Server=tcp:<azure_sql>.database.windows.net,1433;Database=<db>;Authentication=SQLPassword;User ID=<user>;Password=<pwd>
    • On‑Prem SQL: Sử dụng Self‑hosted IR và định dạng chuỗi kết nối tương tự.
  2. Tạo Datasets
    • SourceDataset → type: SqlServerTable, tableName: dbo.SourceTable.
    • SinkDataset → type: AzureSqlTable, tableName: dbo.DestinationTable.
  3. Xây dựng Pipeline (Đường ống)
    • Copy Activity
      • Source: SourceDataset
      • Sink: SinkDataset
      • Mapping: Tự động ánh xạ cột hoặc cung cấp mapping JSON tĩnh.
    • Incremental Load (khuyên dùng):
      json
      "source": {
        "type": "SqlSource",
        "sqlReaderQuery": "SELECT * FROM dbo.SourceTable WHERE ModifiedDate > @lastWatermark"
      },
      "sink": { "type": "SqlSink" },
      "translator": { "type": "TabularTranslator" }
      
      Sử dụng biến Watermark lưu trữ trong Azure Key Vault hoặc tham số pipeline.
  4. Schedule Trigger (Lập lịch)
    • Tạo Time Trigger (ví dụ: mỗi 15 phút) truyền giá trị watermark hiện tại.
  5. Giám sát & Cảnh báo
    • Kích hoạt ADF monitoring → thiết lập Azure Monitor alerts khi có lỗi activity.
    • (Tùy chọn) Gửi log vào Log Analytics workspace.

Tích hợp với .NET

csharp
// Kích hoạt pipeline từ .NET (ví dụ: sau một sự kiện nghiệp vụ)
var client = new DataFactoryManagementClient(new DefaultAzureCredential())
{
    SubscriptionId = "<subscription-id>"
};
await client.Pipelines.CreateRunAsync(
    resourceGroupName: "rg-datafactory",
    factoryName: "myADF",
    pipelineName: "SyncOnPremToAzure",
    parameters: new Dictionary<string, object> { { "runId", Guid.NewGuid().ToString() } }
);

Kết quả: Dịch vụ .NET của bạn có thể gọi và bỏ qua (fire-and-forget) tác vụ đồng bộ, trong khi ADF đảm nhiệm phần việc nặng nhọc.


Mẹo thực hành tốt

  • Sử dụng PolyBase cho bulk copy khi di chuyển > 100 triệu dòng.
  • Kích hoạt Azure Data Factory Managed VNet cho traffic inbound an toàn.
  • Quản lý phiên bản JSON của pipeline thông qua tích hợp Git trong giao diện ADF.
  • Kiểm thử với phần dữ liệu nhỏ trước khi mở rộng tải toàn bộ.

File thuộc mục Azure Playbooks của senior‑dotnet‑wiki.