Secara tidak sengaja mengubah nama basis data (SQL Server 2008)

8

Itu tidak terjadi pada saya BELUM. Tetapi saya memikirkan hal ini.

Saya bermain-main dengan lingkungan pelatihan saya, dan secara tidak sengaja saya mengklik nama database, dan kemudian saya menyentuh huruf A.

Kasus

Mari kita asumsikan bahwa saya menekan enter. Sekarang database disebut A, dan saya tidak ingat nama aslinya. CTRL + Z tidak berfungsi.

case2

Apa yang harus dilakukan dalam kasus seperti ini, di lingkungan produksi?

Saya tahu itu tidak bisa terjadi, karena database tidak ditetapkan sebagai PENGGUNA TUNGGAL. Tetapi jika itu terjadi. Apa yang harus dilakukan? Demi argumen, katakanlah ini adalah basis data yang tidak digunakan siapa pun saat ini.

SQL pembalap
sumber
2
Saya akan memiliki pengguna tertentu yang memiliki ALTER DATABASEizin dan hanya masuk sebagai pengguna ketika saya benar-benar ingin menjalankan ALTER DATABASEskrip. Dengan begitu Anda tidak akan pernah melakukan hal di atas
Mark Sinkinson

Jawaban:

12

Klik kanan pada database, pergi ke file. Anda dapat melihat nama file aslinya. Ini akan membantu Anda menemukan nama database yang benar dengan mudah. Nama file tidak akan diubah saat ganti nama.

Anda juga dapat mencoba melihat fn_dblog. Tidak berdokumen tetapi Anda dapat melihat (dan memfilter) untuk tindakan terbaru.

SELECT * 
FROM fn_dblog(NULL,NULL)
Ionik
sumber
2
Data tidak ditampilkan dari kueri ini dalam teks biasa. Akan perlu melemparkannya ke bentuk yang dapat dibaca dengan sesuatu sepertiSELECT 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

Saya ragu Anda akan memiliki basis data dalam produksi yang namanya tidak Anda ketahui atau tidak pernah mendokumentasikannya di suatu tempat.

Jika hal itu terjadi dalam produksi, Anda dapat mencari daftar cadangan yang ada menggunakan

RESTORE HEADERONLY FROM DISK = '<backuplocation>' 

Atau gunakan dbo.backupsetdari msdb.

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

Anda bisa melihat Log SQL Server untuk terakhir kali SQL Server memulai dan melihat keluar untuk setiap contoh 'Memulai database' DBName '. Anda kemudian dapat membandingkan daftar ini dengan hasil sys.databases. Setiap basis data baru dan yang Anda ubah tidak akan ada dalam daftar log SQL Server.

Cara lain yang mungkin lebih baik adalah dengan menanyakan jejak dan filter default dengan :: fn_trace_gettable database_id. Dengan asumsi bahwa ada beberapa penggunaan DB baru-baru ini, kolom databaseName akan menunjukkan nama lama dan kemudian di baris yang lebih baru nama baru dengan jenis acara Object: Diubah.

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
sumber