SQL SERVER – FIX: Error 5161 – An Unexpected file id was Encountered
Tempdb dosyalarını arttırmak ve bunun performans faydası hakkında bir demo yapmayı planlıyorduk. Test ortamlarımızda hazırlık yaptık. Script’i çalıştırdık ve SQL Server hizmetini yeniden başlattık ancak SQL Hizmeti başlamadı.
ERRORLOG’a baktık (ve herhangi bir SQL başlatma sorunu olması durumunda bu günlüğe bakmanızı öneririm) ve SQL kapatma mesajlarından önce aşağıdaki hataları bulduk.
2022-12-02 17:03:24.42 spid18s Error: 5161, Severity: 16, State: 1.
2022-12-02 17:03:24.42 spid18s An unexpected file id was encountered.
File id 3 was expected but 4 was read from D:\TempDB\tempdev3.ndf. Verify that files are mapped correctly in sys.master_files.
2014-12-02 17:03:24.42 spid18s Could not create tempdb. You may not have enough disk space available. Free additional disk space by deleting other files on the tempdb drive and then restart SQL Server. Check for additional errors in the event log that may indicate why the tempdb files could not be initialized.
Sorunu anladık ama SQL şimdi başlatamıyoruz, nasıl değiştirebiliriz? En kolay seçenek dosyayı kaldırmak ve uygun bir isimle eklemektir
1. SQL Server’ı flag 3608 ile başlatmak
Komut isteminden aşağıdaki komutu kullanabiliriz.
net start mssqlserver /T3608
Makinemizde varsayılan bir örnek vardı, bu yüzden MSSQLServer kullandık.
Adlandırılmış örnek için MSSQL$<InstanceName> kullanmamız gerekir
2. ALTER Database komutunu çalıştırmak
İstenmeyen dosyaları kaldırmak için ALTER DATABASE komutunu aşağıdaki gibi çalıştırın. SQLCMD ile bağlandık ve tempdev2’yi kaldırıyoruz çünkü tempdev3 olarak dosyası var. Bu işlem Management Studio’dan da yapılabilir.
Geçerli eşlemeyi bulmak için aşağıdaki sorguyu da çalıştırabiliriz. Veritabanı ID = 2 her zaman tempDB veritabanıdır.
SELECT name, physical_name FROM sys.master_files WHERE database_id = 2
3. SQL Server’ı Normal Başlatmak
Yukarıdaki adımlar gerçekleştirildikten sonra, SQL’e bağlanabilmeli ve TempDB’de bu sefer doğru şekilde değişiklik yapabilmeliyiz.
Siz hiç benzer tempdb hatalarıyla karşılaştınız mı? Bunları nasıl düzelttiniz?