Làm thế nào một nhóm theo dõi lược đồ cơ sở dữ liệu thay đổi?


67

Phương pháp kiểm soát phiên bản nào giúp nhóm người theo dõi thay đổi lược đồ cơ sở dữ liệu?


Bạn đang cố gắng để đạt được điều gì ở đây? Bạn đang cố gắng cảnh báo mọi người về những thay đổi hoặc tạo ra một bản kiểm toán xem ai đã thay đổi cái gì và khi nào? Cái gì khác hoàn toàn?
ScottCher

@Scott - Về cơ bản để có thể tạo gần giống như một bản kiểm toán cho các nhà phát triển khác - vì vậy chúng tôi biết rằng chúng tôi có lược đồ dev cập nhật nhất và có thể dễ dàng kiểm tra các trang web trực tiếp để xem họ đang chạy lược đồ nào.
Toby

1
Đây là mô phỏng cho câu hỏi tôi vừa đăng nhưng tôi nghĩ chúng đủ khác nhau để trả lời cả hai dba.stackexchange.com/questions/64/ Kẻ
Beth Whitezel

1
@Bit Offer - Tôi đồng ý và tôi nghĩ câu trả lời của tôi cho câu hỏi mà bạn tham chiếu cũng đứng ở đây. Sử dụng một công cụ như PowerDesigner hoặc ERWin có thể giúp phiên bản kiểm soát thiết kế cơ sở dữ liệu - nếu cơ sở dữ liệu được mô hình hóa bên ngoài và tất cả các thay đổi được lên kế hoạch thông qua mô hình, bạn có thể kiểm soát và phổ biến những thay đổi đó để xem xét.
ScottCher

1
Kiểm tra Liquibase hoặc Flyway
a_horse_with_no_name

Câu trả lời:


44

chỉ vài phút trước tôi đã kiểm tra điều này: Một bảng nên tồn tại trong tất cả các dự án có cơ sở dữ liệu , có vẻ đủ đơn giản để đưa vào thực tế, hãy kiểm tra xem:

Nó được gọi là lược đồ_version (hoặc di chuyển, hoặc bất cứ điều gì phù hợp với bạn) và mục đích của nó là để theo dõi các thay đổi cấu trúc hoặc dữ liệu cho cơ sở dữ liệu. Một cấu trúc có thể (ví dụ trong MySQL) là:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

chèn vào các giá trị lược đồ_version ( key, extra) ('001', 'phiên bản lược đồ');

Cho dù bạn thêm bảng này từ việc năn nỉ dự án hay ngay sau khi bạn triển khai phiên bản đầu tiên cho máy chủ dàn dựng hay sản xuất là tùy thuộc vào bạn.

Bất cứ khi nào bạn cần thực thi một tập lệnh SQL để thay đổi cấu trúc cơ sở dữ liệu hoặc thực hiện di chuyển dữ liệu, bạn cũng nên thêm một hàng trong bảng đó. Và thực hiện điều đó thông qua một câu lệnh chèn ở đầu hoặc cuối của tập lệnh đó (được cam kết với kho lưu trữ mã của dự án).

Giáo dục


1
@David - Đây gần như là một câu hỏi theo đúng nghĩa của nó, nhưng bạn có thể giải thích rất nhanh về cách bảng có thể phản hồi cho VCS của bạn không? Chỉ với một bãi chứa thủ công?
Toby

@Toby - với việc triển khai, các tập lệnh đã được đưa vào SVN và nhà phát triển đã cung cấp SVN rev hoặc lỗi JIRA # - chúng tôi (dbas) đã chèn ghi chú nhanh của họ và rev # vào bảng này. Tuy nhiên, để gắn kết nó lại với nhau, chúng tôi đã tạo một trang web để trỏ đến bảng này với một siêu liên kết đến JIRA.
Hội trường David

Đúng. Về cơ bản, OP có nó ngược - bạn sử dụng các tập lệnh triển khai mà phiên bản của bạn, bạn không làm việc từ các cơ sở dữ liệu. Những cái đó chỉ hoạt động trong các trường hợp suy biến (đơn giản hóa) - bạn có thể phải thực hiện các phép biến đổi nhiều bước để cập nhật một lược đồ mà công cụ không thể tạo ra lạc hậu. Nhưng các kịch bản triển khai có thể xử lý việc này.
TomTom

23

Tôi nghĩ phương pháp tốt nhất là tạo cơ sở dữ liệu như một phần của quá trình xây dựng của bạn . Giữ tất cả các tập lệnh trong kiểm soát nguồn với phần còn lại của mã và mọi người chịu trách nhiệm cho môi trường của riêng họ.

Không thành công, RedGate có một công cụ để tích hợp kiểm soát nguồn vào SSMSSQL So sánh rất hữu ích để so sánh / đồng bộ hóa các lược đồ MS SQL Server. Visual Studio Database Edition cũng có một công cụ so sánh lược đồ tích hợp .

Một câu hỏi SO khác dẫn tôi đến Migrator Dot Net mà tôi sẽ bắt đầu điều tra trong thời gian rảnh rỗi. Nó có vẻ là một phương pháp tốt, nhưng nó có thể là một khoản đầu tư nhiều thời gian / chi phí hơn là bạn sẵn sàng thực hiện.


"Phiên bản cơ sở dữ liệu" của Visual Studio từng là một sản phẩm riêng biệt nhưng hiện được bao gồm trong các phiên bản bao gồm Team Server. Cá nhân tôi thích công cụ RedGate (So sánh SQL) để giữ chúng đồng bộ.
Tangurena

12

eiefai đã đề cập Một bảng nên tồn tại trong tất cả các dự án có cơ sở dữ liệu . Đây là một bài đăng blog tuyệt vời, nhưng IMO nó chỉ là một phần của giải pháp làm việc để kiểm soát sửa đổi cơ sở dữ liệu. Tôi nghĩ rằng bất kỳ nỗ lực nào để "trả lời" câu hỏi này trong thế giới thực cần phải xem xét một số thông tin khác về VCS và cơ sở dữ liệu:


8

Có một vài góc độ khác nhau để tiếp cận câu hỏi này, tôi nghĩ vậy. Góc "công cụ đầu tiên", tôi tin rằng, sẽ thay đổi dựa trên nền tảng và sở thích cá nhân. Tình huống cụ thể: Tôi đang sử dụng Dự án cơ sở dữ liệu trong MS Visual Studio, nhưng tôi không chắc chắn rằng đây là một giải pháp tuyệt vời cho MySQL. Tôi cũng biết những người được bán khá nhiều trên các công cụ yêu thích của họ từ Redgate, Erwin, Embarcadero, v.v.

Ngoài ra còn có một góc "đầu tiên" cho câu hỏi này, hy vọng sẽ được xem xét lại trên trang web này trong các câu hỏi tiếp theo. Các tổ hợp phím trong quy trình này đang đưa lược đồ của bạn dưới sự kiểm soát nguồn và quản lý các thay đổi để bạn có thể áp dụng các thay đổi lược đồ từ phiên bản "x" sang phiên bản "y" theo yêu cầu.

Một câu trả lời dứt khoát cho chủ đề này cuối cùng sẽ trông giống như một cuốn sách, vì vậy có lẽ nên bắt đầu bằng cách tham khảo một: Redgate gần đây đã xuất bản một cuốn sách điện tử miễn phí có tên " Hướng dẫn phát triển dựa trên nhóm máy chủ SQL ", và trong khi có Có rất nhiều điều để tranh luận, đó là một nơi khá tốt để bắt đầu tranh luận, IMO. Trái với tên, phần lớn tài liệu trong cuốn sách này đủ chung để áp dụng cho bất kỳ DB nào (không chỉ SQL Server) và bất kỳ bộ công cụ nào (không chỉ Redgate). Nếu bạn chưa thấy điều này, thì ít nhất nó cũng đáng để đọc lướt qua.

Cuối cùng, có lẽ đáng để liên kết trong "câu trả lời kế thừa" từ stackoverflow .


5

SchemaCrawler là công cụ của tôi để tạo một tệp văn bản với tất cả các đối tượng lược đồ cơ sở dữ liệu. Tôi đã thiết kế đầu ra văn bản này để có thể đọc được cả con người, cũng như có thể chống lại đầu ra tương tự từ một máy chủ khác.

Trong thực tế, những gì tôi đã tìm thấy là việc xuất ra một tệp văn bản của lược đồ cơ sở dữ liệu là hữu ích, khi được thực hiện như một phần của bản dựng. Bằng cách này, bạn có thể kiểm tra tệp văn bản vào hệ thống kiểm soát mã nguồn của mình và có lịch sử phiên bản về cách lược đồ của bạn đã phát triển theo thời gian. SchemaCrawler được thiết kế để tự động hóa điều này, từ dòng lệnh.


Để tìm kiếm, hãy nhìn vào code.google.com/p/oracle-ddl2svn
popalka
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.