Apa alur kerja Anda untuk merencanakan migrasi data?

23

Begitu banyak kali saya telah dibawa pada akhir dari upaya pengembangan perangkat lunak dan telah diberitahu sesuatu seperti "oke, kita punya semua kode baru ini dan memerlukan meja untuk perubahan dan data yang akan bermigrasi".

Sepertinya setiap kali ini merupakan skenario tebakan terbaik yang pernah ada. Saya merasa ini adalah keahlian terlemah saya sebagai DBA.

Saya ingin membahas beberapa pola untuk mendekati, mengelola, dan menguji migrasi data .

Tolong beri tahu saya beberapa praktik terbaik dan / atau di mana saya bisa mendapatkan materi pembelajaran untuk membantu saya menjadi lebih baik di bidang ini.

randomx
sumber

Jawaban:

14

Setiap kali saya melakukannya, kami melakukan dua lintasan ...

  1. mengambil snapshot, dan bekerja di server yang berbeda, gunakan itu untuk menentukan apa yang harus dilakukan untuk migrasi, dan skrip itu.
  2. begitu mereka memiliki skrip di tangan, snapshop dikembalikan pada sistem uji, dan waktunya untuk melihat apakah itu akan berjalan dalam waktu yang diperlukan, atau itu disetel dan dimodifikasi hingga bisa.
  3. minta para pemangku kepentingan menandatangani bahwa tidak ada yang tampak salah dengan data pada sistem pengujian.

Kemudian, selama akhir pekan, Anda memiliki pemadaman terjadwal:

  1. Jumat malam, sistem yang menggunakan basis data diturunkan, cadangan dingin penuh dibuat, dan skrip dijalankan untuk bermigrasi / memodifikasi / apa pun ke data
  2. Sistem dibawa kembali di bawah beberapa alamat pribadi atau entah bagaimana diatur sehingga tidak terbuka untuk siapa pun kecuali para pemangku kepentingan untuk pengujian penerimaan
  3. Jika para pemangku kepentingan menyetujui, sistem akan daring dan dipublikasikan; jika tidak, basis data akan dipulihkan dari cadangan yang dibuat pada Jumat malam, dan Anda memulai proses dari awal lagi.

Dengan jadwal kami, orang-orang basis data umumnya memiliki dari jam 6 sore pada hari Jumat hingga jam 10 pagi pada hari Sabtu untuk menjalankan skrip cadangan & migrasi, jadi tujuan kami adalah bahwa mereka akan berjalan di bawah 8 jam (~ 6 dari itu adalah cadangan), jadi kami d punya waktu untuk pengujian dan koreksi kami sebelum dirilis ke para pemangku kepentingan.

Para pemangku kepentingan diberikan waktu mereka sebelumnya, jadi mereka tahu untuk membiarkan akhir pekan mereka terbuka untuk pengujian di awal jendela. Mereka juga akan diberi tahu akhir jendelanya, biasanya hari Minggu sore, di mana jika semua orang belum menandatangani, kita harus mulai memutar kembali.

Oh, dan tentu saja ... jika seseorang mengalami perubahan selama salah satu tes penerimaan, dan kami membuat perubahan, itu berarti bahwa semua sign-off pemangku kepentingan dibatalkan, dan mereka harus menguji ulang ... jadi kami akan mencoba memberi mereka semua waktu untuk mencari masalah dan menjalankan koreksi sebagai batch, daripada menerapkannya satu per satu.

Untungnya, satu-satunya saat saya mengalami salah satu situasi di mana kami tidak dapat memiliki waktu henti yang signifikan, sistem yang saya migrasikan diumpankan dari skrip, bukan input pengguna, jadi saya bisa menjalankan dua sistem paralel, dan menukarnya ketika semuanya ditandatangani. (hanya sekali ada masalah, ketika bos saya bersikeras bahwa kami mengambil cadangan penuh, tidak memahami bahwa semuanya akan tetap online pada IP yang berbeda ... jadi apa yang seharusnya menjadi pemadaman 5 menit pada sebuah hari yang buruk menjadi pemadaman 5 jam.)

Joe
sumber
6

Itu semua tergantung pada volume data dibandingkan dengan kekuatan perangkat keras yang mendukung database dan perjanjian pada ketersediaan sistem. Apakah Anda mengalami downtime atau haruskah semuanya dilakukan secara online? Mulailah membersihkan data, menghapus baris yang sudah usang sebanyak mungkin. Ini adalah proyek itu sendiri. Jika data bersih dan berharga, minta pengguna memutuskan tentang waktu henti. Jika downtime tersedia, itu cukup mudah, jika mereka adalah transformasi yang diketahui yang harus diterapkan pada data yang ada untuk membentuk koleksi yang diperbarui. Jika tidak ada - atau sangat sedikit - downtime diizinkan, tantangan dimulai. Oracle mendukung ini dalam beberapa cara seperti redefinisi tabel online dan - redefinisi baru berbasis edisi 11g. Dengan redefinisi tabel online, Anda dapat menyiapkan tabel untuk mengambil formulir baru. Ini dapat dilakukan saat aplikasi berjalan pada bentuk tabel [s] yang lama. Jika semuanya sudah siap, Anda dapat beralih ke bentuk baru dari tabel [s]. Ini juga akan menjadi momen untuk memperkenalkan kode aplikasi baru dan pada saat yang sama menandai awal waktu henti yang diperlukan untuk menempatkan aplikasi baru di tempatnya. Data historis yang lebih lama dapat disiapkan sebelum data langsung dimigrasi dan disimpan dalam sinkronisasi menggunakan alat-alat seperti Oracle Golden Gate. Dalam skenario seperti itu, Anda secara efektif membangun basis data baru yang mengambil alih peran basis data lama. Redefinisi berbasis edisi lebih cocok untuk jika tidak ada perubahan tabel yang diperlukan. Ada banyak pilihan untuk dipertimbangkan dan saya pikir sulit untuk memberikan aturan yang baik yang selalu berhasil. Ini juga akan menjadi momen untuk memperkenalkan kode aplikasi baru dan pada saat yang sama menandai awal waktu henti yang diperlukan untuk menempatkan aplikasi baru di tempatnya. Data historis yang lebih lama dapat disiapkan sebelum data langsung dimigrasi dan disimpan dalam sinkronisasi menggunakan alat-alat seperti Oracle Golden Gate. Dalam skenario seperti itu, Anda secara efektif membangun basis data baru yang mengambil alih peran basis data lama. Redefinisi berbasis edisi lebih cocok untuk jika tidak ada perubahan tabel yang diperlukan. Ada banyak pilihan untuk dipertimbangkan dan saya pikir sulit untuk memberikan aturan yang baik yang selalu berhasil. Ini juga akan menjadi momen untuk memperkenalkan kode aplikasi baru dan pada saat yang sama menandai awal waktu henti yang diperlukan untuk menempatkan aplikasi baru di tempatnya. Data historis yang lebih lama dapat disiapkan sebelum data langsung dimigrasi dan disimpan dalam sinkronisasi menggunakan alat-alat seperti Oracle Golden Gate. Dalam skenario seperti itu, Anda secara efektif membangun basis data baru yang mengambil alih peran basis data lama. Redefinisi berbasis edisi lebih cocok untuk jika tidak ada perubahan tabel yang diperlukan. Ada banyak pilihan untuk dipertimbangkan dan saya pikir sulit untuk memberikan aturan yang baik yang selalu berhasil. Data historis yang lebih lama dapat disiapkan sebelum data langsung dimigrasi dan disimpan dalam sinkronisasi menggunakan alat-alat seperti Oracle Golden Gate. Dalam skenario seperti itu, Anda secara efektif membangun basis data baru yang mengambil alih peran basis data lama. Redefinisi berbasis edisi lebih cocok untuk jika tidak ada perubahan tabel yang diperlukan. Ada banyak pilihan untuk dipertimbangkan dan saya pikir sulit untuk memberikan aturan yang baik yang selalu berhasil. Data historis yang lebih lama dapat disiapkan sebelum data langsung dimigrasi dan disimpan dalam sinkronisasi menggunakan alat-alat seperti Oracle Golden Gate. Dalam skenario seperti itu, Anda secara efektif membangun basis data baru yang mengambil alih peran basis data lama. Redefinisi berbasis edisi lebih cocok untuk jika tidak ada perubahan tabel yang diperlukan. Ada banyak pilihan untuk dipertimbangkan dan saya pikir sulit untuk memberikan aturan yang baik yang selalu berhasil.

Itu subjek yang menarik, Ronald.

ik_zelf
sumber
5

Jawaban yang bagus sejauh ini. Saya akan menambahkan beberapa poin lagi untuk dipertimbangkan.

Pertama, ketika Anda dapat melakukan migrasi dengan sederhana SQL DML, Anda dapat sebagian besar mengandalkan mesin SQL Anda untuk memastikan semua baris yang berhasil diproses. Saya telah terlibat dalam migrasi, meskipun, di mana beberapa migrasi sedikit lebih rumit - ada transformasi data aktual sebagai data dipindahkan ke dalam struktur baru. Dalam kasus ini, penting bahwa Anda memiliki proses yang dapat menangani item berikut:

  • Hitung rekaman vs. rekaman yang diproses.
  • Mendeteksi kesalahan selama transformasi dan menanganinya dengan cara yang memungkinkan transformasi untuk melanjutkan dan memungkinkan pemrosesan ulang catatan "buruk" setelah Anda mengidentifikasi perbaikan.
  • Jumlah catatan harus mencakup catatan "buruk" - yaitu catatan-dalam = catatan-keluar-bagus + catatan-buruk
  • Jika transformasi Anda mengubah jumlah catatan (satu catatan input menjadi lebih dari satu catatan output, misalnya) memiliki cara untuk memprediksi jumlah catatan output Anda akan berakhir dengan, dan kemudian menguji hasil Anda terhadap jumlah itu.

Poin lain yang akan saya tambahkan adalah bahwa penting untuk memiliki rencana untuk apa yang akan Anda lakukan jika / ketika segala sesuatunya tidak berjalan sesuai rencana. Ini benar-benar fungsi dari penyebaran secara keseluruhan, tapi itu salah satu yang tampaknya cukup sering disorot sehingga saya pikir itu layak disebut.

D. Lambert
sumber
4

Ikhtisar cara melakukannya

Memulai dengan

  • Anda memiliki database "setelah" dalam tes / UAT / apa pun "DB yang berfungsi"
  • Anda memiliki basis data "sebelum" dalam produksi. Jadi gunakan itu untuk membuat salinan produksi di suatu tempat = "referensi DB". Dan lainnya sebagai "script test DB"
  • Saya juga berharap Anda memiliki banyak skrip pengembangan dengan ALTER Anda dll. Jika demikian, salinan produksi lainnya dengan skrip pengembangan Anda diterapkan, bersih dan bermanfaat = "ubah DB"

Selanjutnya, unduh Gerbang Merah Bandingkan alat atau sesuatu seperti Manajer Perubahan SQL Embarcadero . Anda tidak dapat bermigrasi dengan mudah tanpa itu. Biaya sepele dengan jumlah waktu yang dihemat. Dan yang paling penting, skrip yang dihasilkan membuat perubahan dalam satu transaksi yang berarti penerapan yang bersih

Sekarang,

  • menghasilkan skrip perubahan dan kembalikan menggunakan alat yang membandingkan antara "referensi" dan "perubahan"
  • terapkan skrip perubahan untuk "tes skrip" dan bandingkan kembali ke "DB yang berfungsi"
  • terapkan script rollback ke "script test" dan bandingkan kembali ke "dan bandingkan kembali ke" DB yang berfungsi "

Sekarang, Anda memiliki + skrip perubahan dan rollback aman yang teruji untuk diterapkan kapan saja.

Dan tentu saja Anda membuat cadangan database sebelum perubahan apa pun karena omong kosong secara statistik akan selalu terjadi pada akhirnya.

Alat Gerbang Merah juga dapat dibandingkan dengan folder yang berada di bawah kendali sumber. Kami kemudian menangkap ALTER dll di kontrol sumber kami secara terpisah ke skrip perubahan yang sebenarnya.

gbn
sumber