Apa cara yang baik untuk memigrasikan perubahan DB dari Pengembangan ke QA ke lingkungan Produksi? Saat ini kami:
- Script perubahan dalam file SQL dan lampirkan ke item kerja TFS.
- Pekerjaan ini ditinjau oleh rekan sejawat
- Ketika pekerjaan siap untuk pengujian maka SQL dijalankan pada QA.
- Pekerjaan diuji QA
- Ketika pekerjaan siap untuk produksi maka SQL dijalankan pada basis data produksi.
Masalahnya adalah ini sangat manual. Itu bergantung pada pengembang mengingat untuk melampirkan sql atau peer-reviewer menangkapnya jika pengembang lupa. Kadang-kadang, itu akhirnya menjadi tester atau penyebar QA yang menemukan masalah.
Masalah kedua adalah bahwa Anda terkadang perlu mengoordinasikan perubahan secara manual jika dua tugas terpisah mengubah objek database yang sama. Ini mungkin memang seperti itu tetapi sepertinya masih ada cara otomatis untuk "menandai" masalah ini atau semacamnya.
Pengaturan kami: Toko pengembangan kami penuh dengan pengembang dengan banyak pengalaman DB. Proyek kami sangat berorientasi pada DB. Kami terutama toko .NET dan MS SQL. Saat ini kami menggunakan Item Kerja MS TFS untuk melacak pekerjaan kami. Ini berguna untuk perubahan kode karena ini menghubungkan perubahan ke item pekerjaan sehingga saya bisa mengetahui dengan tepat perubahan apa yang perlu saya sertakan saat bermigrasi ke lingkungan QA dan Produksi. Kami saat ini tidak menggunakan proyek DB tetapi dapat beralih ke yang di masa depan (mungkin itu adalah bagian dari jawabannya).
Saya sangat terbiasa dengan sistem kontrol sumber saya mengurus hal-hal seperti ini untuk saya dan ingin memiliki hal yang sama untuk SQL saya.
sumber
Jawaban:
Dalam lingkungan VS, saya selalu menggunakan proyek database untuk mengimplementasikan skrip pembaruan. Saya cenderung menggunakan nama yang tidak imajinatif seperti "DatabaseUpdate17.sql" atau "PriceUpdateFebruary2010.sql" untuk skrip saya. Memiliki mereka sebagai proyek basis data memungkinkan saya mengikat mereka ke tugas Server Team, bug (dan jika kita melakukan review kode, juga). Saya juga memasukkan dalam setiap basis data (yang saya punya otoritas atas) sebuah tabel khusus untuk kumpulan perubahan skema.
Nah, itu mengurus 3 dari 6 Ws .
Saya menyertakan pernyataan masukkan untuk mencatat awal tambalan dan juga akhir tambalan. Peristiwa yang terjadi di luar tambalan adalah hal yang perlu diperhatikan.
Misalnya, masukkan "mulai tambalan" untuk "tambalan 17" akan terlihat seperti:
Karena itu juga menangkap ketika indeks dibangun kembali, Anda harus menjalankan yang berikut ini setiap bulan atau lebih untuk menghapus peristiwa tersebut:
Versi sebelumnya yang sebelumnya diposting di Server Fault .
Dalam lingkungan yang sesuai dengan SOX dan PCI-DSS, Anda tidak akan pernah memiliki akses ke server produksi. Karena itu skrip harus jelas dan dilaksanakan sebelumnya. Komentar di bagian atas skrip pembaruan mencakup daftar tabel baru, procs tersimpan, fungsi, dll. Serta daftar tabel yang dimodifikasi, procs tersimpan, fungsi, dll. Jika data diubah, jelaskan apa yang sedang dimodifikasi dan mengapa.
Saya tidak pernah menemukan alat yang memungkinkan kami melacak ini secara otomatis. Majikan sebelumnya menggunakan prinsip "pemilik basis data" - satu dan hanya satu orang yang secara pribadi bertanggung jawab atas database. Orang ini tidak akan menjadi satu-satunya pengembang yang bekerja melawan database itu, tetapi semua perubahan harus melalui mereka. Ini telah bekerja dengan cukup baik untuk mencegah perubahan dari bertabrakan dan merusak satu sama lain.
sumber
Sudahkah Anda melihat Kontrol Sumber SQL? Anda dapat menggunakannya untuk menghubungkan SQL Server Anda ke TFS / SVN / Vault atau VSS - http://www.red-gate.com/products/sql-development/sql-source-control/
sumber
Solusi lain adalah menggunakan sesuatu seperti PowerDesigner, ERWin, dll untuk merancang dan mengelola perubahan pada basis data Anda.
Kami mulai beralih ke kebijakan di mana basis data dimodelkan di PowerDesigner. Semua perubahan pada struktur / kode basis data dilakukan dalam model, diperiksa ke dalam kontrol sumber dan kemudian skrip perubahan dihasilkan dari model untuk mengimplementasikan perubahan dalam basis data. Script perubahan ini juga diperiksa untuk kontrol sumber. Perubahan besar ditinjau oleh rekan kerja dan PowerDesigner membuat ini sangat mudah menggunakan fitur bawaan.
PowerDesigner adalah alat pemodelan generik yang mendukung lebih dari sekadar basis data sehingga kami mulai menggunakannya untuk mengelola persyaratan, membuat diagram konseptual, fisik, dan arsitektur (juga OOM), dll. Pada dasarnya, kami menggunakannya untuk menyediakan tulang punggung bagi kami. proses rekayasa perangkat lunak.
(Saya sama sekali tidak berafiliasi dengan Sybase, yang mengembangkan PowerDesigner - hanya berpikir saya akan melemparkannya ke sana).
sumber
DB Ghost
DB Ghost adalah alat favorit saya untuk mengelola basis data.
Manfaat
[4] sangat berguna untuk membuat perubahan lokal atau membuat instance terpisah untuk lingkungan yang berbeda. Sebenarnya sangat mudah bahwa saya membuat database terpisah untuk setiap fitur atau bug yang saya kerjakan yang berdampak pada database.
Detail
Keuntungan utama menggunakannya daripada mempertahankan perubahan eksplisit atau skrip migrasi adalah bahwa Anda sebagian besar tidak perlu mempertahankan skrip perubahan atau migrasi eksplisit - Anda sebagian besar dapat mempertahankan hanya 'versi saat ini' dari database Anda. Salah satu aspek yang mengganggu dalam mengelola skrip migrasi adalah tidak ada cara mudah untuk melihatnya, misalnya daftar kolom dalam sebuah tabel (berdasarkan skrip migrasi). Tentu saja beberapa perubahan perlu dibuat sebagai migrasi eksplisit, tetapi cukup mudah untuk ditangani sebagai skrip terpisah.
Konsekuensi yang sangat bagus untuk dapat mengelola database sebagai (satu set) skrip dan juga dapat dengan cepat membuat contoh baru adalah bahwa unit menguji kode database penting sangat mudah (dan juga cukup menyenangkan). Saya menggunakan tSQLt untuk pengujian unit.
Saya hanya berharap ada alat serupa untuk DBMS-s lainnya.
sumber
Saya tahu ini kedengarannya berlebihan bagi kebanyakan DBA:
Sudahkah Anda mempertimbangkan menggunakan Ruby on Rails untuk melacak perubahan Database (dan hanya perubahan DB). Anda tidak perlu menjalankan aplikasi apa pun atau menulis kode ruby, dll. Tapi saya menemukan gaya migrasi (begitulah sebutannya) cukup berguna: http://guides.rubyonrails.org/migrations.html
Sql Server juga didukung, Anda mungkin harus menggunakan JRuby + JDBC.
sumber