Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2025 (17.x) und höhere Versionen
In SQL Server 2022 (16.x) und älteren Versionen, wenn In-Memory OLTP für eine Datenbank aktiviert ist, kann der letzte speicheroptimierte Container und die speicheroptimierte Dateigruppe nicht entfernt werden, auch wenn alle In-Memory OLTP-Objekte verworfen werden. Daher läuft das In-Memory OLTP-Engine weiter, auch wenn es nicht verwendet wird.
Ab SQL Server 2025 (17.x) kann das In-Memory OLTP-Modul beendet werden, indem alle speicheroptimierten Container und Dateigruppen in Datenbanken ohne verbleibende In-Memory OLTP-Objekte vollständig entfernt werden.
So entfernen Sie die speicheroptimierten Container und die Dateigruppe, und beenden Sie das In-Memory OLTP-Modul:
Stellen Sie als Überprüfungsschritt eine Verbindung mit der Datenbank her, und führen Sie die folgende Abfrage aus, um zu bestätigen, dass das In-Memory OLTP-Modul (XTP) in der Datenbank bereitgestellt wird:
SELECT deployment_state, deployment_state_desc FROM sys.dm_db_xtp_undeploy_status;Wenn die
deployment_stateSpalte 1 oder 2 ist, wird das In-Memory OLTP-Modul bereitgestellt, und Sie können mit den folgenden Schritten fortfahren. Wenn diedeployment_stateSpalte 0 ist, wird das OLTP-Modul In-Memory nicht in der aktuellen Datenbank bereitgestellt oder wurde bereits beendet, und der Rest dieses Artikels gilt nicht.Legen Sie alle In-Memory OLTP-Objekte in der Datenbank ab, einschließlich speicheroptimierter Tabellen und Tabellentypen sowie nativ kompilierte gespeicherte Prozeduren.
Vorsicht
Dieser Schritt kann zu einem dauerhaften Datenverlust in den speicheroptimierten Tabellen in der aktuellen Datenbank führen. Bevor Sie fortfahren, stellen Sie sicher, dass die Daten nicht benötigt werden, und erstellen Sie eine Sicherung der Datenbank.
Führen Sie die folgenden T-SQL-Anweisungen aus, um In-Memory OLTP-Objekte in einer Datenbank zu finden:
USE [<database-name-placeholder>]; /* memory-optimized tables */ SELECT object_id, OBJECT_SCHEMA_NAME(object_id) AS schema_name, name AS table_name FROM sys.tables WHERE is_memory_optimized = 1; /* natively compiled modules */ SELECT object_id, OBJECT_SCHEMA_NAME(object_id) AS schema_name, OBJECT_NAME(object_id) AS module_name FROM sys.all_sql_modules WHERE uses_native_compilation = 1; /* memory-optimized table types */ SELECT SCHEMA_NAME(schema_id) AS type_schema_name, name AS type_name, OBJECT_NAME(type_table_object_id) AS type_table_name FROM sys.table_types WHERE is_memory_optimized = 1;Weitere Informationen finden Sie unter DROP TABLE, DROP PROCEDURE und DROP TYPE.
Entfernen Sie alle speicheroptimierten Container mithilfe der
ALTER DATABASE ... REMOVE FILEAnweisung. Weitere Informationen finden Sie unter ALTER DATABASE-Optionen für Dateien und Dateigruppen. Sie können speicheroptimierte Container auch mithilfe der Seite "Dateien " im Dialogfeld "Datenbankeigenschaften " für Ihre Datenbank in SQL Server Management Studio (SSMS) entfernen.Durch das Entfernen des letzten speicheroptimierten Containers für die Datenbank wird das Entfernen des In-Memory OLTP-Moduls gestartet. Dies ist ein lang ausgeführter Vorgang, der möglicherweise zusätzliche Schritte erfordert. Weitere Informationen finden Sie in den Schritten zum Abschließen der letzten speicheroptimierten Containerentfernung weiter unten in diesem Artikel.
Wenn Sie eine lange laufende
ALTER DATABASE ... REMOVE FILE-Anweisung beim Entfernen des letzten speicheroptimierten Containers abbrechen, könnte die Entfernung möglicherweise nur teilweise abgeschlossen sein. Um die Entfernung abzuschließen, können Sie dieALTER DATABASE ... REMOVE FILEAnweisung später ausführen.Entfernen Sie die speicheroptimierte Dateigruppe mithilfe der
ALTER DATABASE ... REMOVE FILEGROUPAnweisung, oder verwenden Sie die Seite "Dateigruppen" im Dialogfeld "Datenbankeigenschaften " in SSMS.
Das Entfernen der speicheroptimierten Container und dateigruppe ist erfolgreich, und das In-Memory OLTP-Modul wird beendet, wenn der Wert in der deployment_state Spalte in sys.dm_db_xtp_undeploy_status 0 ist.
Hinweis
Die speicheroptimierte Containerentfernung wird nicht unterstützt, wenn es irgendwelche Datenbanksnapshots in der Datenbank gibt. Löschen Sie alle Momentaufnahmen, bevor Sie speicheroptimierte Container entfernen.
Schritte zum Abschließen der letzten speicheroptimierten Containerentfernung
Wenn die ALTER DATABASE ... REMOVE FILE Anweisung zum Entfernen des letzten speicheroptimierten Containers nicht sofort abgeschlossen wird, sind weitere Schritte erforderlich.
Der sys.dm_db_xtp_undeploy_status DMV zeigt den Status des In-Memory OLTP-Verarbeitungsmaschinenentfernungsprozesses an. Verwenden Sie in den folgenden Schritten diese Abfrage, um den aktuellen Status und die erforderlichen Aktionen zu ermitteln:
SELECT deployment_state,
deployment_state_desc,
undeploy_lsn,
start_of_log_lsn
FROM sys.dm_db_xtp_undeploy_status;
Wenn der
deployment_stateWert 3 ist und der Wert in derundeploy_lsnSpalte 0 ist, führen Sie den folgenden Befehl aus:CHECKPOINT;Wenn der
deployment_stateWert 3 ist und der Wert in derundeploy_lsnSpalte nicht 0 ist, wartet der Containerentfernungsprozess auf die Logsequenznummer (Log Sequence Number, LSN) in derstart_of_log_lsnSpalte, um über den LSN-Wert in derundeploy_lsnSpalte hinaus zu wechseln. Dies erfordert, dass das Transaktionsprotokoll beschnitten wird. So kürzen Sie das Protokoll ab:Führen Sie den folgenden Befehl aus:
CHECKPOINT;Um
start_of_log_lsnüberundeploy_lsnhinaus vorzugehen, müssen Sie diesen Befehl möglicherweise mehrmals ausführen und nach jeder Ausführung eine Minute warten.Wenn die Datenbank das Wiederherstellungsmodell"Vollständig" oder "Massenprotokoll" verwendet, müssen Sie zusätzlich zur Ausführung der
CHECKPOINTBefehle möglicherweise den Grund für die Verzögerung bei der Protokollverkürzung ermitteln und beheben, die in derlog_reuse_wait_descSpalte dersys.databasesKatalogansicht angegeben wird.Wenn der Wert von
deployment_statenach dem Ausführen derCHECKPOINTBefehle 3 bleibt, führen Sie die folgende Anweisung aus:SELECT name, log_reuse_wait_desc FROM sys.databases WHERE database_id = DB_ID();Sobald Sie den Grund für die Verzögerung bei der Protokollverkürzung kennen, sehen Sie Faktoren, die die Protokollverkürzung verzögern können für weitere Informationen und um die entsprechende Aktion zu ermitteln.
In aktiven Datenbanken wird das Transaktionsprotokoll normalerweise nach einiger Zeit automatisch ohne zusätzliche Benutzeraktion verkürzt. Beispielsweise, wenn
log_reuse_wait_descinsys.databasesLOG_BACKUPist, dann kürzen geplante oder bei Bedarf durchgeführte Protokollsicherungen das Protokoll. Weitere Informationen finden Sie unter Sichern eines Transaktionsprotokolls.Wenn der Wert in der
log_reuse_wait_descSpalte lautetNOTHING, aber der Wert indeployment_stateSpalte 3 bleibt, sichern Sie das Transaktionsprotokoll. Um das Transaktionsprotokoll abzuschneiden, müssen Sie möglicherweise mehrere Transaktionsprotokollsicherungen erstellen.
Wenn der
deployment_stateWert 4 ist, hat der Start des aktiven Teils des Transaktionsprotokolls den LSN der Aufhebung der Bereitstellung überschritten, und der Prozess der Containerentfernung wartet auf den endgültigen Protokolldatensatz der Aufhebung der Bereitstellung. In den meisten Fällen wird dieser Schritt innerhalb weniger Sekunden ohne zusätzliche Aktion abgeschlossen.Wenn die Datenbank über Verfügbarkeitsreplikate verfügt, muss das Ausführungsprotokoll der Nichtbereitstellung weitergegeben und auf alle Replikate angewandt werden. Wenn der Wert 4 lange bestehen bleibt, sehen Sie unter Ermitteln, warum Änderungen vom primären Replikat in einer Always On-Verfügbarkeitsgruppe nicht im sekundären Replikat reflektiert werden, um weitere Informationen zu erhalten.
Wenn der
deployment_stateWert 5 ist, wartet der Containerentfernungsprozess auf den abschluss des endgültigen XTP-Prüfpunktvorgangs. Führen Sie den folgenden Befehl aus, um einen Prüfpunkt sofort zu initiieren:CHECKPOINT;Ein XTP-Prüfpunkt tritt automatisch auf, sobald das Transaktionsprotokoll um einen bestimmten Schwellenwert gewachsen ist. Weitere Informationen finden Sie unter Prüfpunktvorgang für Memory-Optimized Tabellen.
Sobald der letzte XTP-Prüfpunktvorgang abgeschlossen ist, wird der Entfernung des letzten speicheroptimierten Containers erfolgreich abgeschlossen, und der Wert in der
deployment_stateSpalte wird 0.Wenn der
deployment_stateWert 6 ist, bedeutet dies, dass dieALTER DATABASE ... REMOVE FILEAnweisung für den letzten speicheroptimierten Container storniert oder abgebrochen wurde. Führen Sie die Anweisung erneut aus, um das Entfernen des Containers abzuschließen.