MSSQL Server “Error 32:The process cannot access the file because it is being used by another process.” Hatasının Çözümü

Bu makalede Change Pending durumunda olan sql server servis hesabını SHUTDOWN WITH NOWAIT komutuyla kapatıp tekrar açmak istediğimizde sql server servis hesabı açılmaz. Bu gibi durumlarda hatanın neden kaynaklandığını sql server error log’larından veya event viewer’dan hatasının sebebi öğrenilebilir. SQL Server servisinin başlatılamamasının detaylı nedenini öğrenmek için Windows Event Viewer’ı (Olay Görüntüleyici) kontrol edin. Özellikle “Application” ve “System” loglarına bakılması gerekmektedir.

Sql server kurulu olan dizinde bulunan sql server errorlog’undan hatanın sebebi öğrenilir. Sql server servis hesabı çalışmazsa bile neden çalışmadığına bu klasörden ulaşabiliriz.

ERRORLOG klasörünü notepad’den açıldığında servis hesabının start edildiğinde neden açılmadığı görülmektedir.

Hata Mesajı:

Error 32(The process cannot access the file because it is being used by another process.) occurred while opening file ‘C:\Program Files\Microsoft SQL Server\MSSQL14.XXXX\MSSQL\DATA\master.mdf’ to obtain configuration information at startup. An invalid startup option might have caused the error. Verify your startup options, and correct or remove them if necessary.

İşlem, dosya başka bir işlem tarafından kullanıldığı için dosyaya erişemiyor. Bu hata, başlatma sırasında yapılandırma bilgilerini almak için ‘C:\Program Files\Microsoft SQL Server\MSSQL14.XXXX\MSSQL\DATA\master.mdf’ dosyasını açarken oluştu. Geçersiz bir başlatma seçeneği hataya neden olmuş olabilir. Başlatma seçeneklerinizi doğrulayın ve gerekirse düzeltin veya kaldırın.

Error log’taki kritik satır bu:

Error: 32 – The process cannot access the file because it is being used by another process

Yani SQL Server master.mdf / mastlog.ldf dosyalarına erişemiyor. Bu da genelde şunlardan biri demek:

  • Eski sqlservr.exe hâlâ çalışıyor.
  • Başka bir SQL instance aynı dosyaları kilitlemiş olabilir.
  • Antivirus / backup / indexer master dosyalarını kilitlemiş olabilir.
  • Servis hesabının dosya izinleri bozulmuş olabilir.

Bu senaryoda genelde SQL düzgün kapanmadığı için dosya kilidi / bozuk startup / yarım kalan process olur. Task manager’da sql server servis hesabının hala çalışıp çalışmadığı kontrol edilmelidir. (sqlservr.exe) Varsa End Task denilmesi gerekmektedir.

CMD komut satırı yönetici olarak çalıştırılıp ilgili komut çalıştırılarak sql server PID değeri görülebilir.

tasklist | findstr sqlservr

Hangi PID değeri sql server’ı tutuyorsa kill edilmesi gerekmektedir. Bunlar Antivirüs, Backup agent, Eski sqlservr.exe olabilir.

taskkill /PID 3672 /F

Daha sonra sql server servis hesabının komut satırından çalıştırılması gerekmektedir. Error 32 hatasının en yaygın sebebi budur.

net start MSSQLSERVER

Local’de çalıştırdığım ve default instance olduğu için sunucu adı belirtilmez.

Startup parametreleri bozulmuş olabilir. SQL Server Configuration Manager açılıp SQL Server (InstanceName) → Properties → Startup Parameters bölümünden ilgili parametrelerin kontrol edilmesi gerekmektedir. Yanlışsa bunların düzeltilmesi gerekmektedir.

-dC:\Program Files\Microsoft SQL Server\MSSQL14.JGNK2017\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL14.JGNK2017\MSSQL\DATA\mastlog.ldf
-eC:\Program Files\Microsoft SQL Server\MSSQL14.JGNK2017\MSSQL\Log\ERRORLOG

Bu işlerler uğraşmak yerine sql server’ın bulunduğu sunucunun restart edilmesi gerekmektedir.

Log’daki:

Trace flag 1117 is discontinued
Trace flag 1118 is discontinued

Bu hata değil, sadece bilgi mesajıdır. SQL Server 2016+’da bu flag’ler zaten default.

Başka makalede görüşmek dileğiyle..

“Kim zerre kadar iyilik yapmışsa onu görür.”Zilzal Suresi; 7. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir