Polecenie DBCC CHECKDB(’baza’) WITH NO_INFOMSGS kończy się błędem podobnym do:
DBCC results for 'TableWithDocuments’.
Msg 7904, Level 16, State 2, Line 1
Table error: Cannot find the FILESTREAM file „00000430-00018275-0025” for column ID 12 (column directory ID 10403222-f031-4fb6-bf65-0dc85ff92593) in object ID 1022331424, index ID 1, partition ID 72059854113556480, page ID (1:3846), slot ID 27.
Zapytanie do tabeli z filestream kończy się błędem:
FILESTREAM file named with GUID '31312df2-3tt7-4951-b96b-56b244d8b2cc’ that belongs to FILESTREAM data file ID 0x0 does not exist or cannot be opened.
Co ciekawe odtwarzane backupy również mają w/w błędy, chociaż przed, jak i po backupach baza była wielokrotnie sprawdzana przez CHECKDB… Czyżby CHECKDB źle działało i nie wykryło wcześniej błędu przez co dane zawarte w backupach zawierają błędy? A może CHECKDB działa ppoprawnie, ale mechanizm wykonania kopii zapasowej jest uszkodzony i sporządza złe backupy?
Ani to ani to! Otóż na komputerze pracuje antywirus, który co po niektóre pliki rozpoznał jak zawirusowane i przesunął je do kwarantanny. W takim dziwny przypdaku sprawdź więc, czy pliki FILESTREAM nie trafiły do kwarantanny.
Jakim cudem do sieci trafiły zainfekowane pliki? Podczas audytu często do sprawdzenia poprawności działania systemów antywirusowych tworzy się „niby wirusy” (http://www.mobilo24.eu/test-programu-antywirusowego-eicar-czy-dziala-skanowanie-w-czasie-rzeczywistym/). W tym przypadku sztucznie zawirusowane pliki zostały zapisane do bazy danych do FILESTREAM. Specjalnie skonfigurowany program antywirusowy pomijał pliki FILESTREAM podczas skanowania. Jednak w pewnym momencie zainstalowano inny program antywirusowy, który skanował wszystko. Ten antywirus usunał niby-zakażone pliki FILESTREAM. Kiedy próbowaliśmy odtwarzać bazę z kopii, antywirus na bieżąco usuwał, jego zdaniem, zakażone pliki.
W tym przypadku więc działa i CHECKDB i BACKUP i nawet program antywirusowy. Zawinił hmmm… czynnik biologiczny, czyli audytor, a może FILESTREAM mógłby lepiej współpracować z antywirusem?? Ale to może dopiero w wersji SQL 2020