2009-03-23 80 views
15

Tôi có cơ sở dữ liệu SQL Server và thực hiện các thay đổi trong đó. Một số bảng cơ sở dữ liệu có các bản ghi đang bắt đầu các bản ghi yêu cầu ứng dụng của tôi chạy. Tôi muốn kiểm soát phiên bản trên cơ sở dữ liệu và các bản ghi (hàng) này. Có thể làm điều này và bó nó vào SVN phiên bản kiểm soát tôi có cho mã nguồn của tôi hoặc có những giải pháp khác cho điều này? Tôi muốn thực hiện điều này để có thể trở về phiên bản trước của cơ sở dữ liệu và so sánh các thay đổi giữa các phiên bản cơ sở dữ liệu. Nó sẽ là tốt đẹp nếu các công cụ này là miễn phí, mã nguồn mở hoặc không phải là rất tốn kém.Làm thế nào để kiểm soát phiên bản cơ sở dữ liệu SQL Server?

Môi trường của tôi là Visual C# Express, SQL Server 2008 Express và Tortoise SVN.

+0

Ngừng của http://stackoverflow.com/questions/173/how-do-i-version-my-ms-sql-database-in-svn? –

+0

Xem câu hỏi này: http://stackoverflow.com/questions/4952/database-version-control –

+0

Một mẹo là phải có một mẫu đặt tên chung cho các bảng này để bất kỳ quá trình nào bạn sử dụng sẽ có thời gian dễ dàng hơn để xác định cái nào để xử lý. Tôi thêm "_LKP" (tra cứu) vào cuối tất cả các bảng nơi dữ liệu vẫn được giữ nguyên. –

Trả lời

3

Chúng tôi vừa bắt đầu thực hiện các bước sau trên một số dự án của chúng tôi và có vẻ như hoạt động khá tốt, để điền các bảng "tĩnh".

Kịch bản lệnh của chúng tôi tuân theo mẫu mà bảng tạm thời được tạo và sau đó được điền bằng thứ mà chúng tôi muốn bảng thật giống. Chúng tôi chỉ đưa các giá trị có thể đọc được vào người ở đây (tức là chúng tôi không bao gồm các cột IDENTITY/GUID). Phần còn lại của tập lệnh lấy bảng tạm thời và thực hiện các câu lệnh INSERT/UPDATE/DELETE thích hợp để làm cho bảng thực giống với bảng tạm thời. Khi chúng ta phải thay đổi dữ liệu "tĩnh" này, tất cả những gì chúng ta phải cập nhật là dân số của bảng tạm thời. Điều này có nghĩa là DIFFing giữa các phiên bản hoạt động như mong đợi và các tập lệnh rollback đơn giản như nhận được phiên bản trước đó từ điều khiển nguồn.

Chỉ có thể viết INSERT/UPDATE/DELETE một lần. Thực tế, các kịch bản lệnh của chúng ta phức tạp hơn một chút và có hai bộ xác nhận hợp lệ chạy trước các câu lệnh DML thực tế. Một bộ xác thực dữ liệu bảng tạm thời (nghĩa là chúng tôi sẽ không vi phạm bất kỳ ràng buộc nào bằng cách cố gắng làm cho cơ sở dữ liệu giống với bảng tạm thời). Người kia xác thực bảng tạm thời và cơ sở dữ liệu đích (tức là các khóa ngoại có sẵn).

0

Bạn có thể lấy phiên bản SQL Management Studio cho SQL Server Express. Tôi tin rằng bạn sẽ có thể sử dụng điều này để tạo ra các kịch bản của lược đồ cơ sở dữ liệu của bạn. Tôi nghĩ rằng sẽ để lại cho bạn để tạo ra các kịch bản bằng tay để chèn các hồ sơ bắt đầu.

Sau đó, đặt tất cả tập lệnh vào kiểm soát nguồn, cùng với tập lệnh chính chạy các tập lệnh riêng lẻ theo đúng thứ tự.

Bạn sẽ có thể chạy khác biệt bằng cách sử dụng windiff (miễn phí với Visual Studio SDK), hoặc khác Beyond Compare là không tốn kém, và một công cụ khác biệt/hợp nhất/đồng bộ tuyệt vời.

0

Hệ thống nhóm MS Visual Studio dành cho nhà phát triển cơ sở dữ liệu có chức năng dễ dàng tạo tập lệnh tạo cho toàn bộ lược đồ. Hạn chế duy nhất là chi phí!

Bạn đã cân nhắc sử dụng SubSonic chưa?

0

Bạn nên sử dụng phiên bản DB cụ thể hơn.

http://msdn.microsoft.com/en-us/library/ms189050.aspx

Khi một trong hai READ_COMMITTED_SNAPSHOT hoặc cơ sở dữ liệu ALLOW_SNAPSHOT_ISOLATION tùy chọn là ON, bản sao logic (phiên bản) được duy trì cho tất cả các dữ liệu sửa đổi được thực hiện trong cơ sở dữ liệu . Mỗi lần một hàng được sửa đổi bởi một giao dịch cụ thể, phiên bản của Cơ sở dữ liệu lưu trữ phiên bản của ảnh đã được cam kết trước đây của hàng trong tempdb.Mỗi phiên bản được đánh dấu bằng giao dịch số thứ tự của giao dịch đã thực hiện thay đổi. Các phiên bản của hàng đã sửa đổi được xích bằng cách sử dụng một liên kết danh sách. Giá trị hàng mới nhất luôn là được lưu trữ trong cơ sở dữ liệu hiện tại và bị xích vào các hàng được phiên bản được lưu trữ trong tempdb.

1

Có một sản phẩm microsoft miễn phí được gọi là Database Publishing Wizard mà bạn có thể sử dụng để viết toàn bộ cơ sở dữ liệu (lược đồ và dữ liệu). Thật tuyệt vời khi chụp nhanh trạng thái hiện tại của DB và sẽ cho phép bạn tạo lại từ đầu tại bất kỳ điểm nào

1

Phiên bản cơ sở dữ liệu (giản đồ) chúng tôi sử dụng các thuộc tính tùy chỉnh được thêm vào cơ sở dữ liệu khi trình cài đặt được chạy . Nội dung của các tập lệnh này được tạo bằng các tập lệnh xây dựng của chúng tôi.

Các kịch bản để thiết lập các thuộc tính như sau:

DECLARE @AssemblyDescription sysname 
SET @AssemblyDescription = N'DailyBuild_20090322.1' 

DECLARE @AssemblyFileVersion sysname 
SET @AssemblyFileVersion = N'0.9.3368.58294' 

-- The extended properties DatabaseDescription and DatabaseFileVersion contain the 
-- AssemblyDescription and AssemblyFileVersion of the build that was used for the 
-- database script that creates the database structure. 
-- 
-- The current value of these properties can be displayed with the following query: 
-- SELECT * FROM sys.extended_properties 

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseDescription') 
BEGIN 
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription 
END 
ELSE 
BEGIN 
    EXEC sys.sp_addextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription 
END 

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseFileVersion') 
BEGIN 
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion 
END 
ELSE 
BEGIN 
    EXEC sys.sp_addextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion 
END 
GO 
0

tôi sử dụng bcp cho điều này (tiện ích tải số lượng lớn, một phần của SQL Server chuẩn cài đặt, phiên bản Express bao gồm).

Mỗi bảng có dữ liệu cần có tệp điều khiển Table.ctl và tệp dữ liệu Table.csv (đây là các tệp văn bản có thể được tạo từ cơ sở dữ liệu hiện có sử dụng bcp). Là tệp văn bản, các tệp này có thể dễ dàng được phiên bản.

Là một phần của lô thế hệ chúng tôi (xem my answer there để biết thêm thông tin), tôi lặp qua từng tập tin điều khiển như thế này:

SET BASE_NAME=MyDatabaseName 
SET CONNECT_STRING=.\SQLEXPRESS 

FOR /R %%i IN (.) DO (
    FOR %%j IN ("%%~fi\*.ctl") DO (
    ECHO + %%~nj 
    bcp %BASE_NAME%..%%~nj in "%%~dpsj%%~nj.csv" -T -E -S %CONNECT_STRING% -f "%%~dpsj%%~nj.ctl" >"%TMP%\%%~nj.log" 
    IF %ERRORLEVEL% GTR 0 (
     TYPE "%TMP%\%%~nj.log" 
     GOTO ERROR_USAGE 
    ) 
) 
) 

Một hạn chế hiện tại của kịch bản này là tên của tập tin phải là tên của bảng, có thể không khả thi nếu tên bảng chứa các ký tự đặc biệt cụ thể.

2

Hỗ trợ dữ liệu tĩnh đang được thêm vào Kiểm soát nguồn SQL 2.0, hiện có sẵn trong phiên bản beta. Thông tin thêm về làm thế nào để thử này có thể được tìm thấy ở đây:

http://www.red-gate.com/messageboard/viewtopic.php?t=12298

+0

Chỉ cần một lưu ý để cho bạn biết rằng Kiểm soát nguồn SQL v2 hiện có sẵn với hỗ trợ dữ liệu tĩnh. –

0

project này có một ví dụ tốt về triển khai và rollback

4

Cuối câu trả lời nhưng hy vọng hữu ích cho độc giả khác

Tôi có thể đề nghị sử dụng bổ trợ SSMS được gọi là Kiểm soát nguồn ApexSQL. Bằng cách sử dụng bổ trợ này, các nhà phát triển có thể dễ dàng ánh xạ các đối tượng cơ sở dữ liệu bằng hệ thống điều khiển nguồn thông qua trình hướng dẫn trực tiếp từ SSMS. Nó bao gồm hỗ trợ cho Git, TFS, Mercurial, Subversion, TFS (bao gồm Visual Studio Online) và các hệ thống kiểm soát nguồn khác. Nó cũng bao gồm hỗ trợ cho kiểm soát nguồn dữ liệu tĩnh (vì vậy bạn có thể kiểm soát phiên bản hồ sơ cũng).

Sau khi tải xuống và cài đặt Kiểm soát nguồn ApexSQL, chỉ cần nhấp chuột phải vào cơ sở dữ liệu bạn muốn kiểm soát phiên bản và điều hướng đến menu phụ Kiểm soát nguồn ApexSQL trong SSMS. Nhấp vào “cơ sở dữ liệu liên kết để kiểm soát nguồn” tùy chọn và chọn hệ thống kiểm soát nguồn và mô hình phát triển cơ sở dữ liệu, ví dụ:

enter image description here

Sau đó, bạn có thể loại trừ đối tượng mà bạn không muốn được liên kết với kiểm soát nguồn.Có thể loại trừ các đối tượng cụ thể theo chủ sở hữu hoặc loại.

Trên bước tiếp theo, bạn sẽ được nhắc nhở để cung cấp các thông tin đăng nhập cho hệ thống quản lý kiểm soát nguồn:

enter image description here

Khi đã xong, chỉ cần nhấp vào nút “Finish” và “Hành động cửa sổ trung tâm sẽ được hiển thị, cung cấp các đối tượng sẽ được cam kết vào kho lưu trữ (theo mặc định, nếu kho lưu trữ trống).

Khi cơ sở dữ liệu đã được liên kết với điều khiển nguồn, tất cả các hoạt động có thể được thực hiện từ một máy khách điều khiển nguồn sẽ có sẵn từ ngăn "Object Explorer". Những bao gồm:

  • kiểm tra ra có hoặc không có khóa các đối tượng phiên bản,
  • lịch sử xem của đối tượng đó và áp dụng phiên bản cụ thể,
  • thay đổi quan điểm về đối tượng đó đã được thực hiện và
  • nơi dữ liệu từ bảng để kiểm soát nguồn bằng cách sử dụng “Liên kết dữ liệu tĩnh”

Bạn có thể đọc bài viết này để biết thêm thông tin: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/

Các vấn đề liên quan