Удаление базы данных иногда не удается при использовании FILESTREAM - PullRequest
1 голос
/ 26 сентября 2019

Я использую Microsoft SQL Server 2012 (SP3) и имею базы данных, использующие функцию FILESTREAM, которая будет хранить данные в отдельных файлах для определенных столбцов.База данных выглядит следующим образом:

CREATE DATABASE [MyDatabase]
GO

ALTER DATABASE [MyDatabase] 
    ADD FILEGROUP [FileStreamDataFileGroup] CONTAINS FILESTREAM 
GO

ALTER DATABASE [MyDatabase] 
    ADD FILE ( NAME = N'MyDatabase_FileStreamData', 
               FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11\MSSQL\DATA\MyDatabase-FileStreamData'
             ) TO FILEGROUP [FileStreamDataFileGroup]
GO

CREATE TABLE [MyDatabase].[dbo].[MyTable] 
(
    [Id]      BIGINT           NOT NULL,
    [DataId]  UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL,
    [Content] VARBINARY (MAX)  FILESTREAM NULL,

    CONSTRAINT [PK__PredictionModel] PRIMARY KEY CLUSTERED ([Id] ASC),
    UNIQUE NONCLUSTERED ([DataId] ASC)
) FILESTREAM_ON [FileStreamDataFileGroup];
GO

Я запускаю тесты, которые постоянно создают новые базы данных, запускаю тесты и впоследствии удаляю их.Сервер SQL находится под большой нагрузкой, потому что тесты выполняются параллельно на нескольких базах данных.В некоторых редких случаях (<1%) сбрасывание базы данных завершается ошибкой: </p>

Не удается удалить файл 'C: \ Program Files \ Microsoft SQL Server \ MSSQL11 \ MSSQL \ DATA \ MyDatabase-FileStreamData',Дополнительные сведения см. В журнале ошибок SQL Server.

В журналах SQL Server отображаются следующие журналы:

Операционная система возвратила ошибку «5 (доступ запрещен)», в то время какпопытка 'StreamFileMgr :: DoDeleteFsFile' в 'C: \ Program Files \ Microsoft SQL Server \ MSSQL11 \ MSSQL \ DATA \ MyDatabase-FileStreamData' в 'stmfilemgr.cpp' (5314).

Операционная система вернулаошибка «5 (доступ запрещен)» при попытке «RemoveDirectory» в «C: \ Program Files \ Microsoft SQL Server \ MSSQL11 \ MSSQL \ DATA \ MyDatabase-FileStreamData \ 8a803ce2-3e97-4d60-8aa1-e704d858aae9 \ c802f11a-9c13-4040-9e53-bcd3c67b7960 'at' storage.cpp '(851).

Операционная система вернула ошибку «5 (доступ запрещен)» при попытке «RemoveDirectory» в «C: \ Program Files \ Microsoft»SQL Server \ MSSQL11 \ MSSQL \ DATA \ MyDatabase-FileStreamData \ 8a803ce2-3e97-4d60-8aa1-e704d858aae9 \ c802f11a-9c13-4040-9e53-bcd3c67b7960 'в' storage.cpp '(851).

101операционная система вернула ошибку '5 (AccessОтклонено) при попытке «Удалить каталог» в «C: \ Program Files \ Microsoft SQL Server \ MSSQL11 \ MSSQL \ DATA \ MyDatabase-FileStreamData \ 8a803ce2-3e97-4d60-8aa1-e704d858aae9 \ c802f11a-9c13-4040-9e53-bcdc'at' storage.cpp '(851).

Операционная система вернула ошибку «5 (доступ запрещен)» при попытке «RemoveDirectory» на «C: \ Program Files \ Microsoft SQL Server \ MSSQL11 \»MSSQL \ DATA \ MyDatabase-FileStreamData \ 8a803ce2-3e97-4d60-8aa1-e704d858aae9 \ c802f11a-9c13-4040-9e53-bcd3c67b7960 'в' storage.cpp '(851).

база данныхдействительно исчез (файлы .mdf и .ldf удалены), но папка C:\Program Files\Microsoft SQL Server\MSSQL11\MSSQL\DATA\MyDatabase-FileStreamData все еще существует.

Это своего рода противоречивое состояние, которое трудно обойти, потому что никто, кроме пользователя службы SQL Server, не может получить к нему доступ и удалить его.

Есть ли у кого-нибудь какие-то подсказки, что пошло не так и как я могу это сделать?решить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...