Quando um banco de dados foi colocado offline

9

Eu estou tentando encontrar uma maneira de descobrir quando alguns dos meus bancos de dados sql foram colocados offline.

Verifiquei os logs, mas não consegui encontrar essas informações e, além disso, não há nenhum rastreamento padrão ativado.

Eu só tenho uma informação de que, anteriormente, havia um DBA que a retirou do ar, mas nenhum e-mail ou comunicação escrita como tal ..

Podemos encontrar uma informação sobre isso?

por favor sugira, obrigado!

KASQLDBA
fonte

Respostas:

11

Você pode descobrir todos esses eventos que estão no ciclo atual do log de eventos usando sp_readerrorlog:

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

Você pode percorrer os valores de @p1se não o encontrar no log de eventos atual. Por padrão, você deve poder ler os 6 arquivos de log de erros atuais e anteriores, portanto, use 0-6 como argumentos para voltar o mais longe possível (no meu sistema não foi possível obter 0/ NULLagregar em todos os arquivos de log; YMMV )

Retornará algo como isto:

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

É claro que há uma chance de o log de erros ser preenchido o suficiente para que o (s) evento (s) tenha ocorrido antes do conjunto atual de logs de erros. Nesse caso, você está sem sorte. Para manter um histórico de execução mais longo no futuro, você pode alterar o número de logs de erros que são mantidos. No Pesquisador de Objetos, expanda Gerenciamento, clique com o botão direito do mouse em Logs do SQL Server e escolha Configurar. Lá, você pode alterar as configurações de reciclagem do arquivo de log de erros, incluindo manter os 99 arquivos anteriores. Veja também esta resposta .

Observe que não sp_readerrorloghá documentos e não há suporte, embora muitas pessoas tenham escrito sobre isso . No final, os arquivos de log de erros são apenas arquivos de texto sem formatação, então você pode escrever seu próprio PowerShell, CLR etc., que apenas analisa os arquivos e retorna as mesmas informações. Você pode determinar onde estão os arquivos de log de erros para esta instância usando:

SELECT SERVERPROPERTY('ErrorLogFileName');

Os arquivos serão nomeados ERRORLOG, ERRORLOG.1, ERRORLOG.2, etc. Você pode ir e abrir os arquivos em um editor de texto básico para ver a estrutura, embora eu seria cauteloso sobre a abertura do arquivo atual em uso ( ERRORLOG).

Aaron Bertrand
fonte
Olá Aaron, não tenho offline conectado nos meus logs do SQL Server. Existe alguma configuração para nos permitir pegar essa alteração? Obrigado,
DBALUKE HUANG
@DBALUKEHUANG Não, se isso aconteceu antes da entrada mais antiga no log de erros e não há nada no visualizador de eventos , você está sem sorte.
Aaron Bertrand
Sim Aaron, não há nada relacionado ao offline nos logs do SQL Server. Para o online, ele possui os logs ... Gostaria de saber se há alguma configuração especial para permitir que o SQL Server pegue isso?
DBALUKE HUANG
@DBALUKEHUANG Lembre-se de que um banco de dados pode ficar offline por outros motivos que não sejam explicitamente definidos por ele OFFLINE. É offlinerealmente o status sys.databases?
Aaron Bertrand
4

Se o banco de dados foi definido offline:

ie

alter database AdventureWorks2012
set offline;
go

Você realmente veria uma mensagem registrada no log de erros do SQL Server:

Definir a opção de banco de dados OFFLINE como ON para o banco de dados 'AdventureWorks2012'.

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

ID da mensagem 5084 se você estiver monitorando alterações nas opções do banco de dados.

Thomas Stringer
fonte