誤ってデータベース名を変更する(SQL Server 2008)


8

それは私にはまだ起こりませんでした。しかし、私はこれについて考えていました。

トレーニング環境をいじくり回していて、誤ってデータベース名をクリックしてから、文字Aに触れました。

場合

Enterキーを押したとしましょう。現在、データベースの名前はAですが、元の名前を覚えていません。CTRL + Zは機能しません。

ケース2

このような場合、本番環境ではどうしますか?

データベースがSINGLE USERとして設定されていないため、それが起こり得ないことはわかっています。しかし、それが起こった場合。何をすべきか?議論のために、それは現在誰も使用していないデータベースだとしましょう。


2
ALTER DATABASE権限を持つ特定のユーザーがいて、実際にALTER DATABASEスクリプトを実行したい場合にのみそのユーザーとしてログインします。そうすれば、あなたは決して上記を行うことはありません
マーク・シンキンソン'19 / 06/19

回答:


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
Martin Smith

7

名前がわからない、またはどこかに文書化されていないデータベースが本番環境にあるとは思えません。

本番環境で発生した場合は、次を使用して既存のバックアップのリストを検索できます

RESTORE HEADERONLY FROM DISK = '<backuplocation>' 

またはdbo.backupsetmsdbから使用します。

SELECT DISTINCT database_name FROM msdb.dbo.backupset

5

SQL Serverが最後に起動したときのSQL Serverログを確認し、「Starting up database 'DBName'」の各インスタンスを確認できます。次に、このリストをsys.databasesの結果と比較できます。新しいデータベースと変更したデータベースは、SQL Serverログリストに表示されません。

別の、おそらくより良い方法は、デフォルトのトレースをクエリして、:: fn_trace_gettable database_idでフィルタリングすることです。最近のDBの使用があったとすると、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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.