Estoy experimentando algunos mensajes de error extraños en SQL Server 2017 CU3. Estoy migrando bases de datos y reorganizando grupos de archivos. Por "reorganizar" quiero decir que uso un procedimiento almacenado que crea una función de partición y un esquema de partición en el nuevo grupo de archivos para un objeto, reconstruye los índices durante la partición y luego elimina la partición.
Al final tengo algunos grupos de archivos vacíos. Sus archivos son eliminados . También se eliminan los propios grupos de archivos. Esto funciona bien en la mayoría de los casos. Sin embargo, para dos bases de datos eliminé los archivos ... me queda un grupo de archivos sin ningún archivo asociado pero
ALTER DATABASE REMOVE FILEGROUP
arroja un error 5042:
El grupo de archivos 'xyz' no se puede eliminar porque no está vacío.
Pregunta
¿Cómo puedo deshacerme de ese grupo de archivos vacío ... cuál podría ser el problema?
Ya he leído algunos problemas comunes, sin embargo, no están presentes en mi sistema:
Comprobado:
SELECT * FROM sys.partition_schemes; SELECT * FROM sys.partition_functions;
0 filas ... no quedan objetos de partición en la base de datos
UPDATE STATISTICS
para todos los objetos en la base de datossin efecto
Comprueba los índices en el grupo de archivos:
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 filas
Comprueba los objetos en el grupo de archivos:
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 filas
También probé DBCC SHRINKFILE
con el parámetro EMPTYFILE
antes de eliminar el archivo del grupo de archivos. Realmente no tiene sentido para mí, sin embargo, leo soluciones para describir eso como una solución. No tuvo efecto de todos modos.
Tengo algo de esperanza al leer esta pregunta sobre la falla del servidor e intenté lo siguiente:
- Actualizar todas las estadísticas
- Descarte todas las estadísticas que no estén relacionadas con índices
Sin embargo, esto no tuvo ningún efecto. Todavía tengo un grupo de archivos sin ningún archivo asociado y el grupo de archivos no se puede eliminar. Estoy totalmente perplejo ya que esto sucede en algunas bases de datos y no en otras (con la misma estructura). Cuando realizo DBCC CHECK FILEGROUP
en este grupo de archivos vacío recibo un montón de mensajes de error como el siguiente:
No se puede procesar el ID de conjunto de filas 72057594712162304 del objeto "STORY_TRANSLATIONSCCC" (ID 120387498), índice "Ref90159CCC" (ID 2), porque reside en el grupo de archivos "CCC_APPLICATION_new" (ID 8), que no se verificó.
Resultados de DBCC para 'STORY_TRANSLATIONSCCC'. Hay 0 filas en 0 páginas para el objeto "STORY_TRANSLATIONSCCC".
¿Es esto normal o apunta a algo inusual?
Esta pregunta puede ser un duplicado, sin embargo, no puedo encontrar una solución para mí en otras preguntas sobre dba.stackexchange. Echa un vistazo a la lista de lo que ya he probado. Esto es idéntico a las soluciones descritas en No se pueden eliminar los grupos de archivos no utilizados .
Más detalles
Quizás sea útil entender lo que hago antes de que ocurra el error. Estoy planeando una migración a un nuevo servidor. Actualmente estoy probando esto en una instancia de prueba. Las bases de datos se restauran desde el servidor de producción y el modelo de recuperación cambia a simple. Mi objetivo es reestructurar los grupos de archivos y pasar de un modelo con un archivo por grupo de archivos a un modelo con dos archivos por grupo de archivos. Para lograrlo, creo nuevos grupos de archivos vacíos con dos archivos cada uno y muevo los datos. Desafortunadamente, la mayoría de los objetos tienen datos LOB (XML y binario) ... así que aprovecho la partición como ayuda para mover los datos lob también. Al final, todos los datos residen en los nuevos grupos de archivos y los grupos de archivos antiguos están vacíos. Luego elimino todos los archivos y elimino el grupo de archivos correspondiente también. El grupo de archivos primario permanece y solo se agrega otro archivo.pregunta mía . Este proceso funciona bien pero en dos bases de datos los archivos se pueden eliminar pero el grupo de archivos no. Sorprendentemente, la estructura de estas bases de datos debería ser la misma que la estructura de otras bases de datos si no se encuentran problemas en el proceso de mover los datos y eliminar los antiguos grupos de archivos.
Aquí hay una lista de grupos de archivos y archivos de las dos bases de datos donde ocurre el problema:
- CCC_GENTE
antes de
+-----------------+------------+
| Filegroup | Filename |
+-----------------+------------+
| CCC_APPLICATION | CCC_APP |
+-----------------+------------+
| CCC_ARCHIVE | CCC_ARCHIV |
+-----------------+------------+
| CCC_AXN | CCC_AXN |
+-----------------+------------+
| CCC_GDV | CCC_GDV |
+-----------------+------------+
| PRIMARY | CCC |
+-----------------+------------+
después
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| 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 |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
Espero que ayude un poco. También hay una segunda base de datos donde los nombres de los grupos de archivos son diferentes, pero lo dejo por razones de brevedad.