Quando un database è stato messo offline


9

Sto cercando di trovare un modo per capire quando un paio dei miei database sql sono stati portati offline.

Ho controllato i registri ma non sono riuscito a trovare tali informazioni e inoltre non è abilitata alcuna traccia predefinita.

Ho appena saputo che prima c'era un DBA che lo metteva offline, ma nessuna email o comunicazione scritta in quanto tale.

Possiamo trovare informazioni su questo?

per favore suggerisci, grazie!

Risposte:


11

Puoi scoprire tutti questi eventi che si trovano nel ciclo del registro eventi corrente usando sp_readerrorlog:

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

È possibile scorrere i valori di @p1se non lo si trova nel registro eventi corrente. Per impostazione predefinita, dovresti essere in grado di leggere i file di registro degli errori 6 correnti e precedenti, quindi usa 0-6 come argomenti lì per tornare il più lontano possibile (sul mio sistema non sono riuscito a ottenere 0/ NULLaggregare tutti i file di registro; YMMV ).

Restituirà qualcosa del genere:

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

È possibile, ovviamente, che il registro degli errori venga popolato abbastanza che gli eventi si siano verificati prima dell'attuale serie di registri degli errori. In tal caso, sei sfortunato. Per mantenere una cronologia di esecuzione più lunga in futuro, è possibile modificare il numero di log degli errori che vengono conservati. In Esplora oggetti espandere Gestione, fare clic con il pulsante destro del mouse su Log di SQL Server e selezionare Configura. Lì puoi modificare le impostazioni di riciclaggio dei file di registro degli errori, incluso il mantenimento dei 99 file precedenti. Vedi anche questa risposta .

Si noti che sp_readerrorlognon è documentato e non supportato, anche se molte persone ne hanno scritto . Alla fine, i file di registro degli errori sono solo file di testo semplice, quindi è possibile scrivere il proprio PowerShell, CLR ecc. Che analizza i file e restituisce le stesse informazioni. È possibile determinare dove si trovano i file di registro degli errori per questa istanza utilizzando:

SELECT SERVERPROPERTY('ErrorLogFileName');

I file saranno chiamati ERRORLOG, ERRORLOG.1, ERRORLOG.2, ecc Si può andare e aprire i file in un editor di testo di base per vedere la struttura, anche se vorrei essere cauti circa l'apertura del file corrente in uso ( ERRORLOG).


Ciao Aaron, non ho effettuato l'accesso offline nei miei registri di SQL Server. Ci sono delle impostazioni per farci prendere questo alter? Grazie,
DBALUKE HUANG

@DBALUKEHUANG No, se è accaduto prima della prima voce nel registro degli errori e non c'è nulla nel Visualizzatore eventi , sei sfortunato.
Aaron Bertrand

Sì Aaron, nei log di SQL Server non è correlato a offline. Per l'online, ha i registri ... Mi chiedo solo se ci sono impostazioni speciali per consentire a SQL Server di catturare questo?
DBALUKE HUANG

@DBALUKEHUANG Basta ricordare che un database può andare offline per motivi diversi da qualcuno che lo imposta esplicitamente OFFLINE. In offlinerealtà lo stato è attivo sys.databases?
Aaron Bertrand

4

Se il database è stato impostato offline:

vale a dire

alter database AdventureWorks2012
set offline;
go

Verrà effettivamente visualizzato un messaggio registrato nel registro degli errori di SQL Server:

Impostazione dell'opzione database OFFLINE su ON per il database 'AdventureWorks2012'.

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

ID messaggio di 5084 se si stanno monitorando le modifiche alle opzioni del database.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.