Cambiar accidentalmente el nombre de la base de datos (SQL Server 2008)

8

No me sucedió TODAVÍA. Pero estaba pensando en esto.

Estaba jugando con mi entorno de entrenamiento y, por error, hice clic en el nombre de la base de datos y luego toqué la letra A.

Caso

Supongamos que presiono enter. Ahora la base de datos se llama A, y no recuerdo el nombre original. CTRL + Z no funciona.

case2

¿Qué hacer en un caso como este, en un entorno de producción?

Sé que no podría suceder, porque la base de datos no está configurada como ÚNICO USUARIO. Pero si sucede. ¿Qué hacer? Por el bien de la discusión, digamos que es una base de datos que nadie está usando en este momento.

Racer SQL
fuente
2
Tendría un usuario específico que tiene ALTER DATABASEpermisos y solo iniciar sesión como ese usuario cuando realmente quiera ejecutar un ALTER DATABASEscript. De esa manera nunca harás lo anterior
Mark Sinkinson

Respuestas:

12

Haga clic derecho en la base de datos, vaya a los archivos. Puede ver los nombres de los archivos originales. Esto lo ayudará a encontrar fácilmente el nombre correcto de la base de datos. Los nombres de los archivos no se cambiarán en un cambio de nombre.

También puedes intentar echar un vistazo a tu fn_dblog. No está documentado, pero puede ver (y filtrar) las últimas acciones.

SELECT * 
FROM fn_dblog(NULL,NULL)
Iónico
fuente
2
Los datos no se muestran de esta consulta en texto sin formato. Tendría que convertirlo en una forma legible con algo comoSELECT 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

Dudo que tenga una base de datos en producción cuyo nombre desconozca o no haya documentado en alguna parte.

Si sucede en la producción, puede buscar una lista de copias de seguridad existentes usando

RESTORE HEADERONLY FROM DISK = '<backuplocation>' 

O usar dbo.backupsetdesde msdb.

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

Puede ver los registros de SQL Server por última vez que se inició SQL Server y buscar cada instancia de 'Iniciar la base de datos' DBName '. Luego, podría comparar esta lista con los resultados de sys.databases. Las bases de datos nuevas y las que haya cambiado no estarán en la lista de registro de SQL Server.

Otra forma, quizás mejor, sería consultar el rastreo y el filtro predeterminados por :: fn_trace_gettable database_id. Suponiendo que hubo algún uso reciente de la base de datos, la columna databaseName mostrará el nombre anterior y luego, en una fila más reciente, el nuevo nombre con un tipo de evento de Objeto: alterado.

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
Pixelado
fuente