Kapan Database diambil Offline

9

Saya mencoba mencari cara untuk mencari tahu kapan beberapa database sql saya diambil offline.

Saya memeriksa log tetapi tidak dapat menemukan info seperti itu dan terlebih lagi tidak ada jejak default yang diaktifkan.

Saya hanya punya info bahwa sebelumnya ada DBA yang mengambil offline, tetapi tidak ada email atau komunikasi tertulis seperti itu ..

Bisakah kita menemukan info tentang ini?

tolong sarankan, terima kasih!

KASQLDBA
sumber

Jawaban:

11

Anda dapat menemukan semua peristiwa ini yang ada di siklus log peristiwa saat ini menggunakan sp_readerrorlog:

EXEC sys.sp_readerrorlog @p1 = 0, @p2 = 1, @p3 = N'OFFLINE';

Anda bisa melihat-lihat nilai @p1jika Anda tidak menemukannya di log peristiwa saat ini. Secara default Anda harus bisa membaca 6 file log kesalahan saat ini dan sebelumnya, jadi gunakan 0-6 sebagai argumen di sana untuk kembali sejauh mungkin (pada sistem saya, saya tidak bisa mendapatkan 0/ NULLmenggabungkan semua file log; YMMV ).

Akan mengembalikan sesuatu seperti ini:

LogDate        ProcessInfo Text
-------------  ----------- ---------------------------------------------------------
yyyy-mm-dd...  spid72      Setting database option OFFLINE to ON for database 'foo'.

Ada kemungkinan, tentu saja, bahwa log kesalahan akan cukup diisi sehingga peristiwa (s) terjadi sebelum set log kesalahan saat ini. Dalam hal ini, Anda kurang beruntung. Untuk menjaga riwayat berjalan yang lebih lama di masa mendatang, Anda dapat mengubah jumlah log kesalahan yang disimpan. Di Object Explorer, rentangkan Manajemen, klik kanan SQL Server Log, dan pilih Configure. Di sana Anda dapat mengubah pengaturan daur ulang file log kesalahan, termasuk menjaga hingga 99 file sebelumnya. Lihat juga jawaban ini .

Catatan yang sp_readerrorlogtidak berdokumen dan tidak didukung, meskipun banyak orang telah menulis tentang itu . Pada akhirnya, file log kesalahan hanyalah file teks biasa, sehingga Anda dapat menulis PowerShell, CLR dll. Anda sendiri yang hanya mem-parsing file dan mengembalikan informasi yang sama. Anda dapat menentukan di mana file log kesalahan untuk contoh ini menggunakan:

SELECT SERVERPROPERTY('ErrorLogFileName');

File-file akan diberi nama ERRORLOG, ERRORLOG.1, ERRORLOG.2, dll Anda dapat pergi dan membuka file dalam editor teks dasar untuk melihat struktur, meskipun saya akan berhati-hati tentang membuka file saat digunakan ( ERRORLOG).

Aaron Bertrand
sumber
Halo Aaron, saya tidak mendapatkan luring dalam log SQL Server saya. Apakah ada pengaturan yang memungkinkan kami menangkap perubahan ini? Terima kasih,
DBALUKE HUANG
@ DBALUKEHUANG Tidak, jika itu terjadi sebelum entri paling awal di log kesalahan, dan tidak ada di penampil acara , Anda kurang beruntung.
Aaron Bertrand
Ya Aaron, Tidak ada yang terkait dengan offline di log SQL Server. Untuk online, memang memiliki log ... Saya hanya ingin tahu apakah ada pengaturan khusus untuk membiarkan SQL Server menangkap ini?
DBALUKE HUANG
@ DBALUKEHUANG Ingatlah bahwa database bisa offline karena alasan selain seseorang yang mengaturnya secara eksplisit OFFLINE. Apakah offlinesebenarnya status dalam sys.databases?
Aaron Bertrand
4

Jika basis data disetel offline:

yaitu

alter database AdventureWorks2012
set offline;
go

Anda memang akan melihat pesan yang dicatat dalam log kesalahan SQL Server:

Mengatur opsi basis data OFFLINE ke AKTIF untuk basis data 'AdventureWorks2012'.

select *
from sys.messages
where language_id = 1033
and text like '%setting database option%for database%';

ID pesan 5084 jika Anda memonitor perubahan opsi database.

Thomas Stringer
sumber