Modifier accidentellement le nom de la base de données (SQL Server 2008)

8

Cela ne m'est pas encore arrivé. Mais j'y pensais.

Je déconnais avec mon environnement d'entraînement, et par erreur, j'ai cliqué sur le nom de la base de données, puis j'ai touché la lettre A.

Cas

Supposons que j'appuie sur Entrée. Maintenant, la base de données s'appelle A, et je ne me souviens plus du nom d'origine. CTRL + Z ne fonctionne pas.

case2

Que faire dans un cas comme celui-ci, dans un environnement de production?

Je sais que cela ne pourrait pas se produire, car la base de données n'est pas définie comme UTILISATEUR UNIQUE. Mais si ça arrive. Que faire? Pour les besoins de l'argument, disons que c'est une base de données que personne n'utilise actuellement.

Racer SQL
la source
2
J'aurais un utilisateur spécifique qui a des ALTER DATABASEautorisations et je ne me connecterais en tant qu'utilisateur que lorsque je souhaite réellement exécuter un ALTER DATABASEscript. De cette façon, vous ne ferez jamais ce qui précède
Mark Sinkinson

Réponses:

12

Faites un clic droit sur la base de données, accédez aux fichiers. Vous pouvez voir les noms de fichiers d'origine. Cela vous aidera à trouver facilement le nom de base de données correct. Les noms de fichiers ne seront pas modifiés lors d'un changement de nom.

Vous pouvez également essayer de jeter un œil à votre fn_dblog. Ce n'est pas documenté mais vous pouvez voir (et filtrer) les dernières actions.

SELECT * 
FROM fn_dblog(NULL,NULL)
Ionique
la source
2
Les données ne sont pas affichées à partir de cette requête en texte brut. Aurait besoin de le mouler sous une forme lisible avec quelque chose commeSELECT 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

Je doute que vous ayez une base de données en production dont vous ne connaissez pas le nom ou que vous ne l'ayez pas documentée quelque part.

Si cela se produit en production, vous pouvez consulter la liste des sauvegardes existantes en utilisant

RESTORE HEADERONLY FROM DISK = '<backuplocation>' 

Ou utilisez dbo.backupsetdepuis msdb.

SELECT DISTINCT database_name FROM msdb.dbo.backupset
oughai
la source
5

Vous pouvez consulter les journaux SQL Server pour la dernière fois que SQL Server a démarré et rechercher chaque instance de «Démarrage de la base de données« DBName ». Vous pouvez ensuite comparer cette liste aux résultats de sys.databases. Toute nouvelle base de données et celle que vous avez modifiée ne figureront pas dans la liste des journaux SQL Server.

Une autre façon, peut-être meilleure, serait d'interroger la trace et le filtre par défaut par :: fn_trace_gettable database_id. En supposant qu'il y a eu une utilisation récente de la base de données, la colonne databaseName affichera l'ancien nom, puis dans une ligne plus récente le nouveau nom avec un type d'événement 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
Pixélisé
la source