Apakah Anda menggunakan kontrol sumber untuk item basis data Anda? [Tutup]

596

Saya merasa bahwa toko saya memiliki lubang karena kami tidak memiliki proses yang solid di tempat untuk versi perubahan skema database kami. Kami melakukan banyak cadangan sehingga kami sedikit banyak terlindungi, tetapi praktik yang buruk mengandalkan garis pertahanan terakhir Anda dengan cara ini.

Anehnya, ini tampaknya menjadi benang merah. Banyak toko yang saya ajak bicara mengabaikan masalah ini karena database mereka tidak sering berubah, dan mereka pada dasarnya hanya berusaha untuk teliti.

Namun, saya tahu bagaimana ceritanya. Hanya masalah waktu sebelum hal-hal berbaris salah dan ada yang hilang.

Apakah ada praktik terbaik untuk ini? Apa sajakah strategi yang berhasil untuk Anda?

Brian MacKay
sumber
Dibahas di akhir Podcast 54. blog.stackoverflow.com/2009/05/podcast-54
Chris Moschini

Jawaban:

387

Harus membaca Dapatkan basis data Anda di bawah kontrol versi . Periksa serangkaian posting oleh K. Scott Allen.

Ketika datang ke kontrol versi, database seringkali warga negara kelas dua atau bahkan ketiga. Dari apa yang saya lihat, tim yang tidak akan pernah berpikir untuk menulis kode tanpa kontrol versi dalam sejuta tahun - dan memang begitu - entah bagaimana bisa sepenuhnya tidak menyadari perlunya kontrol versi di sekitar database kritis yang diandalkan oleh aplikasi mereka. Saya tidak tahu bagaimana Anda bisa menyebut diri Anda seorang insinyur perangkat lunak dan mempertahankan wajah yang lurus ketika basis data Anda tidak persis di bawah tingkat kontrol sumber yang sama ketatnya dengan kode lainnya. Jangan biarkan ini terjadi pada Anda. Dapatkan basis data Anda di bawah kontrol versi.

Gulzar Nazim
sumber
1
Saya mengikuti sangat dekat metodologi yang dijelaskan dalam artikel yang direferensikan. Anda tidak perlu menerapkan setiap level, dan ada variasi yang akan bekerja sama baiknya. Sistem ini fleksibel, mudah disesuaikan, memungkinkan untuk kontrol halus atas skema dan perubahan data, dan bekerja dengan sangat baik sebagai praktik terbaik untuk kontrol sumber basis data. Bagian yang bisa rumit dan menambah keamanan hampir sama dengan sisa proses adalah alat untuk membantu mengelola skrip. Ini bisa sesederhana penggabungan file, atau serumit penyebaran otomatis. Pertama dapatkan src ctrl, lalu pikirkan tentang alat.
ulty4life
1
Ada sistem kontrol versi terdistribusi untuk database yang disebut Klonio yang seperti Git / GitHub untuk database.
Augiwan
134

Basis data sendiri? Tidak

Skrip yang membuatnya, termasuk sisipan data statis, prosedur tersimpan dan sejenisnya; tentu saja. Mereka adalah file teks, mereka termasuk dalam proyek dan diperiksa masuk dan keluar seperti yang lainnya.

Tentu saja di dunia yang ideal alat manajemen basis data Anda akan melakukan ini; tetapi Anda hanya harus disiplin tentang hal itu.

blowdart
sumber
7
Dengan Mysql Workbench Anda dapat memiliki semua itu dalam file terstruktur (xml) yang dapat dibuka dan ditangani dengan GUI. Menjadi xml hanya teks, ya itu bisa versi tanpa harus mengetik satu kalimat sql.
levhita
6
Basis data itu sendiri PERSIS apa yang perlu di bawah kendali sumber, karena jika tidak itu adalah proses manual untuk mengembalikan / secara selektif menerapkan perubahan skema agar sesuai dengan cabang basis kode Anda. Jika saya memiliki tiga proyek dependen, dan saya mengalihkan semuanya ke cabang tertentu (mis. Dengan seperangkat migrasi skema tertentu), maka saya juga harus dapat mengalihkan basis data saya ke skema itu. Demikian juga, itu harus mendukung operasi gabungan dan rebase. Teknologi ini sangat kurang. Kerangka kerja entitas tidak memiliki dukungan untuk lingkungan multi-pengembang ketika datang ke migrasi database.
Triynko
@Triynko yang dalam prakteknya tidak bekerja. Ada alasan mengapa Microsoft membatalkan proyek database mereka tipe studio visual 3+ kali. Itu karena mengetahui skema sumber dan target kehilangan semua informasi tentang migrasi skema. Jika Anda merefleksikan skema Anda, sejumlah besar informasi terpesona. Kami membatalkan upaya kami untuk menggunakan model itu dan alih-alih menggunakan skrip migrasi tambahan yang dibuat dengan hati-hati agar dapat dijalankan kembali dll, jadi nyatakanlah toleran.
Shiv
Saya akan mencatat bahwa diskusi di Shiv dan Tryinko umumnya dibingkai sebagai, "Berbasis negara" vs "Berbasis migrasi." Ini masalah yang cukup kontroversial dan kedua pendekatan memiliki pro dan kontra. Saya akan mencatat bahwa pendekatan berbasis migrasi cenderung membuatnya lebih cepat untuk membuat / mengganti / memperbarui database dengan migrasi terbaru, sedangkan pendekatan berbasis negara benar-benar membuat perubahan. Pendekatan mana yang lebih baik sebagian tergantung pada apakah Anda memprioritaskan perubahan basis data yang sering (gunakan berbasis negara) atau sering penyebaran untuk produksi / tes / lokal / CI (gunakan berbasis migrasi).
Brian
Adapun mengapa Microsoft akan menggunakan pendekatan berbasis negara: Jauh lebih mudah untuk membangun tooling / otomatisasi untuk pendekatan berbasis negara, dan itu jauh lebih penting untuk pengembang. Pengembang yang saat ini TIDAK menggunakan kontrol versi untuk database mereka akan sering menemukan pendekatan berbasis negara lebih menarik, karena kurang mengganggu. Tentu saja, alasannya kurang mengganggu adalah bahwa pekerjaan migrasi didorong dari pengembang ke insinyur rilis ... yang akan menghasilkan skrip diff (misalnya, melalui SSDT) ​​dan kemudian memperbaikinya secara manual, berharap mereka tidak ketinggalan apa pun.
Brian
36

Saya sangat menyukai migrasi Rails ActiveRecord. Itu abstrak DML ke skrip ruby ​​yang kemudian dapat dengan mudah versi di repositori sumber Anda.

Namun, dengan sedikit kerja, Anda bisa melakukan hal yang sama. Perubahan DDL (ALTER TABLE, dll.) Dapat disimpan dalam file teks. Simpan sistem penomoran (atau stempel tanggal) untuk nama file, dan terapkan secara berurutan.

Rails juga memiliki tabel 'versi' di DB yang melacak migrasi terapan terakhir. Anda dapat melakukan hal yang sama dengan mudah.

Matt Rogish
sumber
1
Sepenuhnya disetujui, versi migrasi saat ini mengikat komit saat ini, sehingga Anda dapat menjalankan tugas menyapu dan menjaga sistem bersih dan proses sederhana dengan perubahan db
Anatoly
33

Lihat LiquiBase untuk mengelola perubahan basis data menggunakan kontrol sumber.

killdash10
sumber
7
Sebagai tambahan, Flyway adalah produk pesaing yang menawarkan fungsionalitas serupa yang juga mendapat perhatian baik pada utas StackOverflow lainnya.
Steve Chambers
29

Anda tidak boleh hanya masuk dan mulai memasukkan perintah "ALTER TABLE" untuk mengubah basis data produksi. Proyek yang saya jalankan memiliki basis data di setiap situs pelanggan, dan setiap perubahan pada basis data dibuat di dua tempat, file dump yang digunakan untuk membuat database baru di situs pelanggan baru, dan file pembaruan yang dijalankan pada setiap pembaruan yang memeriksa nomor versi database Anda saat ini terhadap angka tertinggi dalam file, dan memperbarui database Anda di tempat. Jadi misalnya, beberapa pembaruan terakhir:

if [ $VERSION \< '8.0.108' ] ; then
  psql -U cosuser $dbName << EOF8.0.108
    BEGIN TRANSACTION;
    --
    -- Remove foreign key that shouldn't have been there.
    -- PCR:35665
    --
    ALTER TABLE     migratorjobitems
    DROP CONSTRAINT migratorjobitems_destcmaid_fkey;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.108'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.108
fi

if [ $VERSION \< '8.0.109' ] ; then
  psql -U cosuser $dbName << EOF8.0.109
    BEGIN TRANSACTION;
    --
    -- I missed a couple of cases when I changed the legacy playlist
    -- from reporting showplaylistidnum to playlistidnum
    --
    ALTER TABLE     featureidrequestkdcs
    DROP CONSTRAINT featureidrequestkdcs_cosfeatureid_fkey;
    ALTER TABLE     featureidrequestkdcs
    ADD CONSTRAINT  featureidrequestkdcs_cosfeatureid_fkey
    FOREIGN KEY     (cosfeatureid)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    --
    ALTER TABLE     ticket_system_ids
    DROP CONSTRAINT ticket_system_ids_showplaylistidnum_fkey;
    ALTER TABLE     ticket_system_ids
    RENAME          showplaylistidnum
    TO              playlistidnum;
    ALTER TABLE     ticket_system_ids
    ADD CONSTRAINT  ticket_system_ids_playlistidnum_fkey
    FOREIGN KEY     (playlistidnum)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.109'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.109
fi

Saya yakin ada cara yang lebih baik untuk melakukan ini, tetapi sejauh ini berhasil bagi saya.

Paul Tomblin
sumber
Kami melakukan hal serupa kecuali kami menempatkan setiap "jika versi" dalam file terpisah dan memiliki alat yang menjalankan file secara berurutan.
jwanagel
Kami juga mengerjakan hal yang sama, kecuali skrip SQL diinstal (instal baru atau peningkatan) bersama dengan file aplikasi, dan lokasi serta tanggal dan waktu eksekusi skrip dicatat.
si618
Saya juga telah menulis sesuatu yang hampir persis seperti ini, tetapi untuk basis data Jet (mis. MS Access). Kami saat ini menggunakan DB Ghost untuk SQL Server, yang melakukan banyak hal untuk Anda.
Kenny Evitt
Anda dapat mengganti begin transaction; ... end transaction;dengan meneruskan --single-transactionke psql.
Vladimir
18

Iya. Kode adalah kode. Aturan praktis saya adalah bahwa saya harus dapat membangun dan menggunakan aplikasi dari awal , tanpa melihat mesin pengembangan atau produksi.

Stu Thompson
sumber
13

Praktik terbaik yang saya lihat adalah membuat skrip build untuk memo dan membangun kembali database Anda pada server staging. Setiap iterasi diberikan folder untuk perubahan basis data, semua perubahan ditulis dengan "Drop ... Create". Dengan cara ini Anda dapat mengembalikan ke versi sebelumnya kapan saja dengan mengarahkan folder build ke versi yang Anda inginkan.

Saya percaya ini dilakukan dengan NaNt / CruiseControl.

Sara Chipps
sumber
11

YA, saya pikir penting untuk versi database Anda. Bukan data, tapi skema pasti.

Di Ruby On Rails, ini ditangani oleh kerangka kerja dengan "migrasi". Setiap kali Anda mengubah db, Anda membuat skrip yang menerapkan perubahan dan memeriksanya menjadi kontrol sumber.

Toko saya sangat menyukai gagasan itu sehingga kami menambahkan fungsionalitas ke build berbasis Java kami menggunakan skrip shell dan Ant. Kami mengintegrasikan proses tersebut ke dalam rutinitas penerapan kami. Akan cukup mudah untuk menulis skrip untuk melakukan hal yang sama dalam kerangka kerja lain yang tidak mendukung DB versi out-of-the-box.

Pete
sumber
8

Proyek-proyek Database baru di Visual Studio menyediakan kontrol sumber dan mengubah skrip.

Mereka memiliki alat yang bagus yang membandingkan database dan dapat menghasilkan skrip yang mengubah skema satu menjadi yang lain, atau memperbarui data dalam satu agar sesuai dengan yang lain.

Skema db "robek" untuk membuat banyak, banyak file .sql kecil, satu per perintah DDL yang menjelaskan DB.

+ tom


Info tambahan 2008-11-30

Saya telah menggunakannya sebagai pengembang selama setahun terakhir dan sangat menyukainya. Itu membuatnya mudah untuk membandingkan pekerjaan dev saya dengan produksi dan menghasilkan skrip untuk digunakan untuk rilis. Saya tidak tahu apakah itu fitur yang hilang yang dibutuhkan DBA untuk proyek "tipe perusahaan".

Karena skema "robek" menjadi file sql kontrol sumber berfungsi dengan baik.

Salah satunya adalah Anda harus memiliki pola pikir yang berbeda ketika Anda menggunakan proyek db. Alat ini memiliki "proyek db" di VS, yang hanya sql, ditambah database lokal yang dihasilkan secara otomatis yang memiliki skema dan beberapa data admin lainnya - tetapi tidak ada data aplikasi Anda, ditambah db dev lokal yang Anda gunakan untuk aplikasi data dev bekerja. Anda jarang mengetahui db yang dihasilkan secara otomatis, tetapi Anda harus mengetahuinya di sana sehingga Anda dapat membiarkannya sendirian :). Db khusus ini jelas dikenali karena memiliki Bimbingan dalam namanya,

Proyek VS DB melakukan pekerjaan yang baik untuk mengintegrasikan perubahan db yang telah dibuat anggota tim lain ke proyek lokal Anda / db terkait. tetapi Anda perlu mengambil langkah ekstra untuk membandingkan skema proyek dengan skema dev db lokal Anda dan menerapkan mod. Masuk akal, tetapi pada awalnya terasa canggung.

Proyek DB adalah alat yang sangat kuat. Mereka tidak hanya menghasilkan skrip tetapi dapat langsung menerapkannya. Pastikan untuk tidak menghancurkan db produksi Anda dengan itu. ;)

Saya sangat menyukai proyek-proyek VS DB dan saya berharap untuk menggunakan alat ini untuk semua proyek db saya ke depan.

+ tom

Tom A
sumber
8

Memerlukan tim pengembangan untuk menggunakan sistem manajemen kontrol sumber basis data SQL bukanlah peluru ajaib yang akan mencegah masalah terjadi. Dengan sendirinya, kontrol sumber database memperkenalkan overhead tambahan karena pengembang diminta untuk menyimpan perubahan yang mereka buat pada objek dalam skrip SQL terpisah, buka klien sistem kontrol sumber, periksa file skrip SQL menggunakan klien dan kemudian terapkan perubahan pada live database.

Saya dapat menyarankan menggunakan add-in SSMS yang disebut ApexSQL Source Control . Ini memungkinkan pengembang untuk dengan mudah memetakan objek database dengan sistem kontrol sumber via wizard langsung dari SSMS. Add-in termasuk dukungan untuk TFS, Git, Subversion dan sistem SC lainnya. Ini juga termasuk dukungan untuk sumber yang mengendalikan data Statis.

Setelah mengunduh dan menginstal Kontrol Sumber ApexSQL, cukup klik kanan database yang ingin Anda kontrol versi dan navigasikan ke sub-menu Kontrol Sumber ApexSQL di SSMS. Klik tautan Tautan basis data ke kontrol sumber, pilih sistem kontrol sumber dan model pengembangan. Setelah itu, Anda harus memberikan informasi masuk dan string repositori untuk sistem kontrol sumber yang Anda pilih.

Anda dapat membaca artikel ini untuk informasi lebih lanjut: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/

AliceF
sumber
6

Saya lakukan dengan menyimpan skrip buat / perbarui dan skrip yang menghasilkan sampledata.

Paco
sumber
6

Ya, kami melakukannya dengan menjaga SQL kami sebagai bagian dari build kami - kami menjaga DROP.sql, CREATE.sql, USERS.sql, VALUES.sql, dan versi mengontrolnya, sehingga kami dapat kembali ke versi yang ditandai.

Kami juga memiliki tugas semut yang dapat membuat ulang db kapan pun diperlukan.

Plus, SQL kemudian ditandai bersama dengan kode sumber Anda yang menyertainya.

DustinB
sumber
6

Skema paling sukses yang pernah saya gunakan pada suatu proyek telah menggabungkan cadangan dan file SQL diferensial. Pada dasarnya kami akan mengambil cadangan db kami setelah setiap rilis dan melakukan dump SQL sehingga kami dapat membuat skema kosong dari awal jika kami juga perlu. Kemudian kapan pun Anda perlu membuat perubahan ke DB Anda akan menambahkan skrip alter ke direktori sql di bawah kontrol versi. Kami akan selalu mengawali nomor urut atau tanggal ke nama file sehingga perubahan pertama akan menjadi seperti 01_add_created_on_column.sql, dan skrip berikutnya adalah 02_added_customers_index. Mesin CI kami akan memeriksa ini dan menjalankannya secara berurutan pada salinan baru db yang telah dipulihkan dari cadangan.

Kami juga memiliki beberapa skrip yang dapat digunakan devs untuk menginisialisasi ulang db lokal mereka ke versi saat ini dengan satu perintah.

Mike Deck
sumber
6

Kami mengontrol sumber semua objek yang dibuat dabase kami. Dan hanya untuk menjaga kejujuran para pengembang (karena Anda dapat membuat objek tanpa mereka berada dalam Kontrol Sumber), dbas kami secara berkala mencari apa pun yang tidak ada dalam kontrol sumber dan jika mereka menemukan sesuatu, mereka menjatuhkannya tanpa menanyakan apakah itu ok.

HLGEM
sumber
5

Saya menggunakan SchemaBank untuk mengontrol versi semua perubahan skema database saya:

  • dari hari 1, saya mengimpor dump skema db saya ke dalamnya
  • saya mulai mengubah desain skema saya menggunakan browser web (karena mereka berbasis SaaS / cloud)
  • ketika saya ingin memperbarui server db saya, saya menghasilkan skrip perubahan (SQL) dari itu dan berlaku untuk db. Di Schemabank, mereka mengamanatkan saya untuk melakukan pekerjaan saya sebagai versi sebelum saya dapat menghasilkan skrip pembaruan. Saya suka latihan semacam ini sehingga saya selalu bisa melacak kembali ketika saya perlu.

Aturan tim kami adalah JANGAN PERNAH menyentuh server db secara langsung tanpa menyimpan karya desain terlebih dahulu. Tapi itu terjadi, seseorang mungkin tergoda untuk melanggar aturan, demi kenyamanan. Kami akan mengimpor dump skema lagi ke schemabank dan membiarkannya melakukan diff dan bash seseorang jika ditemukan ketidaksesuaian. Meskipun kita dapat membuat skrip alter dari skrip itu untuk membuat desain db dan skema kita sinkron, kita hanya membenci itu.

Omong-omong, mereka juga memungkinkan kami membuat cabang di dalam pohon kontrol versi sehingga saya dapat mempertahankan satu untuk pementasan dan satu untuk produksi. Dan satu lagi untuk coding sandbox.

Alat desain skema berbasis web yang cukup apik dengan kontrol versi dan manajemen perubahan.

Leigh Pyle
sumber
4

Saya memiliki semua yang diperlukan untuk membuat ulang DB saya dari logam kosong, minus data itu sendiri. Saya yakin ada banyak cara untuk melakukannya, tetapi semua skrip saya dan semacamnya disimpan dalam subversi dan kita dapat membangun kembali struktur DB dan semacamnya dengan menarik semua yang keluar dari subversi dan menjalankan installer.

itsmatt
sumber
4

Saya biasanya membangun skrip SQL untuk setiap perubahan yang saya buat, dan yang lain untuk mengembalikan perubahan itu, dan menjaga skrip tersebut di bawah kontrol versi.

Kemudian kami memiliki sarana untuk membuat database baru yang terkini sesuai permintaan, dan dapat dengan mudah berpindah antar revisi. Setiap kali kami melakukan rilis, kami menyatukan skrip (mengambil sedikit pekerjaan manual, tapi itu jarang benar - benar sulit ) sehingga kami juga memiliki satu set skrip yang dapat mengkonversi antar versi.

Ya, sebelum Anda mengatakannya, ini sangat mirip dengan hal-hal yang Rails dan lainnya lakukan, tetapi tampaknya bekerja dengan cukup baik, jadi saya tidak punya masalah mengakui bahwa saya tanpa malu-malu mengangkat ide :)

Dan
sumber
4

Saya menggunakan skrip SQL CREATE yang diekspor dari MySQL Workbech, kemudian menggunakan fungsionalitas mereka "Ekspor SQL ALTER" Saya berakhir dengan serangkaian skrip buat (tentu saja bernomor) dan skrip alter yang dapat menerapkan perubahan di antara mereka.

3.- Ekspor skrip SQL ALTER Biasanya Anda harus menulis pernyataan ALTER TABLE dengan tangan sekarang, yang mencerminkan perubahan yang Anda buat pada model. Tetapi Anda bisa menjadi pintar dan membiarkan Workbench melakukan kerja keras untuk Anda. Cukup pilih File -> Export -> Forward Engineer SQL ALTER Script ... dari menu utama.

Ini akan meminta Anda untuk menentukan file SQL CREATE yang harus dibandingkan dengan model saat ini.

Pilih skrip SQL CREATE dari langkah 1. Alat ini kemudian akan menghasilkan skrip ALTER TABLE untuk Anda dan Anda dapat menjalankan skrip ini terhadap database Anda untuk memperbaruinya.

Anda dapat melakukan ini menggunakan Browser Kueri MySQL atau klien mysql.Voila! Model dan basis data Anda sekarang telah disinkronkan!

Sumber: Edisi Komunitas MySQL Workbench: Panduan untuk Sinkronisasi Skema

Semua skrip ini tentu saja ada di dalam di bawah kontrol versi.

lehita
sumber
4

Ya selalu. Anda harus dapat membuat ulang struktur basis data produksi Anda dengan satu set data sampel yang berguna kapan pun diperlukan. Jika tidak, seiring waktu perubahan kecil untuk membuat hal-hal berjalan dilupakan maka suatu hari Anda akan digigit, waktu besar. Asuransi yang mungkin Anda pikir tidak Anda butuhkan tetapi pada hari Anda melakukannya, harganya layak 10 kali lipat!

AndrewB
sumber
4

Ada banyak diskusi tentang model database itu sendiri, tetapi kami juga menyimpan data yang diperlukan dalam file .SQL.

Misalnya, agar berguna, aplikasi Anda mungkin memerlukan ini dalam pemasangan:

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('AUD', 'Australian Dollars');

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('USD', 'US Dollars');

Kami akan memiliki file yang disebut di currency.sqlbawah subversi. Sebagai langkah manual dalam proses pembuatan, kami membandingkan currency.sql sebelumnya dengan yang terbaru dan menulis skrip pemutakhiran.

WW.
sumber
Kami menyimpan data yang diperlukan dalam database (siapa yang akan terpukul?), Kemudian menggunakan alat kami untuk menghasilkan skrip sisipan / pembaruan ini untuk menjaga data referensi tetap sinkron antara dev, qa, produksi, dll. Jauh lebih mudah untuk mengelola data dan perubahannya dengan cara ini. Semua skrip dikontrol oleh versi / alat konfigurasi kami.
Karen Lopez
Apakah ini praktis ketika basis data Anda memiliki jutaan baris?
Ronnie
4

Kami versi dan sumber mengontrol semua yang ada di sekitar basis data kami:

  • DDL (buat dan ubah)
  • DML (data referensi, kode, dll.)
  • Perubahan Model Data (menggunakan ERwin atau ER / Studio)
  • Perubahan konfigurasi basis data (izin, objek keamanan, perubahan konfigurasi umum)

Kami melakukan semua ini dengan pekerjaan otomatis menggunakan Change Manager dan beberapa skrip khusus. Kami memiliki Change Manager yang memantau perubahan-perubahan ini dan memberi tahu ketika mereka selesai.

Karen Lopez
sumber
4

Saya percaya bahwa setiap DB harus di bawah kendali sumber, dan pengembang harus memiliki cara mudah untuk membuat database lokal mereka dari awal. Terinspirasi oleh Visual Studio for Database Professionals, saya telah membuat alat open-source yang membuat skrip dengan basis data MS SQL, dan menyediakan serta cara mudah untuk menyebarkannya ke mesin DB lokal Anda. Coba http://dbsourcetools.codeplex.com/ . Selamat bersenang-senang, - Nathan.

Nathan Rozentals
sumber
4

Jika Database Anda adalah SQL Server, kami mungkin memiliki solusi yang Anda cari. SQL Source Control 1.0 kini telah dirilis.

http://www.red-gate.com/products/SQL_Source_Control/index.htm

Ini terintegrasi ke dalam SSMS dan menyediakan lem antara objek database Anda dan VCS Anda. 'Scripting out' terjadi secara transparan (menggunakan mesin SQL Compare di bawah tenda), yang seharusnya membuatnya mudah untuk digunakan sehingga pengembang tidak akan berkecil hati untuk mengadopsi proses.

Solusi Visual Studio alternatif adalah ReadyRoll , yang diimplementasikan sebagai sub-jenis Proyek Database SSDT. Ini mengambil pendekatan yang didorong oleh migrasi, yang lebih cocok dengan persyaratan otomatisasi tim DevOps.

David Atkinson
sumber
Saya tidak akan merekomendasikan produk Red-Gate kepada siapa pun. Saya telah menggunakan SQL Source Control 2.2 untuk beberapa waktu. Sebenarnya segera mereka merilis versi 3. Setelah itu mereka akhirnya memberikan dukungan untuk 2.2. Bahkan mereka tidak memperbaiki bug apa pun (yang saya tidak mempertimbangkan fitur baru - bug adalah bug), mereka juga tidak menyertakan dukungan untuk TFS2012 saat dirilis. Perusahaan saya beralih dari TFS2010 ke TFS2012, dan kami tidak dapat terhubung ke TFS lagi. Kami benar-benar harus membuang perangkat lunak Red Gate, karena satu-satunya pilihan yang mereka berikan kepada kami adalah membeli versi baru perangkat lunak mereka. Tidak ada rencana untuk memperbarui ver. 2.2.
Dima
Berharap mereka memiliki dukungan CLI untuk sistem operasi non-microsoft.
lnnite
Sepertinya mereka memiliki beberapa alat untuk MySQL red-gate.com/products/mysql/mysql-comparison-bundle
Jeff
3

Saya sumber mengontrol skema database dengan membuat skrip semua objek (definisi tabel, indeks, prosedur tersimpan, dll). Tapi, untuk data itu sendiri, cukup mengandalkan cadangan biasa. Ini memastikan bahwa semua perubahan struktural ditangkap dengan riwayat revisi yang tepat, tetapi tidak membebani database setiap kali data berubah.

Ben Hoffstein
sumber
3

Di bisnis kami, kami menggunakan skrip perubahan basis data. Ketika skrip dijalankan, namanya disimpan dalam database dan tidak akan berjalan lagi, kecuali jika baris itu dihapus. Skrip diberi nama berdasarkan tanggal, waktu dan cabang kode, sehingga eksekusi yang terkontrol dimungkinkan.

Banyak dan banyak pengujian dilakukan sebelum skrip dijalankan di lingkungan langsung, sehingga "oopsi" hanya terjadi, secara umum, pada basis data pengembangan.

Wes P
sumber
3

Kami sedang dalam proses memindahkan semua database ke kontrol sumber. Kami menggunakan sqlcompare untuk skrip basis data (fitur edisi profesi, sayangnya) dan memasukkan hasilnya ke SVN.

Keberhasilan implementasi Anda akan sangat tergantung pada budaya dan praktik organisasi Anda. Orang-orang di sini percaya dalam membuat database per aplikasi. Ada satu set umum database yang digunakan oleh sebagian besar aplikasi dan juga menyebabkan banyak ketergantungan antar-database (beberapa dari mereka adalah lingkaran). Menempatkan skema basis data ke dalam kendali sumber sangat terkenal sulit karena ketergantungan antar-database yang dimiliki sistem kami.

Semoga beruntung untuk Anda, semakin cepat Anda mencobanya semakin cepat Anda akan memiliki masalah Anda beres.

Min
sumber
3

Saya telah menggunakan alat dbdeploy dari ThoughtWorks di http://dbdeploy.com/ . Ini mendorong penggunaan skrip migrasi. Setiap rilis, kami mengkonsolidasikan skrip perubahan ke dalam satu file untuk memudahkan pemahaman dan memungkinkan DBA untuk 'memberkati' perubahan.

David Medinets
sumber
3

Ini selalu menjadi gangguan besar bagi saya juga - sepertinya terlalu mudah untuk membuat perubahan cepat ke database pengembangan Anda, simpan (lupa untuk menyimpan skrip perubahan), dan kemudian Anda terjebak. Anda dapat membatalkan apa yang baru saja Anda lakukan dan mengulanginya untuk membuat skrip perubahan, atau menulisnya dari awal jika Anda ingin tentunya juga, meskipun itu banyak waktu yang dihabiskan untuk menulis skrip.

Alat yang saya gunakan di masa lalu yang telah membantu beberapa ini adalah SQL Delta. Ini akan menunjukkan kepada Anda perbedaan antara dua database (SQL server / Oracle saya percaya) dan menghasilkan semua skrip perubahan yang diperlukan untuk memigrasi A-> B. Hal baik lainnya yang dilakukannya adalah menunjukkan semua perbedaan antara konten basis data antara DB produksi (atau tes) dan DB pengembangan Anda. Karena semakin banyak aplikasi menyimpan konfigurasi dan menyatakan bahwa sangat penting untuk eksekusi mereka dalam tabel database, bisa jadi sangat menyusahkan memiliki skrip perubahan yang menghapus, menambah, dan mengubah baris yang tepat. SQL Delta menunjukkan baris-baris dalam basis data sama seperti mereka akan terlihat pada alat Diff - diubah, ditambahkan, dihapus.

Alat yang luar biasa. Berikut tautannya: http://www.sqldelta.com/

Sam Schutte
sumber
3

RedGate hebat, kami menghasilkan snapshot baru ketika perubahan database dibuat (file biner kecil) dan menyimpan file itu di proyek sebagai sumber daya. Setiap kali kami perlu memperbarui basis data, kami menggunakan perangkat RedGate untuk memperbarui basis data, serta mampu membuat basis data baru dari yang kosong.

RedGate juga membuat snapshot data, sementara saya belum bekerja secara pribadi dengan mereka, mereka sama kuatnya.

Tom Anderson
sumber
Kontrol Sumber SQL Red Gate telah dikembangkan untuk mengatasi masalah ini, jadi silakan lihat dan beri tahu kami apakah itu memenuhi atau tidak memenuhi persyaratan Anda. Keuntungan dari SQL Source Control di atas SQL Compare adalah terintegrasi dengan SSMS dan karenanya tidak memerlukan alat terpisah untuk dimuat untuk mencatat versi skema yang berbeda. [Saya seorang manajer produk di Red Gate]
David Atkinson