Có công cụ nào để thực hiện so sánh dữ liệu giữa hai lược đồ khác nhau không?


11

Chúng tôi đang di chuyển cơ sở dữ liệu của mình sang một lược đồ mới nhưng muốn xác thực dữ liệu đã được di chuyển chính xác.

Các công cụ so sánh dữ liệu truyền thống có thể so sánh hai cơ sở dữ liệu về sự khác biệt nếu các lược đồ giống nhau. Trong trường hợp của chúng tôi, đã có thay đổi đối với các thiết kế bảng nhưng tất cả dữ liệu từ lược đồ cũ đều nằm trong bảng mới, nó chỉ được di chuyển xung quanh một chút và tôi cần đảm bảo rằng nó là chính xác. Chúng tôi có hàng chục triệu hàng nên kiểm tra thủ công không phải là một lựa chọn.

Có công cụ nào có thể hỗ trợ cho kiểu so sánh này không?

Nếu không có thư viện / khung nào có thể giúp khởi động sự phát triển của một giải pháp tùy chỉnh?

Tôi rất vui khi sử dụng một giải pháp cụ thể cho cơ sở dữ liệu nếu cần thiết, trong trường hợp này cho SQL Server 2008.

Giải pháp của tôi: Tôi đang so sánh hai tập dữ liệu bằng cách tạo một VIEWbảng cho mỗi cơ sở dữ liệu cũ với cùng các trường với bảng cơ sở dữ liệu mới.

Sau đó, tôi so sánh dữ liệu bằng cách sử dụng kỹ thuật được mô tả ở đây: Cách ngắn nhất, nhanh nhất và dễ nhất để so sánh hai bảng trong SQL Server: UNION!

Tôi may mắn trong việc di chuyển này vì cấu trúc bảng tổng thể tương tự như cơ sở dữ liệu cũ, với các trường được chuyển từ bảng này sang bảng khác, bị bỏ hoặc thêm. Trong trường hợp bỏ và thêm vào, không có gì để so sánh, đối với các trường đã di chuyển hoặc được tổng hợp, tôi thực hiện các phép tính trong chế độ xem để cung cấp thông tin chính xác để so sánh.

Các UNIONchương trình so sánh tôi chỉ có các hàng với sự khác biệt, vì vậy ngay sau khi dữ liệu là đúng tôi nhận được một tập kết quả trống.


1
Làm thế nào bạn sẽ biết dữ liệu là chính xác nếu lược đồ đã thay đổi? Điều gì nếu một bảng đã được chia, hoặc kết hợp vv?
gbn


@AaronBertrand - Cảm ơn bình luận của bạn, nhưng tại thời điểm đó (3 năm trước) tôi đã điều tra sự sẵn có của các công cụ cho việc này nhưng không tìm thấy công cụ nào có thể so sánh giữa các lược đồ khác nhau . Tôi đã hy vọng liên kết của bạn là một công cụ tôi có thể mua vì tôi vẫn cần một công cụ.
Tony

@Tony bạn chắc chắn có thể làm điều đó với công cụ của Red-Gate (không chắc chắn về bất kỳ công cụ nào khác), bạn chỉ cần thực hiện một số ánh xạ thủ công.
Aaron Bertrand

@Tony Các lược đồ khác nhau, cùng một cơ sở dữ liệu? Hoặc các lược đồ khác nhau, cơ sở dữ liệu khác nhau?
Aaron Bertrand

Câu trả lời:


7

Không thể so sánh hai lược đồ khác nhau, đó là một tính toán về mức độ tự tin của bạn trong kết quả. Về cơ bản, tôi đã vay mượn từ các kỹ thuật Hòa giải Ngân hàng

Quan trọng: Sự hòa giải này không phải là về việc đảm bảo đích đến khớp chính xác với nguồn trong bối cảnh dữ liệu của nó (có một lý do khiến bạn di chuyển sang một hệ thống mới), nhưng bạn cần phải giải thích bất kỳ sự khác biệt nào!

Nền tảng:

  1. Xác định số liệu bạn sẽ sử dụng để đo lường (ví dụ: tổng số người dùng, tổng số tuổi của họ, danh sách id người dùng và mã bưu điện của họ ...) Tôi cố gắng sử dụng một số số liệu từ: Tổng số, Trung bình & mẫu / hồ sơ chi tiết
  2. Kết xuất dữ liệu này vào một vị trí chung (thông qua lượt xem / báo cáo / bất cứ điều gì hợp lý)
  3. So sánh dữ liệu của bạn và đảm bảo bất kỳ sự khác biệt nào có thể được giải thích

Nói chung, tôi đã chia sự so sánh thành một số phương pháp (đặc biệt là các số liệu chi tiết):

  • Theo bảng: Thường sử dụng Bảng nguồn làm định nghĩa, tạo một tập hợp các khung nhìn trên DB đích để thử và tái tạo Dữ liệu bảng nguồn
  • Theo đối tượng: Tùy thuộc vào DB và những gì bạn đang lưu trữ, có thể có ý nghĩa hơn để tạo chế độ xem tổng thể của các đối tượng (ví dụ: người dùng) trên một số bảng, tương tự như trên tạo ra một tập hợp các khung nhìn để trả về đối tượng đó như một thiết lập kết quả
  • Theo báo cáo: Nếu DB nguồn có một bộ Báo cáo quản lý toàn diện tốt, một kỹ thuật khác là sao chép các báo cáo đó với cùng định dạng chính xác

Kỹ thuật:

Bất kể phương pháp nào tôi đã sử dụng để tạo ra những gì sẽ được so sánh, tôi kết thúc với một tập hợp các tệp / lượt xem / dbs chứa dữ liệu Nguồn và đích có thể điều chỉnh được, sau đó tùy thuộc vào phương tiện tôi có thể sử dụng một trong những công cụ phổ biến để so sánh chúng. Sở thích của riêng tôi là:

  1. So sánh tệp
    Tạo hai thư mục khác nhau cho SourceDB và DestinationDB (đóng dấu thời gian / phiên bản để tôi biết khi nào tôi thực hiện việc đối chiếu) và loại bỏ đầu ra của các số liệu của mình dưới dạng các tệp có tên phù hợp, sau đó sử dụng công cụ so sánh (như CSDiff )

  2. So sánh Excel
    Đặc biệt khi xử lý các báo cáo Quản lý, tôi sẽ tạo một bộ Excel của sổ làm việc để so sánh các báo cáo (về bản chất là sử dụng VLookups và so sánh tổng số)

  3. So sánh dữ liệu
    Thay vì xuất dữ liệu đối chiếu vào các tệp hoặc báo cáo, hãy xuất chúng ra các DB riêng biệt, sau đó sử dụng một cái gì đó như Redgate SQL Data So sánh để so sánh các DB

Các công cụ khác:

Không thử bất kỳ thứ nào trong số này, nhưng một tìm kiếm nhanh trên google về 'Công cụ đối chiếu dữ liệu' mang lại:

Có những cái khác, nhưng đó là những cái có vẻ hợp lý


Cảm ơn những lời đề nghị. Như bạn nói, điều đó không phải là không thể (hiện tại tôi đang nghiên cứu một giải pháp) thật khó khăn. Tôi sẽ xem xét các phương pháp bạn đề cập.
Tony

Không lo lắng @Tony, lừa tôi thấy là để thử và phá vỡ nó thành những bước nhỏ hơn và sau đó tìm các công cụ hiện có cho mỗi bước (bạn sẽ cần phải viết một số công cụ tùy chỉnh, nó chỉ là về giảm thiểu nỗ lực đó nếu có thể)
Andrew Bickerton

6

Nếu bạn muốn so sánh dữ liệu trong hai thiết kế cơ sở dữ liệu khác nhau thì bạn phải viết SQL được mã hóa bằng tay để so sánh dữ liệu.

  • Điều gì nếu một bảng đã được phân chia, hoặc kết hợp vv?
  • Điều gì sẽ xảy ra nếu bạn có datetime, bây giờ bạn có smalldatetime = dữ liệu sẽ khác
  • ...

Không có thư viện khung để kiểm tra dữ liệu giống nhau trong hai cơ sở dữ liệu khác nhau.

Chỉ có bạn biết những gì bạn đã thay đổi hoặc sửa đổi


Tôi sợ rất nhiều nhưng nghĩ rằng tôi sẽ hỏi trong trường hợp ai đó đã làm một sự so sánh như vậy. Tôi hy vọng có thể có một công cụ để tăng tốc độ viết truy vấn nhưng như bạn nói, có lẽ tôi sẽ phải viết một cái gì đó từ đầu.
Tony

1
@Tony: vâng: đó là vì bất kỳ công cụ nào cũng không thể tách "điều gì sai" khỏi "điều chúng tôi đã thay đổi"
gbn

5

Bạn sẽ không thể so sánh các lược đồ khác nhau. Để giải quyết vấn đề của bạn, tôi sẽ tìm ra dữ liệu nào bạn cần so sánh. Sau đó, tôi sẽ tạo một chế độ xem trên mỗi máy chủ sẽ lấy lại dữ liệu tôi muốn so sánh (tính đến các loại dữ liệu và như vậy).

Khi cả hai chế độ xem đều giống nhau, tôi sẽ sử dụng công cụ của bên thứ ba như So sánh dữ liệu cổng đỏ để xem hàng nào khác nhau.

Nghe có vẻ đau. Chúc may mắn!


1
Bạn nói rằng điều đó là không thể và sau đó cung cấp một giải pháp khả thi :) Trên thực tế, phương pháp tôi đang thực hiện tương tự như đề xuất của bạn ngoại trừ tôi không so sánh kết quả bằng một công cụ bên ngoài mà thực hiện tất cả bằng SQL. Cảm ơn.
Tony

2

Vài năm trước tôi đã viết một công cụ để làm việc đó - so sánh dữ liệu giữa hai cơ sở dữ liệu. Kể từ đó, tôi đã chuyển đổi nó thành một phần mềm thương mại và được xuất bản tại

www.sql-server-tool.com

  • một giấy phép duy nhất có giá 99 đô la, nhưng bạn có thể dùng thử miễn phí trong 30 ngày.

Chương trình - được đặt tên SCT cho "Công cụ so sánh máy chủ SQL" (Tôi chưa bao giờ giỏi trong việc đặt tên mọi thứ :) - có rất nhiều tùy chọn tinh chỉnh, như: bỏ qua các cột được chọn hoặc chỉ định phương pháp so sánh (bản ghi theo bản ghi hoặc khóa chính / so sánh chỉ số). So sánh "phiên" có thể được lưu và phát lại sau mà không cần nhập lại các tham số. Tham số dòng lệnh có thể được sử dụng để tự động hoàn toàn so sánh.

Đối với hàng chục triệu hàng, có thể hơi chậm - trong trường hợp đó tôi khuyên bạn nên bắt đầu với một tập hợp dữ liệu nhỏ hơn - giả sử chỉ so sánh 1.000 hàng đầu tiên - và xem có cần tinh chỉnh quá trình không.

Dariusz Dziewialtowski-Gintowt


Cảm ơn đã giới thiệu ứng dụng của bạn, tôi đã dùng thử nhưng nó không so sánh các lược đồ khác nhau , đó là điều tôi cần làm. Nó thất bại trong khi lấy dữ liệu từ bảng đầu tiên. Tôi cũng không chắc liệu ứng dụng sẽ xử lý số lượng dữ liệu tôi có hay không vì dường như không có cách nào để giới hạn số lượng hàng được so sánh; cái bàn tôi đã thử nó có 99 triệu hàng.
Tony
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.