Ist das ein Fehler?
Nein, es ist kein Fehler. Es ist beabsichtigt. Sie werden zur Fehlerbehebung und zur Unterstützung aufbewahrt.
Aus dem SQL_Server_2014_In-Memory_OLTP White_Paper
Datenbankadministratoren müssen die Dateien, die durch die native Kompilierung generiert werden, nicht verwalten. SQL Server entfernt automatisch generierte Dateien, die nicht mehr benötigt werden, z. B. beim Löschen von Tabellen und gespeicherten Prozeduren sowie beim Löschen der Datenbank, aber auch beim Neustart des Servers oder der Datenbank.
Ich habe versucht, Ihr Szenario auf dem SQL Server 2014 + RTM + (Build12.0.2000.8)
Dev Edition-Server zu wiederholen, indem ich eine für den Testspeicher optimierte Tabelle erstellt und die mit geladene DLL überprüft habe
SELECT name, description FROM sys.dm_os_loaded_modules
WHERE description = 'XTP Native DLL'
Nachdem ich meine Tabelle gelöscht habe, wird die dll
noch in der Ausgabe der obigen select-Anweisung angezeigt und die Dateien befinden sich noch im Ordner und nach dem Neustart auch noch dort.
Aus Online-Büchern -
Zum Verwalten dieser Dateien ist keine Benutzerinteraktion erforderlich ( .c, .obj, .xml, .pdb., .dll
). SQL Server erstellt und entfernt die Dateien nach Bedarf.
Also denke ich, wir müssen nur den Aussagen von Microsoft folgen - SQL Server wird sie für uns verwalten :-)
NUR FÜR BILDUNGSZWECKE:
Ich habe es geschafft, die alten Dateien von zu bereinigen
- Ausgabe eines Handbuchs
CHECKPOINT
zur Datenbank.
- Datenbank offline schalten und dann online schalten.
Im Idealfall sollten Sie die Serverinstanz nicht neu starten. Durch manuellen Checkpoint und Offline / Online der Datenbank werden die Dateien gelöscht.
zB 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
--- Überprüfen Sie nun, ob die DLL geladen ist oder nicht
SELECT Name, Beschreibung FROM sys.dm_os_loaded_modules WHERE description = 'XTP Native DLL'
--- Lassen Sie jetzt die Tabelle fallen und führen Sie einen manuellen Checkpoint durch
use db1;
drop table dbo.t1;
checkpoint
Trotzdem ist das Modul im Speicher geladen (selbst ein Neustart des Servers lädt das Modul manchmal )
Die ( .c, .obj, .xml, .pdb., .dll
) sind noch im Ordner vorhanden:
Nehmen Sie nun die Datenbank offline und schalten Sie sie online - die ( .c, .obj, .xml, .pdb., .dll
) sind alle weg ...