Prosedur Tersimpan di bawah Kontrol Sumber, praktik terbaik

16

Saat ini saya menggunakan Tortoise SVN untuk sumber mengontrol Aplikasi Web .NET. Apa yang akan menjadi cara terbaik untuk membawa prosedur tersimpan SQL Server kami ke dalam Kontrol Sumber? Saat ini saya menggunakan VS 2010 sebagai lingkungan pengembangan dan menghubungkan ke database SQL Server 2008 R2 off-premise menggunakan SQL Server Data Tools (SSDT).

Apa yang telah saya lakukan di masa lalu adalah menyimpan procs ke file .sql dan menjaga file ini di bawah kendali sumber. Saya yakin pasti ada cara yang lebih efisien dari ini? Apakah ada ekstensi yang dapat saya instal pada VS2010, SSDT atau bahkan SQL Server pada mesin produksi?

QFDev
sumber
2
Jika Anda menggunakan jenis proyek SSDT di Visual Studio, tambahkan proyek itu ke kontrol sumber. Itu dia.
Mark Storey-Smith
1
Tolong jelaskan tujuan Anda - apakah Anda hanya mencari versi objek database, atau apakah Anda mencoba menggunakan ini sebagai platform penyebaran?
Jon Seigel
Pertanyaan serupa stackoverflow.com/questions/146543/…
MiFreidgeim SO-stop being evil

Jawaban:

14

Ada alat di luar sana, seperti ini dari Redgate , tetapi saya selalu menemukan bahwa yang terbaik adalah menyimpan sebagai file SQL, bahkan mungkin dalam Proyek Database (SSDT?) Dalam solusi Anda.

Bersamaan dengan ini, saya menyarankan pedoman berikut:

  • Selalu menganggap versi SVN sebagai "saat ini" / "terbaru"
  • Pastikan bahwa setiap skrip yang Anda jalankan memiliki " if exists then drop" yang sesuai di awal
  • Ingatlah untuk membuat skrip izin Anda, jika ada

Anda awalnya dapat membuat file SQL ini dengan skrip langsung dari SSMS, dan Anda dapat mengatur SSMS untuk skrip semua " drop" dan " create" serta izin Anda.

RoKa
sumber
Saya tidak mengetahui jenis proyek basis data dan baru saja mulai menjelajahi SSDT, tetapi ini terlihat menjanjikan. Saya telah memilih solusi ini karena tidak ada ketergantungan pada alat pihak ke-3 dan saya dapat dengan mudah memasukkan file .sql ke Kontrol Sumber kami saat ini.
QFDev
Juga tidak mengizinkan hak untuk pengembang dan mereka yang memiliki hak hanya menyebarkan dari kontrol sumber.
HLGEM
3
Hati-hati dengan "jika ada mereka drop, (kembali) buat dengan definisi baru" jika mengubah tabel / tampilan yang direferensikan oleh pandangan / procs lain. Saya telah mencapai keadaan di mana output dari pandangan bergantung seperti itu rusak (jenis kolom dan konten dipindahkan tetapi nama tidak) karena rencana kueri digunakan kembali tanpa mengkompilasi ulang dengan asumsi struktur sebelumnya. Opsi yang lebih aman adalah "jika tidak ada buat dummy" diikuti oleh "ubah tabel / tampilan / proc" karena alter akan mengikuti catatan sysdepends untuk membatalkan rencana yang diperlukan dan drop + create tidak akan menjatuhkan tisu seperti catatan tersebut dan buat tidak akan memindai untuk referensi yang menggantung.
David Spillett
Komentar oleh @DavidSpillett bahkan lebih penting jika Anda memiliki pemicu dalam kontrol versi, karena drop + create dapat gagal bahkan di jalan buntu, tidak boleh terjadi dengan membuat dummy + alter
James Z
4

Menyimpan file SQL di kontrol sumber memberikan kontrol atas file SQL saja. Itu tidak mengontrol perubahan objek database yang sebenarnya, juga tidak mencegah perubahan simultan objek database yang sama oleh banyak pengguna (dan saya kira Anda juga ingin mengontrolnya). Apa yang kami gunakan adalah alat pihak ke-3 ( Versi ApexSQL), itu terintegrasi baik dengan SSMS dan VS, Anda dapat memilih apakah akan bekerja dengan versi database objek, atau dengan versi Kontrol Sumber. Jika Anda mengedit versi database, versi itu secara otomatis diperiksa hanya untuk Anda, jadi tidak ada orang lain yang bisa mengeditnya (tidak menggabungkan perubahan dari pengguna yang berbeda). Hanya ketika Anda memeriksanya lagi, orang lain dapat memodifikasinya. Dan Anda dapat membuat versi SC Anda berbeda dari versi objek hidup (Saya menggunakannya ketika saya berangkat hari itu dan berencana untuk menyelesaikan pengeditan dan mengujinya di hari berikutnya)

Carol Baker West
sumber
3

Coba Ankhsvn , sangat dianjurkan dan gratis.

Dari beranda:

AnkhSVN adalah Penyedia Kontrol Sumber Subversi untuk Microsoft Visual Studio 2005, 2008, 2010 dan 2012 .

AnkhSVN menyediakan dukungan manajemen kode sumber Apache ™ Subversion® untuk semua jenis proyek yang didukung oleh Visual Studio dan memungkinkan Anda untuk melakukan operasi kontrol versi paling umum langsung dari dalam Microsoft Visual Studio IDE.

Dasbor Pending Changes memberi Anda wawasan unik dalam proses pengembangan Anda dan menyediakan akses mudah ke kode sumber dan fitur manajemen masalah. Integrasi kode sumber yang dalam (SCC) memungkinkan Anda untuk fokus pada pengembangan, sementara AnkhSVN melacak semua perubahan Anda dan memberi Anda alat untuk secara efektif menangani kebutuhan spesifik Anda.

SqlACID
sumber
3

Saya telah mencoba proyek database RedGate dan Visual Studio dan saya lebih suka menyimpan definisi database dalam proyek database. Segera setelah database menjadi bagian dari solusi, Anda dapat menggunakan penyedia kontrol sumber pilihan Anda. Sebagian besar memiliki integrasi Visual Studio yang sangat baik.

Dengan alat SSDT Anda memiliki 'versi terbaru' dari definisi basis data, memungkinkan Anda untuk dengan mudah membuat perbandingan skema dan menghasilkan skrip peningkatan skema.

Konon, skema biasanya hanya bagian dari persamaan. Dalam kehidupan nyata ternyata database sudah memiliki banyak data. Dan pengguna saya cenderung agak kecewa ketika kehilangan itu.

Jadi segera setelah saya meluncurkan v1.0 perlu muncul untuk mempertahankan skrip upgrade. Kadang-kadang ini hanya berisi perubahan skema, tetapi berkali-kali saya perlu membuat default berdasarkan konten dari beberapa tabel lain, perlu merilis batasan tertentu sampai saya seeded data dll. Biasanya hanya dengan memperbarui skema tidak cukup memotongnya. Preferensi saya adalah memiliki skrip pemutakhiran ini di folder terpisah di proyek basis data juga. Ini biasanya terlihat seperti 'upgrade dari v1.0 ke v1.1'.

Basis data saya selalu memiliki tabel referensi yang memberi tahu saya nomor versi saat ini, jadi saya dapat memblokir pembaruan yang tidak kompatibel. Pernyataan pertama dalam skrip pemutakhiran saya memeriksa versi saat ini dan memberikan jaminan jika berbeda dari yang diharapkan.

Manfaat lain dari proyek basis data adalah untuk dapat menggunakan set data yang berbeda berdasarkan skema yang sama. Saya memiliki kumpulan data yang berbeda untuk pengembangan, tim QA, tes penerimaan pengguna dan untuk tes integrasi otomatis. Karena proyek basis data hanya dapat memiliki 1 skrip pasca-penempatan, triknya di sini adalah membuat proyek basis data baru yang merujuk proyek 'master' dan menjadikan kumpulan data khusus sebagai bagian dari proses pasca penempatan proyek tersebut.

Ini adalah 2 sen saya, Apapun proses yang Anda lakukan, di atas segalanya, itu pasti cocok untuk Anda dan tim Anda dan mudah-mudahan mendukung Anda dengan sebagian besar tugas umum.

suplex
sumber
0

Saya akhirnya menulis alat sendiri.

Ini tersedia untuk diunduh gratis - http://www.gitsql.net

Saya harap ini membantu orang lain yang ingin mencapai tujuan akhir yang sama.

Berikut ini adalah artikel yang menjelaskan cara sumber mengontrol SQL Server. http://gitsql.net/documentation-04_SQL_Server_and_GIT

Saya sudah mencoba membuatnya semudah mungkin. (3 layar)

  • Terhubung ke SQL Server
  • Pilih objek
  • Pilih folder untuk mengekspor / impor dari

Saya juga - secara tidak sengaja - menambahkan fitur untuk dapat secara selektif memilih objek individual untuk diimpor - atau diekspor. Yang membuatnya jauh lebih mudah saat berkembang.

Saya biasanya akan membuat perubahan ke prosedur tersimpan dan sebuah tabel, dan kemudian mengekspor dua objek tersebut ke direktori GIT.

Kemudian saya menggunakan Source Tree untuk melihat perubahan secara visual dan kemudian mengkomitnya ke dalam bitbucket jika saya senang.

Anup Saund
sumber
4
unduh gratis - tetapi hanya untuk 20 objek. Jawaban ini hanyalah iklan untuk produk Anda.
Thronk
-1

Perusahaan saya baru saja mengembangkan alat baru ini ( gratis ) yang membantu Anda untuk dengan mudah mengekstrak skrip untuk basis data SQL, dapat melakukan perbandingan , dapat meluncurkan WinMerge untuk membandingkan skrip dengan basis data secara langsung, dan juga dapat menyelaraskan perbedaan baik memperbarui skrip atau menerapkan perubahan ke database (kecuali untuk tabel, yang akan melibatkan lebih banyak kerumitan dan lebih banyak risiko).

Servantt adalah WinMerge untuk membandingkan Database SQL Server dengan Skrip Versi-Terkontrol.

Ini mendukung dan mendorong praktik terbaik dalam pengembangan perangkat lunak:

  • Menyimpan objek Database di bawah kontrol versi (*)
  • Menghapus hak akses dari pengembang di lingkungan produksi
  • Tinjauan DBA tentang perubahan prosedur / tampilan untuk hambatan kinerja dan standar penamaan
  • Memberi nama objek menggunakan pengidentifikasi yang sepenuhnya memenuhi syarat dan pembatas yang dikurung (itu memperbaiki skrip CREATE PROSEDUR / VIEW / FUNGSI / etc)

(*) Skrip disimpan ke folder lokal yang dapat menjadi copy Git, Subversion, TFS, Source Safe, atau VCS lainnya yang berfungsi.

Unduh Gratis: http://servantt.com

Versi profesional (yang masih dalam pengembangan) akan menjadi binatang yang sama sekali berbeda - itu ditargetkan pada penyebaran otomatisasi (manajemen rilis), untuk mengotomatisasi tugas-tugas seperti memperbarui IIS, memperbarui Layanan Windows, dll.

drizin
sumber
Alat ini tidak berfungsi.
Neeraj Kumar
@NeerajKumar ada alamat "hubungi kami" di halaman tempat Anda dapat menjelaskan masalah Anda. Saya akan dengan senang hati membantu. Ada lebih dari seribu pengguna aktif, saya menganggap itu berfungsi dalam beberapa hal :-)
drizin