Auf SQL Server 2017 CU3 treten einige seltsame Fehlermeldungen auf. Ich migriere Datenbanken und reorganisiere Dateigruppen. Mit "Reorganisieren" meine ich, dass ich eine gespeicherte Prozedur verwende, die eine Partitionsfunktion und ein Partitionsschema für die neue Dateigruppe für ein Objekt erstellt, die Indizes während der Partitionierung neu erstellt und dann die Partitionierung entfernt.
Am Ende habe ich einige leere Dateigruppen. Ihre Dateien werden entfernt . Auch die Dateigruppe selbst wird entfernt. Dies funktioniert in den meisten Fällen gut. Doch für zwei Datenbanken entfernte ich die Dateien ... hat eine Dateigruppe ohne Datei links assoziiert , aber
ALTER DATABASE REMOVE FILEGROUP
wirft einen Fehler 5042:
Die Dateigruppe 'xyz' kann nicht entfernt werden, da sie nicht leer ist.
Frage
Wie kann ich diese leere Dateigruppe loswerden ... was könnte das Problem sein?
Ich habe bereits einige häufig auftretende Probleme gelesen, die jedoch in meinem System nicht vorhanden sind:
Überprüft:
SELECT * FROM sys.partition_schemes; SELECT * FROM sys.partition_functions;
0 Zeilen ... keine Partitionierungsobjekte mehr in der Datenbank
UPDATE STATISTICS
für alle Objekte in der Datenbankkeine Wirkung
Überprüft die Dateigruppe auf Indizes:
SELECT * FROM sys.data_spaces ds INNER JOIN sys.indexes i ON ds.data_space_id = i.data_space_id WHERE ds.name = 'xyz'
0 Zeilen
Überprüft, ob Objekte in der Dateigruppe vorhanden sind:
SELECT au.*, ds.name AS [data_space_name], ds.type AS [data_space_type], p.rows, o.name AS [object_name] FROM sys.allocation_units au INNER JOIN sys.data_spaces ds ON au.data_space_id = ds.data_space_id INNER JOIN sys.partitions p ON au.container_id = p.partition_id INNER JOIN sys.objects o ON p.object_id = o.object_id WHERE au.type_desc = 'LOB_DATA' AND ds.name ='xyz'
0 Zeilen
Ich habe auch DBCC SHRINKFILE
mit parameter EMPTYFILE
versucht, bevor ich die Datei aus der Dateigruppe entfernt habe. Es macht für mich keinen Sinn, aber ich lese Lösungen, um das als Fix zu beschreiben. Hatte sowieso keine Wirkung.
Ich habe einige Hoffnung beim Lesen dieser Frage zum Serverfehler und habe Folgendes versucht:
- Aktualisieren Sie alle Statistiken
- Löschen Sie alle Statistiken, die sich nicht auf Indizes beziehen
Dies hatte jedoch keine Auswirkung. Ich habe immer noch eine Dateigruppe ohne zugeordnete Datei und die Dateigruppe kann nicht gelöscht werden. Ich bin total verwirrt, da dies in einigen Datenbanken und nicht in anderen (mit der gleichen Struktur) geschieht. Wenn ich DBCC CHECK FILEGROUP
mit dieser leeren Dateigruppe arbeite, erhalte ich eine Reihe von Fehlermeldungen wie die folgenden:
Die Rowset-ID 72057594712162304 des Objekts "STORY_TRANSLATIONSCCC" (ID 120387498), Index "Ref90159CCC" (ID 2) kann nicht verarbeitet werden, da sie sich in der Dateigruppe "CCC_APPLICATION_new" (ID 8) befindet, die nicht überprüft wurde.
DBCC-Ergebnisse für 'STORY_TRANSLATIONSCCC'. Es gibt 0 Zeilen auf 0 Seiten für das Objekt "STORY_TRANSLATIONSCCC".
Ist das normal oder deutet es auf etwas Ungewöhnliches hin?
Diese Frage ist möglicherweise ein Duplikat, ich kann jedoch in anderen Fragen auf dba.stackexchange keine funktionierende Lösung für mich finden. Bitte schauen Sie sich die Liste an, was ich bereits ausprobiert habe. Dies ist identisch mit den unter Nicht verwendete Dateigruppen können nicht entfernt werden .
Mehr Details
Vielleicht hilft es zu verstehen, was ich mache, bevor der Fehler auftritt. Ich plane eine Migration auf einen neuen Server. Ich teste dies derzeit auf einer Testinstanz. Datenbanken werden vom Produktserver wiederhergestellt und das Wiederherstellungsmodell wird auf einfach umgestellt. Mein Ziel ist es, die Dateigruppen neu zu strukturieren und von einem Modell mit einer Datei pro Dateigruppe zu einem Modell mit zwei Dateien pro Dateigruppe zu wechseln. Um dies zu erreichen, erstelle ich neue leere Dateigruppen mit jeweils zwei Dateien und verschiebe die Daten. Leider haben die meisten Objekte LOB-Daten (XML und Binär) ... daher nutze ich die Partitionierung als Hilfsmittel, um auch die Lob-Daten zu verschieben. Am Ende befinden sich alle Daten in den neuen Dateigruppen und die alten Dateigruppen sind leer. Dann entferne ich alle Dateien und entferne auch die entsprechende Dateigruppe. Die primäre Dateigruppe bleibt erhalten und es wird nur eine weitere Datei hinzugefügt.Frage von mir . Dieser Vorgang funktioniert einwandfrei, aber in zwei Datenbanken können die Dateien gelöscht werden, die Dateigruppe jedoch nicht. Überraschenderweise sollte die Struktur dieser Datenbanken dieselbe sein wie die Struktur anderer Datenbanken, da beim Verschieben der Daten und Entfernen der alten Dateigruppen keine Probleme aufgetreten sind.
Hier ist eine Liste der Dateigruppen und Dateien der beiden Datenbanken, in denen das Problem auftritt:
- CCC_GENTE
Vor
+-----------------+------------+
| Filegroup | Filename |
+-----------------+------------+
| CCC_APPLICATION | CCC_APP |
+-----------------+------------+
| CCC_ARCHIVE | CCC_ARCHIV |
+-----------------+------------+
| CCC_AXN | CCC_AXN |
+-----------------+------------+
| CCC_GDV | CCC_GDV |
+-----------------+------------+
| PRIMARY | CCC |
+-----------------+------------+
nach
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| Filegroup name | Filegroup temporary name | Filename (logical) | Status |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | - | CCC_APP | file removed, filegroup cannot be removed (error) |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | - | CCC_ARCHIV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | - | CCC_AXN | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | - | CCC_GDV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | CCC | file renamed to PRIMARY_1 |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | PRIMARY_2 | new file added |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
Ich hoffe das hilft ein bisschen. Es gibt auch eine zweite Datenbank, in der die Namen der Dateigruppen unterschiedlich sind, aber ich lasse dies der Kürze halber weg.