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