Случайно изменить имя базы данных (SQL Server 2008)

8

Этого не случилось со мной. Но я думал об этом.

Я возился со своей учебной средой и по ошибке щелкнул имя базы данных, а затем коснулся буквы А.

случай

Давайте предположим, что я нажал Enter. Теперь база данных называется A, и я не помню оригинальное имя. CTRL + Z не работает.

Вариант 2

Что делать в таком случае, в производственной среде?

Я знаю, что это не могло произойти, потому что база данных не установлена ​​как ОДИН ПОЛЬЗОВАТЕЛЬ. Но если это произойдет. Что делать? Ради аргумента, скажем, это база данных, которой никто не пользуется сейчас.

Racer SQL
источник
2
У меня был бы конкретный пользователь, у которого есть ALTER DATABASEразрешения, и я мог бы войти в него только тогда, когда я действительно хочу запустить ALTER DATABASEскрипт. Таким образом, вы никогда не будете делать вышеперечисленное
Марк Синкинсон

Ответы:

12

Щелкните правой кнопкой мыши по базе данных, перейдите к файлам. Вы можете увидеть оригинальные имена файлов. Это поможет вам легко найти правильное имя базы данных. Имена файлов не будут изменены при переименовании.

Вы также можете попробовать взглянуть на свои fn_dblog. Это недокументировано, но вы можете увидеть (и отфильтровать) последние действия.

SELECT * 
FROM fn_dblog(NULL,NULL)
ионный
источник
2
Данные этого запроса не отображаются в виде обычного текста. Нужно будет привести его к читаемой форме с чем-то вродеSELECT 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
Мартин Смит
7

Я сомневаюсь, что у вас будет производственная база данных, имя которой вы не знаете или не документировали.

Если это произойдет в производстве, вы можете посмотреть список существующих резервных копий, используя

RESTORE HEADERONLY FROM DISK = '<backuplocation>' 

Или используйте dbo.backupsetиз MSDB.

SELECT DISTINCT database_name FROM msdb.dbo.backupset
ughai
источник
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
Pixelated
источник