Alterar acidentalmente o nome do banco de dados (SQL Server 2008)

8

Ainda não aconteceu comigo. Mas eu estava pensando sobre isso.

Eu estava brincando com meu ambiente de treinamento e, por engano, cliquei no nome do banco de dados e toquei na letra A.

Caso

Vamos supor que eu aperte enter. Agora, o banco de dados é chamado A e não lembro o nome original. CTRL + Z não funciona.

case2

O que fazer em um caso como esse, em um ambiente de produção?

Eu sei que isso não poderia acontecer, porque o banco de dados não está definido como USUÁRIO ÚNICO. Mas se isso acontecer. O que fazer? Por uma questão de argumento, digamos que é um banco de dados que ninguém está usando no momento.

Racer SQL
fonte
2
Eu teria um usuário específico que tenha ALTER DATABASEpermissões e só efetue login como esse usuário quando realmente desejar executar um ALTER DATABASEscript. Dessa forma, você nunca vai fazer o descrito acima
Mark Sinkinson

Respostas:

12

Clique com o botão direito do mouse no banco de dados, vá para arquivos. Você pode ver os nomes dos arquivos originais. Isso ajudará você a encontrar o nome correto do banco de dados facilmente. Os nomes dos arquivos não serão alterados em uma renomeação.

Você também pode tentar dar uma olhada no seu fn_dblog. Não está documentado, mas você pode ver (e filtrar) as últimas ações.

SELECT * 
FROM fn_dblog(NULL,NULL)
Ionic
fonte
2
Os dados não são exibidos nesta consulta em texto sem formatação. Seria necessário lançá-lo aos forma legível com algo parecidoSELECT CAST([RowLog Contents 0] AS sysname) ,CAST([RowLog Contents 1] AS sysname) FROM sys.fn_dblog(NULL,NULL) WHERE Context = 'LCX_BOOT_PAGE' AND [Offset in Row] =52
Martin Smith
7

Duvido que você tenha um banco de dados em produção cujo nome você não saiba ou não o tenha documentado em algum lugar.

Se isso acontecer na produção, você poderá procurar a lista de backups existentes usando

RESTORE HEADERONLY FROM DISK = '<backuplocation>' 

Ou use dbo.backupsetdo msdb.

SELECT DISTINCT database_name FROM msdb.dbo.backupset
ughai
fonte
5

Você pode examinar os logs do SQL Server pela última vez que o SQL Server foi iniciado e procurar cada instância do 'Iniciando o banco de dados' DBName '. Você pode comparar essa lista com os resultados do sys.databases. Quaisquer novos bancos de dados e o que você alterou não estarão na lista de logs do SQL Server.

Outra maneira, talvez melhor, seria consultar o rastreamento e o filtro padrão pelo :: fn_trace_gettable database_id. Supondo que houve algum uso recente do banco de dados, a coluna databaseName mostrará o nome antigo e, em uma linha mais recente, o novo nome com o tipo de evento Object: Altered.

SELECT  *
        ,cast(value as nvarchar(1000))
FROM   ::fn_trace_getinfo(default)
WHERE   traceid = 1 and   property = 2;

SELECT  ftg.StartTime,
        ftg.EndTime,
        te.name,
        ftg.sessionLoginName,
        ftg.ObjectName,
        ftg.DatabaseName,
        ftg.ServerName,
        ftg.LoginName,
        ftg.hostName,
        ftg.NTUserName,
        ftg.DatabaseID,
        ftg.TextData,
        ftg.TargetuserName
        ,SPACE(10) AS [Space]
        ,*
FROM    ::fn_trace_gettable('Z:\SQLServer\MSSQL\Log\log_5.trc', default) AS ftg 
INNER JOIN
        sys.trace_events AS te 
        ON  ftg.EventClass = te.trace_event_id  
ORDER BY
        ftg.StartTime DESC
Pixelated
fonte