Apa yang terburuk database kecelakaan yang terjadi kepada anda dalam produksi?

Sebagai contoh: Memperbarui semua baris dari tabel pelanggan karena anda lupa untuk menambahkan klausa where.

  1. Seperti apa rasanya, menyadari hal itu dan melaporkan ke rekan kerja atau pelanggan?
  2. Apa pelajaran?

Saya pikir saya kesalahan terburuk adalah

truncate table Customers
truncate table Transactions

Saya tidak melihat apa yang MSSQL server saya masuk ke dalam, aku ingin menghapus salinan lokal keluar...akrab "OH s**t" ketika itu mengambil secara signifikan lebih lama dari setengah detik untuk menghapus, bos saya melihat saya pergi visibily putih, dan bertanya apa yang aku lakukan. Sekitar setengah mintue kemudian, situs kami memantau pergi kacang dan mulai mengirim email kami mengatakan situs itu down.

Pelajaran yang dipelajari? Tidak pernah menjaga hubungan yang terbuka untuk hidup DB lebih lama dari absolutly diperlukan.

Hanya sampai 4am mengembalikan data dari backup juga! Bos saya merasa kasihan kepada saya, dan saya membeli makan malam...

Komentar (2)

Saya bekerja di perusahaan e-commerce, ada's 2 pengembang dan DBA, saya menjadi salah satu pengembang. I'm biasanya tidak dalam kebiasaan memperbarui data produksi pada terbang, jika kita memiliki prosedur yang tersimpan kita've berubah kita menempatkan mereka melalui kontrol sumber dan telah resmi penyebaran rutin setup.

Yah, lagian pengguna datang kepada saya membutuhkan pembaruan dilakukan untuk kontak kami database, batch memperbarui banyak fasilitas. Jadi saya menulis query di lingkungan pengujian kami, sesuatu seperti

update facilities set address1 = '123 Fake Street'
    where facilityid in (1, 2, 3)

Sesuatu seperti itu. Berlari dalam tes, 3 baris diperbarui. Disalin ke clipboard, disisipkan di terminal jasa pada kami produksi sql kotak, berlari, menyaksikan dengan ngeri sebagai butuh 5 detik untuk mengeksekusi dan diperbarui 100000 baris. Entah bagaimana aku disalin baris pertama dan kedua, dan bukan't membayar perhatian seperti yang saya PILIH + V, PILIH + E'd.

Saya DBA, seorang yunani yang lebih tua pria, mungkin grumpiest orang I've bertemu tidak senang. Untungnya kita punya cadangan, dan itu didn't istirahat setiap halaman, untungnya lapangan itu hanya benar-benar untuk keperluan display (dan penagihan/pengiriman).

Pelajaran yang dipelajari adalah memperhatikan apa yang anda're menyalin dan menyisipkan, mungkin beberapa orang lain juga.

Komentar (0)

Sesuatu untuk efek:

update email set processedTime=null,sentTime=null

pada produksi newsletter database, kirim setiap email dalam database.

Komentar (0)

Junior DBA dimaksudkan untuk melakukan:

delete from [table] where [condition]

Sebaliknya mereka yang diketik:

delete [table] where [condition]

Yang berlaku T-Sql tapi pada dasarnya mengabaikan where [kondisi] sedikit benar-benar (setidaknya itu kembali kemudian pada MSSQL 2000/97 - aku lupa yang mana) dan tisu seluruh tabel.

Itu menyenangkan :-/

Komentar (1)

Sekitar 7 tahun yang lalu, saya menghasilkan perubahan script untuk klien's DB setelah bekerja lembur. Saya hanya mengubah prosedur yang tersimpan, tetapi ketika saya menghasilkan SQL yang telah saya "script tergantung objek" diperiksa. Aku berlari di mesin lokal dan semua muncul untuk bekerja dengan baik. Aku berlari pada klien's server dan script berhasil.

Kemudian saya dimuat situs web dan situs itu kosong. Ngeri saya, "script tergantung objek" pengaturan melakukan DROP TABLE untuk setiap tabel yang saya disimpan prosedur tersentuh.

Aku segera menelepon menyebabkan dev dan bos membiarkan mereka tahu apa yang terjadi dan bertanya di mana cadangan terbaru dari DB bisa ditemukan. 2 lainnya devs yang terhubung dalam dan kesimpulan yang kami ambil adalah bahwa tidak ada sistem cadangan bahkan di tempat dan tidak ada data yang bisa dikembalikan. Klien kehilangan seluruh web's konten dan aku adalah akar penyebab. Hasilnya adalah a $5000 kredit yang diberikan untuk klien kami.

Bagi saya itu adalah sebuah pelajaran besar, dan sekarang saya sangat berhati-hati tentang menjalankan setiap perubahan script, dan back up DBs pertama. I'm masih dengan perusahaan yang sama hari ini, dan setiap kali lelucon datang tentang backup atau database script seseorang yang selalu membawa terkenal "DROP TABLE" kejadian.

Komentar (0)

Saya pernah berhasil menulis sebuah memperbarui kursor yang tidak pernah keluar. Pada 2M+ baris tabel. Kunci hanya meningkat dan terus meningkat sampai 16-core, 8GB RAM (pada tahun 2002!) kotak benar-benar terhenti (layar biru variasi).

Komentar (0)
update Customers set ModifyUser = 'Terrapin'

Aku lupa di mana klausul - cukup tak bersalah, tapi di atas meja dengan 5000+ pelanggan, nama saya akan berada di setiap record untuk sementara...

Pelajaran: menggunakan transaksi commit dan rollback!

Komentar (0)

Kami mencoba untuk memperbaiki yang rusak node pada Oracle cluster.

Penyimpanan modul manajemen sedang mengalami masalah, sehingga kita diklik un-install tombol dengan maksud untuk re-menginstal dan menyalin konfigurasi dari node lain.

Hmm, ternyata un-install tombol diterapkan ke seluruh cluster, sehingga riang dihapus penyimpanan modul manajemen dari semua node dalam sistem.

Menyebabkan setiap node dalam cluster produksi untuk kecelakaan. Dan karena tidak ada node yang memiliki storage manager, mereka tidak't datang!

Berikut ini's sebuah fakta menarik tentang backup... backup tertua mendapatkan diputar off-site, dan anda tahu apa yang anda tertua file pada database? File-file konfigurasi yang harus diatur ketika sistem telah diinstal.

Jadi kami harus memiliki offsite orang-orang mengirim kurir dengan rekaman itu, dan beberapa jam kemudian kami memiliki segalanya ulang dan berjalan. Sekarang kita menyimpan salinan lokal dari instalasi dan konfigurasi file-file!

Komentar (0)

Saya don't ingat semua pernyataan sql yang berlari di luar kendali tapi aku punya satu pelajaran - apakah itu dalam transaksi jika anda bisa (waspadalah terhadap besar file log!).

Dalam produksi, jika anda bisa, lanjutkan dengan cara lama:

  1. Gunakan jendela pemeliharaan
  2. Cadangan
  3. Melakukan perubahan
  4. verifikasi
  5. mengembalikan jika sesuatu yang tidak beres

Cukup keren, tapi umumnya bekerja dan bahkan mungkin untuk memberikan prosedur ini ke orang lain untuk menjalankannya selama shift malam saat anda're semakin baik anda layak tidur :-)

Komentar (0)

Saya pikir saya sudah bekerja dalam pengujian DB (yang bukan't kasus ini rupanya), jadi ketika saya selesai 'pengujian' saya menjalankan script untuk me-reset semua data kembali untuk tes standar data yang kita gunakan... aduh! Untungnya ini terjadi pada database yang memiliki backup di tempat, jadi setelah mencari tahu aku melakukan sesuatu yang salah, kita bisa dengan mudah membawa kembali database asli.

Namun kejadian ini tidak mengajarkan perusahaan saya bekerja untuk benar-benar memisahkan produksi dan lingkungan pengujian.

Komentar (0)

Saya melakukan apa yang anda sarankan. Aku diperbarui semua baris dalam sebuah tabel yang diadakan dokumen pelanggan karena aku lupa untuk menambahkan "di mana ID = 5" di akhir. Itu adalah sebuah kesalahan.

Tapi aku pintar dan paranoid. Aku tahu aku akan mengacaukan satu hari. Saya telah mengeluarkan "mulai transaksi". Aku mengeluarkan rollback dan kemudian memeriksa tabel OK.

Ini bukan't.

Pelajaran yang dipelajari di produksi: terlepas dari kenyataan kita ingin menggunakan InnoDB tabel di MySQL untuk banyak alasan... PASTIKAN anda tidak ketinggalan't berhasil menemukan salah satu dari beberapa tabel MyISAM yang doesn't menghormati transaksi dan anda dapat't roll kembali. Don't percaya MySQL dalam keadaan apapun, dan biasanya mengeluarkan "mulai transaksi" adalah hal yang baik. Bahkan dalam skenario kasus terburuk (apa yang terjadi di sini) itu didn't sakit apa-apa dan itu akan melindungiku pada tabel InnoDB.

Aku harus memulihkan dari cadangan. Untungnya kami memiliki backup malam, data yang hampir tidak pernah berubah, dan meja adalah beberapa lusin baris jadi itu dekat dengan seketika. Untuk referensi, tidak ada yang tahu bahwa kita masih memiliki non-InnoDB tabel di sekitar, kami pikir kami dikonversi mereka semua sejak lama. Tidak ada yang mengatakan kepada saya untuk melihat keluar untuk ini gotcha, tidak ada yang tahu itu ada. Bos saya akan melakukan hal yang sama (jika dia telah memukul memasukkan terlalu dini sebelum mengetik klausa where juga).

Komentar (0)

Saya menemukan saya didn't memahami Oracle redo log file (terminologi? itu adalah waktu yang lama) dan kehilangan minggu' data perdagangan, yang harus secara manual mengetik ulang dari tiket kertas.

Ada adalah a silver lining - selama akhir pekan saya menghabiskan memasukkan, saya belajar banyak tentang useability perdagangan saya input layar, yang meningkat secara dramatis setelah itu.

Komentar (0)

Skenario kasus terburuk bagi kebanyakan orang adalah data produksi loss, tapi jika mereka're tidak menjalankan backup malam atau mereplikasi data ke DR situs, maka mereka berhak mendapatkan segala sesuatu yang mereka dapatkan!

@Keith dalam T-SQL, isn't DARI kata kunci opsional untuk MENGHAPUS? Kedua pernyataan melakukan hal yang sama...

Komentar (0)

Hal terburuk yang terjadi pada saya adalah bahwa server Produksi mengkonsumsi semua ruang di HD. Saya menggunakan SQL Server jadi saya melihat file-file database dan melihat bahwa yang masuk itu sekitar 10 Gb jadi saya memutuskan untuk melakukan apa yang saya selalu lakukan ketika saya ingin trunc file Log. Aku Melepaskan menghapus log file dan kemudian pasang lagi. Yah aku menyadari bahwa jika log file tidak menutup dengan benar prosedur ini tidak bekerja. jadi aku berakhir dengan file mdf dan file log. Untungnya aku pergi ke situs Microsoft saya mendapatkan cara untuk mengembalikan database sebagai pemulihan dan pindah ke database lain.

Komentar (0)

Aku menjatuhkan live database dan dihapus.

Lesson learned: pastikan anda tahu SQL anda dan pastikan bahwa anda membuat cadangan sebelum anda menyentuh barang-barang.

Komentar (1)

Memperbarui semua baris dari tabel pelanggan karena anda lupa untuk menambahkan klausa where.

Itu persis yang saya lakukan :| . Saya telah diperbarui kolom password untuk semua pengguna untuk sampel string saya telah diketik ke konsol. Bagian terburuk dari itu saya mengakses server produksi dan aku sedang memeriksa beberapa pertanyaan ketika aku melakukan ini. Senior saya kemudian harus kembali backup yang lama dan telah ke lapangan beberapa panggilan dari beberapa benar-benar tidak puas pelanggan. Tentu ada waktu lain ketika saya tidak menggunakan pernyataan delete, yang saya don't bahkan ingin berbicara tentang ;-)

Komentar (0)

Truncate table T_DAT_STORE

T_DAT_STORE adalah fakta meja dari departemen tempat saya bekerja. Aku pikir aku terhubung dengan pengembangan database. Untungnya, kita memiliki backup harian, yang belum't telah digunakan sampai hari itu, dan data dikembalikan dalam waktu enam jam.

Sejak itulah saya merevisi segala sesuatu sebelum memotong, dan secara berkala saya meminta untuk cadangan pemulihan minor tabel hanya untuk memeriksa cadangan baik-baik (Cadangan isn't dilakukan oleh departemen saya)

Komentar (0)

Ini didn't terjadi padaku, hanya pelanggan kita whos berantakan aku harus bersih-bersih.

Mereka memiliki SQL server yang berjalan pada RAID5 array disk - bagus hotswap drive lengkap dengan terang disk indikator status. Hijau = Baik, Merah = Buruk.

Salah satu drive mereka berubah dari hijau ke merah dan jenius yang diberitahu untuk menarik dan mengganti (Red) sangat membutuhkan (Hijau) baik satu bukan. Nah ini didn't cukup berhasil menurunkan raid set benar - memilih untuk agak mudah dibaca (Merah) vs unavaliable (Hijau) selama beberapa menit.. setelah menyadari kesalahan dan bertukar drive kembali setiap blok data yang ditulis selama ini menjadi jyberish sebagai disk sinkronisasi hilang) ... 24-jam kemudian menulis meta program untuk memulihkan data yang dapat dibaca dan merekonstruksi menengah skema mereka kembali berdiri dan berjalan.

Moral dari cerita ini termasuk...tidak Pernah menggunakan RAID5, selalu menjaga backup, hati-hati yang anda sewa.

Saya membuat kesalahan besar pada pelanggan sistem produksi sekali -- untungnya saat bertanya-tanya mengapa perintah itu mengambil begitu lama untuk mengeksekusi menyadari apa yang telah saya lakukan dan membatalkannya sebelum dunia berakhir.

Moral dari cerita ini termasuk ... selalu memulai transaksi baru sebelum mengubah apa-APA, tes hasil apa yang anda harapkan dan kemudian dan hanya kemudian melakukan transaksi.

Sebagai pengamatan umum banyak kelas rm -rf / jenis kesalahan dapat dicegah dengan benar mendefinisikan constraint foreign key pada skema anda dan tinggal jauh dari setiap perintah dicap 'KASKADE'

Komentar (0)