Это ошибка?
Нет, это не ошибка. Его дизайн. Они хранятся для устранения неполадок и поддержки.
Из SQL_Server_2014_In-Memory_OLTP White_Paper
Администраторам баз данных не нужно поддерживать файлы, сгенерированные собственной компиляцией. SQL Server автоматически удаляет созданные файлы, которые больше не нужны, например, при удалении таблиц и хранимых процедур, а также при удалении базы данных, а также при перезапуске сервера или базы данных.
Я попытался воспроизвести ваш сценарий на SQL Server 2014 + RTM + (Build12.0.2000.8)
сервере Dev Edition, создав тестовую таблицу, оптимизированную для памяти, и проверил dll, загруженную с помощью
SELECT name, description FROM sys.dm_os_loaded_modules
WHERE description = 'XTP Native DLL'
После того, как я удалил свою таблицу, dll
в выводе вышеупомянутого оператора select все еще появляется значок, и файлы все еще находятся в папке, и после перезапуска они все еще там.
Из книг онлайн -
Для управления этими файлами взаимодействие с пользователем не требуется ( .c, .obj, .xml, .pdb., .dll
). SQL Server будет создавать и удалять файлы по мере необходимости.
Так что я думаю, мы просто должны следовать тому, что говорит Microsoft - SQL-сервер будет управлять ими за нас :-)
ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНОЙ ЦЕЛИ:
Мне удалось очистить старые файлы
- Выпуск мануала
CHECKPOINT
по базе данных.
- Перевод базы данных в автономный режим, а затем вывод ее в онлайн
В идеале, вам не следует перезапускать экземпляр сервера, просто ручная контрольная точка и автономная / онлайн-база данных очистят файлы.
например, Repro:
USE master
GO
create database db1
GO
ALTER DATABASE db1 ADD FILEGROUP db1_mod CONTAINS memory_optimized_data
GO
-- adapt filename as needed
ALTER DATABASE db1 ADD FILE (name='db1_mod', filename='D:\SQLServer2014\MSSQL12.SQL2014\MSSQL\DATA\db1_mod') -- change here as per your need !!
TO FILEGROUP db1_mod
GO
USE db1
GO
CREATE TABLE dbo.t1
(c1 int not null primary key nonclustered,
c2 int)
WITH (MEMORY_OPTIMIZED=ON)
GO
--- теперь проверь, загружена ли dll или нет
ВЫБЕРИТЕ имя, описание ОТ sys.dm_os_loaded_modules, ГДЕ описание = 'Собственная DLL XTP'
--- теперь бросьте таблицу и сделайте ручную контрольную точку
use db1;
drop table dbo.t1;
checkpoint
Тем не менее модуль загружен в память (даже перезапуск сервера иногда загружает модуль )
( .c, .obj, .xml, .pdb., .dll
) Все еще присутствуют в папке:
Теперь переведите базу данных в автономный режим, а затем включите ее - все ( .c, .obj, .xml, .pdb., .dll
) исчезли ...