2013. június 12., szerda

SQL Server - AUTO_CLOSE

A mai nap a következőbe szaladtam bele:
Egy service alkalmazás folyamatosan használja az adatbázisát, semmi extra. Egyszercsak percenként a következő hibaüzenetet dobja:

  • "Database '*****_DB' is being recovered. Waiting until recovery is finished"
Mindezt akkor, amikor managemetn studio-ból próbálok lekérdezni. De nem mindig, minden második futtatásra.
Nézem az alkalmazás logot:
  • System.Data.SqlClient.SqlException: Cannot open database "*****_DB" requested by the login. The login failed.
Gondoltam, lejárt a service user jelszava. De nem.
Nézem az SQL szerver logot:
  • Login failed for user '*****\******User'. Reason: Failed to open the explicitly specified database '*****_DB'. [CLIENT: ]
  • Starting up database '*****_DB'
És ez percenként. Mivan? Mi az hogy percenként "Starting up database"? Nézegetem a státuszát az adatbázisnak, szinte 10 másodpercenként változik "Normal" és "Recovering" módok között. Ez sok jót nem jelent. Nem tudtam hova tenni, sok utánaolvasás után ez a bejegyzés felsorolja, mit kell átnézni.

Itt jön képbe az AUTO_CLOSE property, ami az SQL SERVER EXPRESS EDITION estetében default ON-ra van állítva!!!!
Magyarul ha az utolsó user is kijelentkezik, akkor szépen leállítja a db-t és elkezd recover-elni. Hogy miért, nem tudom, ahogy azt sem hogy eddig ez miért nem volt probléma. Valamitől meghülyült, és a kelleténél többször hitte azt hogy utolsó user kijelentkezett aki használta, és ez lett. 

Megoldás:
Át kell állítani OFF-ra, és működni fog. Nem triviális a db paraméterek lekérdezése, de itt egy bejegyzés rámutat, hogy hogyan kell. Aztán ha meggyőződtünk róla hogy át kell állítani, akkor ilyesmit kell futtatni:

USE master;
GO
ALTER DATABASE *****_DB
SET AUTO_CLOSE OFF;
GO

Nincsenek megjegyzések:

Megjegyzés küldése