Ändern Sie versehentlich den Datenbanknamen (SQL Server 2008)

8

Es ist mir NOCH nicht passiert. Aber ich habe darüber nachgedacht.

Ich habe mit meiner Trainingsumgebung herumgespielt und versehentlich auf den Datenbanknamen geklickt und dann den Buchstaben A berührt.

Fall

Nehmen wir an, ich drücke die Eingabetaste. Jetzt heißt die Datenbank A und ich erinnere mich nicht an den ursprünglichen Namen. STRG + Z funktioniert nicht.

case2

Was ist in einem solchen Fall in einer Produktionsumgebung zu tun?

Ich weiß, dass dies nicht passieren kann, da die Datenbank nicht als SINGLE USER festgelegt ist. Aber wenn es passiert. Was ist zu tun? Nehmen wir an, es handelt sich um eine Datenbank, die derzeit niemand verwendet.

Racer SQL
quelle
2
Ich hätte einen bestimmten Benutzer mit ALTER DATABASEBerechtigungen und würde mich nur dann als dieser Benutzer anmelden, wenn ich tatsächlich ein ALTER DATABASESkript ausführen möchte . Auf diese Weise werden Sie nie das oben genannte tun
Mark Sinkinson

Antworten:

12

Klicken Sie mit der rechten Maustaste auf die Datenbank und gehen Sie zu Dateien. Sie können die ursprünglichen Dateinamen sehen. Auf diese Weise können Sie den richtigen Datenbanknamen leicht finden. Die Dateinamen werden bei einer Umbenennung nicht geändert.

Sie können auch versuchen, einen Blick auf Ihre fn_dblog. Es ist nicht dokumentiert, aber Sie können die neuesten Aktionen anzeigen (und filtern).

SELECT * 
FROM fn_dblog(NULL,NULL)
Ionisch
quelle
2
Die Daten dieser Abfrage werden nicht im Klartext angezeigt. Müsste es in lesbare Form mit so etwas wieSELECT 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

Ich bezweifle, dass Sie eine Datenbank in Produktion haben würden, deren Namen Sie nicht kennen oder die Sie nicht irgendwo dokumentiert haben.

Wenn dies in der Produktion der Fall ist, können Sie die Liste der vorhandenen Sicherungen mit nachschlagen

RESTORE HEADERONLY FROM DISK = '<backuplocation>' 

Oder verwenden Sie dbo.backupsetvon msdb.

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

Sie können die SQL Server-Protokolle zum letzten Start von SQL Server anzeigen und nach jeder Instanz von 'Datenbank starten' DBName 'suchen. Sie können diese Liste dann mit den Ergebnissen von sys.databases vergleichen. Alle neuen und von Ihnen geänderten Datenbanken werden nicht in die SQL Server-Protokollliste aufgenommen.

Eine andere, vielleicht bessere Möglichkeit wäre, den Standard-Trace abzufragen und nach der :: fn_trace_gettable database_id zu filtern. Unter der Annahme, dass kürzlich eine Datenbank verwendet wurde, wird in der Spalte databaseName der alte Name und in einer neueren Zeile der neue Name mit dem Ereignistyp Object: Altered angezeigt.

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
Pixeliert
quelle