意外更改数据库名称 (SQL Server 2008)

Rac*_*SQL 8 sql-server-2008 sql-server

它没有发生在我身上。但我正在考虑这个问题。

我在弄乱我的训练环境,误点了数据库名称,然后我触摸了字母A。

案件

假设我按下了回车键。现在数据库叫A,不记得原来的名字了。CTRL + Z 不起作用。

案例2

在这样的情况下,在生产环境中该怎么办?

我知道这不可能发生,因为数据库没有设置为 SINGLE USER。但如果发生了。该怎么办?为了论证起见,假设它是一个现在没有人使用的数据库。

Ion*_*nic 12

右键单击数据库,转到文件。您可以看到原始文件名。这将帮助您轻松找到正确的数据库名称。重命名时不会更改文件名。

您也可以尝试查看您的fn_dblog. 它没有记录,但您可以查看(和过滤)最新的操作。

SELECT * 
FROM fn_dblog(NULL,NULL)
Run Code Online (Sandbox Code Playgroud)

  • 此查询中的数据不会以纯文本形式显示。需要使用类似`SELECT CAST([RowLog Contents 0] AS sysname) ,CAST([RowLog Contents 1] AS sysname) FROM sys.fn_dblog(NULL,NULL) WHERE Con​​text = 'LCX_BOOT_PAGE' AND [行偏移] =52` (2认同)

ugh*_*hai 7

我怀疑您是否会在生产中拥有一个您不知道或未在某处记录其名称的数据库。

如果它发生在生产中,您可以使用以下方法查找现有备份列表

RESTORE HEADERONLY FROM DISK = '<backuplocation>' 
Run Code Online (Sandbox Code Playgroud)

或者dbo.backupset从 msdb使用。

SELECT DISTINCT database_name FROM msdb.dbo.backupset
Run Code Online (Sandbox Code Playgroud)


Pix*_*ted 5

您可以查看 SQL Server 上次启动时的 SQL Server 日志,并查看“启动数据库 'DBName' 的每个实例。然后,您可以将此列表与 sys.databases 的结果进行比较。任何新数据库和您更改的数据库都不会出现在 SQL Server 日志列表中。

另一种可能更好的方法是通过 ::fn_trace_gettable database_id 查询默认跟踪和过滤器。假设最近有一些数据库使用,databaseName 列将显示旧名称,然后在最近的一行中显示事件类型为 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
Run Code Online (Sandbox Code Playgroud)