Kiểm soát phiên bản với SQL Server


14

Tôi đang bắt đầu một dự án mới và sử dụng SVN (với Rùa) làm Hệ thống kiểm soát phiên bản của tôi. Tôi đã tự hỏi nếu có thể duy trì Cơ sở dữ liệu SQL Server bằng cùng một hệ thống.

Tôi muốn phiên bản bảng / chức năng / lượt xem / procs / kích hoạt / v.v. nhưng không phải dữ liệu của tôi vì tất cả sẽ là dữ liệu thử nghiệm. Tôi không thực sự chắc chắn làm thế nào để thiết lập điều này. Tôi đã bắt gặp một vài lựa chọn nhưng tôi muốn biết liệu tôi có thiếu sót gì không, và nếu có thể có một hướng dẫn hoặc một cái gì đó ngoài kia để giúp tôi chạy với nó.

Tôi đã thấy và nghe nói về Red Gate, nhưng tôi đang tìm kiếm thứ gì đó miễn phí (hoặc ít nhất là chi phí rất thấp). Tôi biết tôi luôn có thể tự viết một cái gì đó, nhưng tôi không thực sự cố gắng dành thời gian cho nó.

Một điều tôi đã bắt gặp là một gói nguồn mở được đặt cùng nhau có tên là ScriptDB4Svn . Có ai đã sử dụng điều này trước đây? Liệu nó có tốt không? Nó có thể làm những việc tôi cần nó để làm và nó khá đơn giản để thiết lập?


1
Has anyone used this before? Is it good? Can it do the things I need it to do and is it pretty simple to get setup?Tại sao bạn sợ thử nó cho chính mình? Chỉ cần lấy nó và chơi xung quanh.
yannis

@YannisRizos - Tôi chắc chắn sẽ làm nếu tôi không nhận được quá nhiều phản hồi từ việc này, về cơ bản tôi chỉ muốn thử và tiết kiệm thời gian và xem có ai từng làm việc với nó trước đây không, hoặc nếu có ai đã thử và thử ngay lập tức phù hợp với nhu cầu của tôi để tôi có thể tiết kiệm thời gian thử nghiệm.

Chỉ cần chú ý làm thế nào bạn mới ở đây. Lập trình viên SE không phải là một nơi tốt để đặt câu hỏi chỉ để tiết kiệm thời gian, chúng tôi thực sự mong bạn tự làm những thứ như vậy cho chính mình, tức là tự nghiên cứu trước khi hỏi . Hoặc, thay vào đó, hãy hỏi trong trò chuyện (nhưng đừng mong đợi câu trả lời chắc chắn). Phải nói rằng, điều đó thực sự không quan trọng bởi vì câu cuối cùng không phải là câu hỏi cốt lõi của bạn, đây thực sự là một câu hỏi rất hay (và được gắn thẻ chính xác, điều đó rất hiếm đối với người dùng mới, kudos!).
yannis

@YannisRizos - cảm ơn. Tôi sẽ nhảy vào cuộc trò chuyện để xem liệu tôi có thể nhận được một số phản hồi cho ScriptDB4Svn hay không và kiểm tra lại ở đây để biết bất kỳ cập nhật nào cho câu hỏi cốt lõi. Chỉnh sửa: Có vẻ như tôi không thể trò chuyện cho đến khi tôi có 20 đại diện. Ồ tốt, sự kiên nhẫn tôi đoán.

Câu trả lời:


2

Về mặt kỹ thuật, bạn thậm chí không cần một công cụ, bạn có thể kịch bản trực tiếp các đối tượng và kiểm tra chúng thành kiểm soát nguồn. Đó là một công việc nhiều hơn một chút mà không có công cụ, nhưng nó chắc chắn là hoàn toàn khả thi.

BTW: Tôi đã sử dụng công cụ RedGate và nó khá hấp dẫn và đáng đồng tiền bát gạo.


Vì vậy, về cơ bản tôi sẽ thực hiện công việc của mình trong Management Studio, sau đó xuất các tập lệnh sang thư mục SVN và về cơ bản làm điều đó mỗi khi tôi làm việc với nó (thay thế các tập lệnh cũ mỗi lần xuất)? Tôi đoán rằng sẽ làm việc. Nó sẽ giữ cho chức năng SVN có thể hoàn nguyên và các công cụ, nhưng vâng, nó sẽ là một rắc rối. Có lẽ tôi sẽ kiểm tra giá RedGate và xem nó có xứng đáng với tôi không.

@Scott - Cách thủ công có thể hoạt động, bạn chỉ cần suy nghĩ về sự phát triển SQL của bạn khác nhau. Các phiên bản kịch bản của các đối tượng là phiên bản "chính thức" và phiên bản trong SQL chỉ là phiên bản được biên dịch của nó. Giống như mã nguồn của bạn.
JohnFx

Tôi đã quyết định thực hiện thủ công và có thể triển khai tập lệnh bằng cách sử dụng trợ giúp trong các liên kết mà Mike Nakis cung cấp, nhưng hiện tại tôi sẽ sử dụng GUI tích hợp trong Management Studio để xuất tập lệnh tạo DB khi tôi hoàn thành làm việc và kiểm tra những người trong đó và để SVN giữ cho họ được phiên bản theo cách đó. Vì tôi đã quyết định thực hiện thủ công, bạn nhận được câu trả lời vì đã chỉ ra rằng tôi không thực sự cần một công cụ để thực hiện công cụ này :)

1

Có vẻ như bạn có một thiết lập chủ yếu là Microsoft. Bạn có thể xem qua Dự án cơ sở dữ liệu (trước đây gọi là DataDude). Về cơ bản, họ biến T-SQL thành ngôn ngữ hạng nhất trong Visual Studio; bạn có thể:

  • Biên dịch dự án - nó không chỉ đơn thuần tạo ra một kịch bản cuối cùng, nó đảm bảo tên đối tượng, v.v.
  • Thực hiện phân tích mã tĩnh - ví dụ: đảm bảo rằng bạn luôn tham chiếu đến các đối tượng bằng cách bao gồm lược đồ của chúng (ví dụ: [dbo] trong hầu hết các trường hợp) để tăng hiệu suất 30% tốt đẹp đó.
  • Tạo các tập lệnh diff bằng cách so sánh các phiên bản khác nhau của dự án.
  • Cập nhật dự án của bạn từ cơ sở dữ liệu hoặc tập lệnh (kỹ sư đảo ngược).
  • Trực quan.
  • Không có công cụ biểu đồ.

Họ thống nhất mã của bạn và mã cơ sở dữ liệu của bạn độc đáo dưới sự kiểm soát nguồn. Nếu bạn quản lý và tạo kịch bản cho các đối tượng cơ sở dữ liệu của bạn (thay vì sử dụng Công cụ Davinci trong SSMS), bạn cũng sẽ sử dụng một IDE - thật tuyệt.


0

Bạn có thể sử dụng Rails. Rails có một khái niệm về di chuyển cơ sở dữ liệu mà bạn có thể áp dụng hoặc quay lại. Theo kinh nghiệm của tôi đây là cách tốt nhất để phiên bản cơ sở dữ liệu. Bạn kiểm tra các tệp di chuyển này vào SVN.

Trong dự án hiện tại của tôi, chúng tôi không phát triển ứng dụng trong Ruby, nhưng chúng tôi vẫn đang sử dụng Rails để quản lý cơ sở dữ liệu. Tôi sẽ không làm cách nào khác.


Bất kỳ hướng dẫn để giải thích điều này nhiều hơn một chút và đi vào thiết lập một cái gì đó như thế này lên?

Trên thực tế, đó không phải là một ý tưởng hay để sử dụng Rails cùng với các công nghệ .NET.
altern

Chương về di chuyển Rails ( guide.rubyonrails.org/migations.html ). Điều này là đủ để bạn bắt đầu và cung cấp cho bạn tất cả các nền tảng bạn cần về lý do tại sao đây là một ý tưởng tốt. @altern - vì bạn chỉ đang sử dụng Rails để thao tác và phiên bản cơ sở dữ liệu, nên điều này sẽ có bất kỳ tác động nào đối với các công nghệ .NET. Bạn có thể truy cập và sử dụng DB theo cách tương tự như khi bạn không sử dụng đường ray. Tôi sẽ không thấy một số tài liệu tham khảo cho mối quan tâm của bạn. Không phải IronRuby là một triển khai .Net của Ruby và Rails sao?
Vinnie

> Không phải IronRuby là một triển khai .Net của Ruby và Rails? IronRuby là một triển khai .NET của Ruby . Tôi không chắc Rails hoạt động đúng trên IronRuby. Lập luận chung của tôi về việc sử dụng Rails cho mục đích tạo phiên bản db là Ruby và các công nghệ liên quan (RoR, Migratinos) có đường cong học tập khá dốc, đặc biệt là cho nhiệm vụ đơn giản như phiên bản db. Bạn có thể sử dụng nó cho các mục đích khác, không chỉ di chuyển. Nếu không, nó sẽ chỉ làm tăng sự phức tạp của dự án mà không có nhiều hiệu quả tích cực.
altern

0

Điều này đã được thảo luận trước đây trên stackoverflow: /programming/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

Ngoài ra, bài viết bên ngoài này cung cấp một số thông tin bổ sung http://www.sqlteam.com/article/scripting-database-objects-USE-smo-updated cùng với mã mẫu dưới dạng Ứng dụng Windows.

Vì những gì bạn muốn làm là điều mà tôi đã tự làm cho MS Access, tôi sẽ cho bạn biết những gì tôi đã làm trong trường hợp nó cho bạn một số ý tưởng: Tôi đã viết một mô-đun có tên Ado2Xml để chuyển đổi lược đồ và dữ liệu của bất kỳ ADO nào cơ sở dữ liệu có thể truy cập thành xml và quay lại. Nó chỉ biết về bảng và quan điểm mặc dù; không thủ tục lưu trữ, không kích hoạt, không có gì. Dù sao, trong trường hợp của bạn, mô-đun này được thay thế bởi công cụ mà bạn có thể sẽ tìm thấy đó là những gì bạn muốn với MS-SQL. Vì vậy, mỗi khi ứng dụng của tôi khởi chạy, nó sẽ so sánh dấu thời gian của cơ sở dữ liệu với dấu thời gian của tệp xml đã lưu; nếu tệp xml gần đây hơn, thì nó sẽ phá hủy cơ sở dữ liệu và gọi Ado2Xml để tạo lại từ tệp xml. Khi ứng dụng của tôi chấm dứt, nó thực hiện ngược lại: nó gọi Ado2Xml để xuất cơ sở dữ liệu vào tệp xml. Thực ra, các đối tượng ADO trích xuất lược đồ cơ sở dữ liệu vì một số lý do rất chậm, khiến quá trình xuất phải mất một thời gian. Vì vậy, để tránh phải chờ đợi mỗi lần ứng dụng của tôi chấm dứt và phòng thu trực quan chuyển từ bố cục gỡ lỗi sang bố cục chỉnh sửa, ngay trước khi ứng dụng của tôi khởi chạy một ứng dụng bên ngoài để thực hiện xuất, để nó có thể chấm dứt ngay.


Hai liên kết bạn cung cấp là thứ mà tôi có thể quan tâm khi tự thiết lập, vì vậy về cơ bản tôi có thể tự động các bước thủ công tôi đang làm. Cảm ơn vì những điều đó!

0

Có, tôi đã sử dụng một công cụ tương tự (được phát triển nội bộ) cho một dự án trước đó. Nó sẽ kịch bản tất cả các bảng, dạng xem, sprocs, kích hoạt, v.v. thành các tệp .sql riêng lẻ. Sau đó, chúng tôi đã có một kịch bản chạy mỗi đêm để "xác nhận" rằng mọi thứ trong cơ sở dữ liệu "phát triển" của chúng tôi đều được phản ánh trong kiểm soát nguồn.

Vì vậy, quy trình làm việc bình thường là bạn sẽ thay đổi mã của mình, thay đổi các bảng và sprocs tương ứng trong cơ sở dữ liệu phát triển theo yêu cầu, sau đó bạn sẽ chạy công cụ mà chúng tôi có để làm mới tất cả các tệp .sql đã được kịch bản. Sau đó, bạn sẽ kiểm tra mọi thứ ngay lập tức.

Vấn đề là nếu bạn quên chạy công cụ, mã sẽ "hoạt động" (và các kiểm tra đơn vị sẽ vượt qua) vì cơ sở dữ liệu là "chính xác", nhưng các sprocs / bảng mới sẽ không được kiểm soát nguồn.

Vì vậy, mỗi đêm, chúng tôi có một tập lệnh đã kiểm tra mã nguồn, sau đó rand công cụ để làm mới tất cả các tập lệnh. Nếu có bất kỳ sự khác biệt nào, điều đó có nghĩa là ai đó đã quên kiểm tra các thay đổi của họ và thông báo email đã được tạo. Về cơ bản, đó chỉ là một cách để đảm bảo chúng tôi không quên cập nhật kiểm soát nguồn.

Có một chút khó chịu vì nó khiến cho việc thay đổi kéo dài nhiều ngày trở nên khó khăn, nhưng tốt hơn là không có gì ...


Bạn có thể giải thích về Then, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.? Cám ơn phản hồi của bạn.

@Scott: Tôi đã chỉnh sửa câu trả lời để bao gồm chi tiết hơn một chút.
Dean Harding
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.