Kontrol Versi dengan SQL Server

14

Saya memulai proyek baru dan menggunakan SVN (dengan Tortoise) sebagai Sistem Kontrol Versi saya. Saya bertanya-tanya apakah mungkin untuk juga mempertahankan Database SQL Server menggunakan sistem yang sama.

Saya ingin versi tabel saya / fungsi / tampilan / procs / pemicu / dll. tapi bukan data saya karena semuanya akan menjadi data uji. Saya tidak begitu yakin cara mengatur ini. Saya telah menemukan beberapa opsi tetapi saya ingin tahu apakah ada yang saya lewatkan, dan apakah mungkin ada panduan atau sesuatu di luar sana untuk membantu saya menjalankannya.

Saya telah melihat dan mendengar tentang Gerbang Merah, tetapi saya mencari sesuatu yang gratis (atau setidaknya biaya sangat rendah). Saya tahu saya selalu bisa menulis sesuatu sendiri, tetapi saya tidak benar-benar mencoba menghabiskan waktu untuk itu.

Satu hal yang saya temui adalah paket open source yang disatukan disebut ScriptDB4Svn . Adakah yang pernah menggunakan ini sebelumnya? Apakah itu baik? Bisakah ia melakukan hal-hal yang perlu saya lakukan dan apakah cukup mudah untuk mendapatkan pengaturan?

yannis
sumber
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?Mengapa Anda takut mencobanya sendiri? Ambil saja dan mainkan.
yannis
@YannisRizos - Saya pasti akan melakukannya jika saya tidak mendapat terlalu banyak tanggapan dari ini, saya pada dasarnya hanya ingin mencoba dan menghemat waktu dan melihat apakah ada yang pernah bekerja dengannya sebelumnya, atau jika ada yang punya sesuatu yang mencoba dan diuji langsung dari kelelawar. yang sesuai dengan kebutuhan saya sehingga saya dapat menghemat waktu eksperimen.
Hanya perhatikan betapa baru Anda di sini. Programmer SE bukan tempat yang baik untuk mengajukan pertanyaan hanya untuk menghemat waktu, kami benar-benar berharap Anda melakukan hal-hal seperti itu untuk diri sendiri, yaitu melakukan riset sendiri sebelum bertanya . Atau, sebagai alternatif, tanyakan dalam obrolan (tetapi jangan mengharapkan jawaban yang solid). Karena itu, itu benar-benar tidak masalah karena kalimat terakhir itu bukan pertanyaan inti Anda, yang sebenarnya sangat bagus (dan ditandai dengan benar, itu jarang terjadi bagi pengguna baru, pujian!).
yannis
@YannisRizos - terima kasih. Saya akan masuk ke obrolan untuk melihat apakah saya bisa mendapatkan umpan balik untuk ScriptDB4Svn, dan periksa kembali di sini untuk setiap pembaruan untuk pertanyaan inti. Sunting: Sepertinya saya tidak dapat mengobrol sampai saya memiliki 20 rep. Oh well, kurasa sabar.

Jawaban:

2

Secara teknis Anda bahkan tidak memerlukan alat, Anda dapat skrip objek secara langsung dan memeriksanya ke dalam kontrol sumber. Ini sedikit lebih banyak bekerja tanpa alat, tetapi pasti bisa diterapkan.

BTW: Saya sudah menggunakan alat RedGate dan itu sangat apik dan bernilai uang.

JohnFx
sumber
Jadi pada dasarnya saya akan melakukan pekerjaan saya di Management Studio, dan kemudian mengekspor skrip ke direktori SVN, dan pada dasarnya melakukan itu setiap kali saya mengerjakannya (mengganti yang lama setiap ekspor)? Saya kira itu akan berhasil. Itu akan menjaga fungsionalitas SVN untuk dapat kembali dan semacamnya, tapi ya, itu akan sedikit merepotkan. Mungkin saya akan memeriksa harga RedGate dan melihat apakah itu layak untuk saya.
@ Esc - Cara manual dapat bekerja, Anda hanya perlu berpikir tentang pengembangan SQL Anda secara berbeda. Versi skrip objek adalah yang "resmi" dan yang ada di SQL hanyalah versi kompilasi. Sama seperti kode sumber Anda.
JohnFx
Saya memutuskan untuk melakukan hal-hal secara manual, dan mungkin mengimplementasikan skrip menggunakan bantuan dalam tautan yang disediakan oleh Mike Nakis, tetapi untuk saat ini saya hanya akan menggunakan GUI bawaan dalam Management Studio untuk mengekspor skrip pembuatan DB ketika saya selesai bekerja, dan periksa yang ada di dalam dan biarkan SVN membuat mereka versi seperti itu. Karena saya memutuskan untuk melakukan hal-hal secara manual, Anda mendapatkan jawaban untuk menunjukkan bahwa saya tidak benar-benar membutuhkan alat untuk melakukan hal-hal ini :)
1

Sepertinya Anda memiliki sebagian besar pengaturan Microsoft. Anda bisa melihat-lihat Proyek Database (sebelumnya dikenal sebagai DataDude). Mereka pada dasarnya mengubah T-SQL menjadi bahasa kelas satu di Visual Studio; kamu bisa:

  • Kompilasi proyek - ini tidak hanya membuat skrip final, tetapi memastikan nama objek dll.
  • Lakukan analisis kode statis - misalnya, memastikan bahwa Anda selalu merujuk ke objek dengan memasukkan skema mereka (misalnya [dbo]dalam kebanyakan kasus) untuk peningkatan kinerja 30% yang bagus.
  • Buat skrip berbeda dengan meminta membandingkan versi proyek yang berbeda.
  • Perbarui proyek Anda dari database atau skrip (reverse engineer).
  • Intellisense.
  • Tidak ada alat diagram.

Mereka menyatukan kode Anda dan kode database Anda dengan baik di bawah kendali sumber juga. Jika Anda man-up dan skrip objek database Anda (alih-alih menggunakan Davinci Tools di SSMS) Anda juga menggunakan satu IDE - yang bagus.

Jonathan Dickinson
sumber
0

Anda bisa menggunakan Rails. Rails memiliki konsep migrasi basis data yang dapat Anda terapkan atau putar kembali. Dalam pengalaman saya ini adalah cara terbaik untuk versi database. Anda memeriksa file migrasi ini ke SVN.

Dalam proyek saya saat ini, kami tidak mengembangkan aplikasi di Ruby, tetapi kami masih menggunakan Rails untuk mengelola database. Saya tidak akan melakukannya dengan cara lain.

Vinnie
sumber
Adakah panduan untuk menjelaskan ini sedikit lebih lanjut dan masuk ke pengaturan sesuatu seperti ini?
Sebenarnya, itu bukan ide yang sangat baik untuk menggunakan Rails bersama dengan teknologi .NET.
alternatif
Bab tentang migrasi Rails ( guides.rubyonrails.org/migrations.html ). Ini seharusnya cukup untuk membantu Anda memulai dan memberi Anda semua latar belakang yang Anda butuhkan tentang mengapa ini adalah ide yang bagus. @altern - karena Anda hanya menggunakan Rails untuk memanipulasi dan membuat versi database, ini akan berdampak pada teknologi .NET. Anda dapat mengakses dan menggunakan DB dengan cara yang sama seolah-olah Anda tidak menggunakan rel. Saya tidak keberatan melihat beberapa referensi untuk masalah Anda. Bukankah IronRuby merupakan implementasi .Net dari Ruby and Rails?
Vinnie
> Bukankah IronRuby merupakan implementasi .Net dari Ruby and Rails? IronRuby adalah implementasi .NET dari Ruby . Saya tidak yakin Rails berfungsi dengan baik di IronRuby. Argumen umum saya menentang penggunaan Rails untuk tujuan versi db adalah bahwa Ruby dan teknologi terkait (RoR, migratinos) memiliki kurva belajar yang cukup curam, terutama untuk tugas sederhana seperti versi db. Tidak apa-apa menggunakannya untuk keperluan lain, bukan hanya migrasi. Kalau tidak, itu hanya akan meningkatkan kompleksitas proyek tanpa banyak efek positif.
alternatif
0

Ini telah dibahas sebelumnya pada stackoverflow: /programming/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

Juga, artikel eksternal ini memberikan beberapa informasi tambahan http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated bersama dengan kode sampel dalam bentuk Aplikasi Windows.

Karena apa yang ingin Anda lakukan adalah sesuatu yang telah saya lakukan sendiri untuk MS Access, saya akan memberi tahu Anda apa yang telah saya lakukan jika memberi Anda beberapa ide: Saya telah menulis modul yang disebut Ado2Xml yang mengubah skema dan data ADO apa pun Database diakses untuk xml, dan kembali. Hanya tahu tentang tabel dan tampilan; tidak ada prosedur tersimpan, tidak ada pemicu, tidak ada apa-apa. Bagaimanapun, dalam kasus Anda modul ini akan diganti oleh alat yang Anda mungkin akan menemukan yang melakukan apa yang Anda inginkan dengan MS-SQL. Jadi, setiap kali aplikasi saya diluncurkan, ia membandingkan timestamp dari database dengan timestamp dari file xml yang disimpan; jika file xml lebih baru, maka menghancurkan database dan memanggil Ado2Xml untuk membuatnya kembali dari file xml. Ketika aplikasi saya berhenti, ia melakukan kebalikannya: ia memanggil Ado2Xml untuk mengekspor database ke file xml. Sebenarnya, objek ADO yang mengekstrak skema database karena alasan tertentu sangat lambat, menyebabkan proses ekspor membutuhkan waktu. Jadi, untuk menghindari harus menunggu setiap kali aplikasi saya untuk berhenti dan studio visual untuk beralih dari tata letak debugging ke tata letak pengeditan, tepat sebelum itu mengakhiri aplikasi saya meluncurkan aplikasi eksternal untuk melakukan ekspor, sehingga dapat mengakhiri segera.

Mike Nakis
sumber
Dua tautan yang Anda berikan adalah sesuatu yang saya mungkin tertarik untuk melakukan pengaturan sendiri, jadi pada dasarnya saya dapat mengotomatiskan langkah-langkah manual yang saya lakukan sekarang. Terima kasih untuk itu!
0

Ya, saya telah menggunakan alat serupa (dikembangkan di rumah) pada proyek sebelumnya. Itu akan skrip semua tabel, tampilan, sprocs, pemicu, dll menjadi file .sql individual. Kemudian, kami memiliki skrip yang dijalankan setiap malam untuk "memvalidasi" bahwa semua yang ada di database "pengembangan" kami tercermin dalam kontrol sumber.

Jadi alur kerja normal adalah bahwa Anda akan mengubah kode Anda, mengubah tabel dan sprocs yang sesuai dalam pengembangan database seperti yang diperlukan, maka Anda akan menjalankan alat yang kami miliki yang akan menyegarkan semua file .sql yang dituliskan. Anda kemudian akan memeriksa semuanya sekaligus.

Masalahnya adalah bahwa jika Anda lupa menjalankan alat, kode akan "bekerja" (dan unit test akan lulus) karena database "benar", tetapi sprocs / tabel baru tidak akan menjadi kontrol sumber.

Jadi setiap malam, kami memiliki skrip yang melakukan checkout kode sumber, lalu mencari alat untuk menyegarkan semua skrip. Jika ada perbedaan, itu berarti seseorang lupa memeriksa perubahan mereka dan pemberitahuan email dihasilkan. Itu pada dasarnya hanya cara untuk memastikan kami tidak lupa untuk menjaga kontrol sumber tetap up to date.

Agak menyebalkan karena membuatnya sulit untuk mengerjakan perubahan yang berlangsung beberapa hari, tetapi itu lebih baik daripada tidak memiliki apa-apa ...

Dean Harding
sumber
Bisakah Anda menjelaskan lebih lanjut Then, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.? Terimakasih atas tanggapan Anda.
@Scott: Saya sudah mengedit jawaban untuk memasukkan sedikit lebih detail.
Dean Harding