Saran khas sebelum penyebaran produksi adalah cadangan DB terlebih dahulu. Dengan cara ini, jika pembaruan baru memiliki beberapa masalah yang dapat menyebabkan kehilangan data potensial atau kerusakan data logis, maka Anda masih memiliki cadangan untuk membandingkan dan memperbaiki catatan lama.
Namun, ini dapat bekerja dengan baik hingga ukuran DB dalam beberapa GB. Setelah ukuran DB sangat besar, pencadangan membutuhkan waktu lama. Apa saja praktik terbaik yang harus diikuti dalam situasi seperti itu, sehingga untuk menghindari korupsi data logis karena masalah logis dalam penyebaran kode?
database
patterns-and-practices
Pritam Barhate
sumber
sumber
Jawaban:
Sebagai seseorang yang secara teratur berurusan dengan memperbarui basis data produksi untuk pelanggan untuk peningkatan perangkat lunak kami, saya memberitahu Anda bahwa cara terbaik untuk meminimalkan kesalahan adalah dengan membuat pembaruan sesederhana mungkin.
Jika Anda dapat melakukan perubahan untuk semua catatan daripada catatan tertentu, itu lebih disukai.
Dengan kata lain, jika Anda diberi daftar id dari catatan yang perlu diubah keadaannya, Anda harus bertanya pada diri sendiri mengapa pembaruan dilakukan dalam konteks program. Mungkin dari 10 catatan yang perlu Anda perbarui, tabel hanya memiliki 10 elemen. Karena itu Anda harus bertanya pada diri sendiri apakah secara konseptual semua yang Anda lakukan adalah memperbarui status semua catatan.
Jika Anda dapat menyisipkan, itu lebih disukai.
Tindakan menambahkan catatan mandiri. Maksud saya hanya ada satu efek samping dari menambahkan catatan, dan itu adalah keberadaan catatan yang tidak ada sebelumnya. Karena itu, kecuali Anda menambahkan catatan yang seharusnya tidak ada di sana, seharusnya tidak ada masalah.
Jika Anda dapat menghindari penghapusan, itu lebih disukai.
Jika Anda melakukan penghapusan, Anda menghapus data yang seharusnya tidak dapat dipulihkan tanpa cadangan. Jika memungkinkan, cobalah untuk mengatur data sedemikian rupa sehingga Anda dapat menonaktifkan catatan dengan mengubah kondisinya daripada menghapus catatan secara fisik. Kelebihan data dapat diletakkan di partisi atau dapat dihapus seluruhnya di lain waktu setelah Anda yakin tidak ada masalah.
Memiliki kebijakan pembaruan yang konsisten.
Jika Anda perlu memperbarui catatan, salah satu dari beberapa hal dapat terjadi:
Anda perlu memiliki kebijakan untuk menentukan arah tindakan jika sesuatu tidak berjalan sesuai rencana. Demi kesederhanaan, Anda harus konsisten di seluruh papan dan menerapkan kebijakan ini dalam situasi apa pun dari jenis ini, tidak hanya untuk tabel tertentu. Ini membuatnya lebih mudah untuk dapat memulihkan data nanti. Secara umum, kebijakan saya adalah menulis skrip sedemikian rupa agar dapat menjalankannya kembali nanti. Jika skrip gagal, senang mengetahui bahwa Anda dapat melakukan penyesuaian dan eksekusi ulang yang tepat, namun Anda bebas memilih kebijakan sendiri yang paling sesuai untuk Anda.
Cadangan
Ini tidak berarti memaafkan Anda untuk melakukan pencadangan sebelum melakukan pembaruan apa pun di lingkungan produksi! Meskipun dengan cadangan, saya menganggapnya gagal menggunakan cadangan. Kehilangan data tidak dapat menjadi kemungkinan bahkan dalam skenario terburuk .
Kesimpulan
Anda tidak selalu bisa melakukannya sesuai keinginan Anda. Skema tabel kemungkinan tidak akan ditentukan oleh Anda, dan karena itu artinya jenis pembaruan yang dapat Anda lakukan akan rumit dan berisiko. Meskipun jika Anda memiliki hak suara dalam masalah ini, ada baiknya Anda mengingat poin-poin ini saat mereka melakukan pembaruan secara langsung dan tanpa risiko yang signifikan.
Semoga berhasil!
sumber
Pada titik itu, Anda harus menggunakan sistem DB kelas komersial yang mendukung snapshot (Oracles menyebutnya Flashback ) - itulah jenisnya.
Ingatlah bahwa Anda memerlukan konsep cadangan - memiliki lebih banyak data tidak berarti Anda menjatuhkan cadangan karena menjadi sulit, justru sebaliknya. Anda memerlukan semacam cadangan berkelanjutan, misalnya berdasarkan replikasi dengan failover otomatis.
sumber
Ini adalah area yang sangat luas - jadi perkirakan pertanyaan ini akan ditutup dalam waktu yang cukup singkat tetapi, dari atas kepala saya (sebagai mantan DBA pada database besar):
Mart / Repositori
Anda dapat mengurangi beberapa risiko jika Anda memiliki database terpisah untuk pembaruan dan database terpisah yang digunakan semua orang. Maka itu hanya kasus menyalin data dari satu DB ke yang lain setelah berbagai pemeriksaan telah terjadi. Mart / repositori adalah bagaimana kadang-kadang dijelaskan tetapi Anda mungkin memiliki primer / sekunder, master / slave dll.
Kode sumber
Untuk semua yang dapat berubah, miliki kode sumber yang terkait dengan cara data diperbarui. Berapa banyak dari ini yang Anda miliki bervariasi dari DB ke DB tetapi Anda mungkin memiliki satu untuk setiap pengguna, peran, umpan data, modul kode dll.
Buat / perbarui tanggal
Sesuatu yang dapat sangat membantu saat melacak kesalahan yang terjadi adalah memiliki pembuatan dan pembaruan data untuk setiap baris. Kemudian Anda dapat melihat sekilas baris mana yang telah diperbarui.
ETL
Jika pembaruan database mengambil bagian sebagai bagian dari pabrik data, Anda mungkin dapat memulihkan vintage sebelumnya dari file datar.
Cadangkan
Cadangan penuh tentu saja membutuhkan banyak ruang tetapi skenario yang biasa adalah agar pencadangan penuh terjadi secara berkala (misalnya, mingguan) dan sebagian lagi secara lebih teratur (harian, dll).
Titik pemulihan waktu
Tergantung pada RDBMS yang Anda gunakan, beberapa titik dukungan dalam pemulihan waktu. Ini memungkinkan Anda untuk kembali ke masa ketika kondisi baik diketahui. Namun ini membutuhkan sejumlah besar penyimpanan yang meningkatkan sejauh mana Anda ingin kembali.
Audit
Memiliki tabel audit akan memberi tahu Anda siapa (atau apa) yang melakukan pembaruan pada satu baris. Ini bisa memberi Anda titik awal yang baik untuk investigasi.
Sejarah
Untuk beberapa tabel kritis, salinan baris terkait diambil pada saat pembaruan sehingga data dapat dipulihkan jika perlu.
Validasi data
Pastikan pemeriksaan validasi dasar dilakukan pada data sebelum disimpan - di atas dan di atas pemeriksaan tipe data dasar.
Integritas referensial
Integritas referensial bukan peluru perak tetapi dapat membantu memastikan data terstruktur dengan baik.
sumber
Sering kali jika kita melakukan pembaruan "satu tembakan", kita mengambil cadangan produksi dan mengembalikannya ke server uji. Kemudian kami membuat serangkaian tes dan menjalankan satu tembakan. Kami memverifikasi data telah berubah melalui tes dan merasa nyaman bahwa pembaruan itu akan berhasil dan memodifikasi data dengan cara yang kami harapkan. Ini disebut run kering atau percobaan. Saya sarankan melakukan ini.
Ini memberi setiap orang perasaan yang baik bahwa satu tembakan akan berhasil. Kami tidak dapat menjamin 100% karena data akan diperbarui sejak tanggal uji coba, tetapi kami meningkatkan faktor kepercayaan dan kesuksesan. Ini juga memberikan gambaran nyata tentang masalah apa pun yang akan terjadi karena kami menggunakan salinan produksi. Sekarang jika karena suatu alasan pembaruan gagal, kita selalu dapat kembali ke menjalankan sebelum mengembalikan jika diperlukan, tetapi kita harus menemukan dan memperbaiki masalah dengan menjalankan kering.
Jika Anda tidak dapat mengambil seluruh database (jika benar-benar besar) coba dan ekspor ukuran sampel yang lebih kecil dan jalankan pembaruan (lari kering kecil) terhadap data aktual. Saya lebih suka seluruh kumpulan data jika memungkinkan untuk memastikan tes selengkap mungkin.
sumber