O modo de compatibilidade do SQL Server não está registrado

1

Estou pesquisando um problema que foi diagnosticado como alguém alterando o modo de compatibilidade do banco de dados do SQL Server de 80 para 90 no SQL Server 2005 para um banco de dados com o modo de compatibilidade definido como 80 devido ao código de procedimento armazenado legado não tendo sido atualizado.

Descobri que, ao alterar o modo de compatibilidade, isso não é registrado nos logs do SQL Server.

Alguém viu esse problema e isso é um bug ou existe um método alternativo para rastrear essas alterações?

    
por smithsi 02.03.2010 / 16:24

2 respostas

1

Claro que está logado. Teste de validação fácil de violação:

create database foo
alter database foo set recovery full
backup database foo to disk='nul:'
go

exec sp_dbcmptlevel 'foo', '80'
go

use foo
select * from fn_dblog(null, null)
go

A mudança estará lá para ver:

LOP_MODIFY_ROW  LCX_BOOT_PAGE ... 0x50

A página de inicialização do banco de dados atualizou o nível de compatibilidade para 0x50 (ou '80').

Além disso, a alteração está registrada no ERRORLOG:

2010-04-08 16:15:39.37 spid52      Setting database option COMPATIBILITY_LEVEL to 80 for database 'foo'.

E também cria um evento de registro de eventos do sistema NT:

Log Name:      Application
Source:        ...
Date:          4/8/2010 4:15:39 PM
Event ID:      5084
Task Category: Server
Level:         Information
Keywords:      Classic
User:          ...
Computer:      ...
Description:
Setting database option COMPATIBILITY_LEVEL to 80 for database 'foo'.
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="..." />
    <EventID Qualifiers="16384">5084</EventID>
    <Level>4</Level>
    <Task>2</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2010-04-08T23:15:39.000000000Z" />
    <EventRecordID>4965</EventRecordID>
    <Channel>Application</Channel>
    <Computer>...</Computer>
    <Security UserID="S-1-5-..." />
  </System>
  <EventData>
    <Data>COMPATIBILITY_LEVEL</Data>
    <Data>80</Data>
    <Data>foo</Data>
    <Binary>...</Binary>
  </EventData>
</Event>
    
por 09.04.2010 / 01:25
0

Eu não acredito que esteja logado em lugar algum. Pode estar no traço padrão, mas eu não penso assim. Permissões para sp_dbcmptlevel padrão apenas para membros da função de servidor fixa sysadmin. Isso restringe quem pode executar o procedimento armazenado.

Ao executar os rastreios do lado do servidor, você pode detectar o comando que está sendo executado, mas isso pode ser difícil de gerenciar. É provavelmente o único caminho seguro, no entanto. Outra opção é executar consultas periodicamente em sys.databases, verificando o nível de compatibilidade e outras alterações.

    
por 02.03.2010 / 17:47