Tabel dalam database produksi telah 'menghilang' secara misterius.
Adakah yang tahu cara untuk mendiagnosis apa yang terjadi padanya? Dan siapa yang melakukannya?
Sunting 1: Ini adalah aplikasi internal, dengan keamanan yang lemah. Semua aplikasi (kecuali milik saya tentu saja ;-) rentan terhadap SQL Injection, tetapi pengguna kami sangat tidak canggih dan nama tabel bukan salah satu yang mungkin langsung jelas, jadi saya tidak berpikir itu adalah Injeksi SQL (tidak itu penting ... semacam di luar lingkup pertanyaan).
Sunting 2: Juga, hanya FYI; tabel ini sudah ada sejak lama, jadi itu tidak 'dibatalkan' dengan pemulihan.
security
sql-server
John MacIntyre
sumber
sumber
Jawaban:
Anda mungkin bisa mengeluarkan info dari log menggunakan fungsi :: fn_dblog yang tidak didokumentasikan yang menginterpretasikan catatan log. Saya sedang mengajar kelas pemulihan bencana sekarang, tetapi jika Anda bisa menunggu 2-3 jam saya akan memposting cara melakukannya untuk Anda - harus bisa mendapatkan nama pengguna juga tanpa harus membeli alat apa pun ( Saya digunakan untuk spelunk sekitar log satu ton pada tahun 2000 ketika saya menulis banyak kode analisis log internal yang menggunakan DBCC CHECKDB pada tahun 2000).
[Diedit untuk memasukkan instruksi]. Ok - selesai mengajar dan saya mengetuk sebuah posting blog untuk menunjukkan kepada Anda bagaimana menganalisis log pada tahun 2000, 2005, 2008 untuk mengetahui kapan tabel itu dijatuhkan dan siapa yang melakukannya. Lihat pos blog saya di Mencari tahu siapa yang menjatuhkan meja menggunakan log transaksi . [/ edit]
Apakah Anda masih memiliki log transaksi? Model pemulihan mana yang menjadi basis data? Jika SIMPLE, jangan lakukan apa pun yang akan menyebabkan pos pemeriksaan. Jika FULL atau BULK_LOGGED, jangan lakukan pencadangan log. Salah satu dari ini akan menyebabkan log terpotong dan kemudian Anda mungkin kehilangan kemampuan untuk melihat kembali log, meskipun saya menyertakan tanda jejak di posting blog yang dapat membantu Anda dengan itu juga.
Terima kasih
PS Salah satu cara mencegah penurunan tabel pada tahun 2000 tanpa menambah keamanan adalah dengan membuat tampilan schemabound sederhana di atasnya - DROP TABLE akan gagal jika tampilan ada.
sumber
Mungkin itu Little Bobby Tables ...
sumber
Anda mungkin dapat memulihkan informasi ini dari log SQL.
sumber
Jika log penelusuran default sedang berjalan, semua info disimpan di folder log. Anda harus dapat melihat kapan objek (tabel) terjatuh dan koneksi mana yang melakukannya. Tetapi jenis izin ini seharusnya hanya diberikan kepada DBA saja
sumber
Saya mencoba untuk memperbaiki MSDB yang rusak. Maaf saya tidak bisa menguraikan.
Jalankan ini dan itu akan memberikan ide umum ke mana harus mencari, dengan asumsi jejak default Anda aktif.
SELECT * FROM :: fn_trace_getinfo (default)
PILIH t.EventID, t.ColumnID, e.name sebagai Event_Description, c.name sebagai Column_Description FROM :: fn_trace_geteventinfo (1) t BERGABUNG sys.trace_events e ON t.eventID = e.trace_event_id JOIN sys.trace_umn = c.trace_column_id
sumber
Satu-satunya cara untuk mengetahui info ini adalah dengan membaca log transaksi (dengan asumsi itu dalam mode pemulihan penuh).
Dua cara untuk melakukan ini:
sumber
Dalam SSMS Anda dapat mencoba mengklik kanan pada dB dan menavigasi melalui Laporan -> Laporan Standar -> Schema Changes History.
Klik kanan pada laporan dan 'SaveAs' Excel dan temukan nama objek Anda.
Anda tidak akan bisa mendapatkan apa pun jika server telah di-restart lebih dari lima kali setelah objek dijatuhkan.
sumber